1. The object is initially passive, and is stored in the object store as an instance of the class OutputObjectState.

  2. When required by an application, the object is automatically activated by reading it from the store using a read_committed operation and is then converted from an InputObjectState instance into a fully-fledged object by the restore_state operation of the object.

  3. When the application has finished with the object, it is deactivated by converting it back into an OutputObjectState instance using the save_state operation, and is then stored back into the object store as a shadow copy using write_uncommitted. This shadow copy can be committed, overwriting the previous version, using the commit_state operation. The existence of shadow copies is normally hidden from the programmer by the transaction system. Object deactivation normally only occurs when the top-level transaction within which the object was activated commits