Atomic transactions have been widely studied as a mechanism for coping with concurrency and failures, particularly in distributed systems. A variety of concurrency control and recovery algorithms exist. Unfortunately, not all concurrency control algorithms can be used with all recovery algorithms. The goal of this work is to study the interactions among the pieces of a distributed transaction system, including concurrency control, recovery, commit coordination, orphan detection, deadlock detection, and replication. By understanding the fundamental requirements placed on each piece by the other pieces, we expect to be able to develop more general algorithms, and to make it easier to adapt algorithms designed for one system for use in other systems. We also plan to study the division of work between the application program and the underlying system, with the goal of doing as much as possible in the system while still providing the expressive power necessary to, for example, use application semantics to provide high levels of concurrency. ^R JUSTIFICATION