Machine crashes and network partintions are major problems while running a distributed application. It is important to deal with failures that are caused by such events within runtime. Otherwise, it will be a must to restart the application from the beginning. A possible solution to this problem is to introduce a software layer that is able to detect failures and recover from them dynamically. Fault tolerance mechanisms, such as transactions and mobile coordination, are applicable to deal with client failures. Other mechanisms, such as dynamic replication, are suitable to the server failures.