Self-stabilization is a system property that implies the system convergence to the desired behavior from every possible system state. Self-stabilizing monitoring layer implies automatic recovery of a monitored system and enables automatic recovery of systems. In the first part of the book we suggest monitoring the safety and liveness properties of black box software packages by recording its IO trace. The monitoring layer continuesly analyzes the trace to identify the properties violations and executes appropriate recovery actions upon violation. In the second part of the book we present recovery oriented programming - a framework for creating recovery oriented software. The framework is a pre-compiler that produces augmented code from provided recovery tuples to monitor the recovery tuples safety and liveness properties and to invoke recovery actions upon the properties violations. In the third part of the book we suggest to create programs automatically instead of monitoring or enhancing an existing system. We present generic algorithms that search automatically for programs that fit the current, possibly unanticipated, environment state.