diff --git a/Database/APR/PersistencySvc/PersistencySvc/IDatabase.h b/Database/APR/PersistencySvc/PersistencySvc/IDatabase.h
index e32a36240694da8860243ff445d6680f18dbc5cf..ecb638ce4790fc3d74c654b729c975f0d7dc1f3e 100644
--- a/Database/APR/PersistencySvc/PersistencySvc/IDatabase.h
+++ b/Database/APR/PersistencySvc/PersistencySvc/IDatabase.h
@@ -46,12 +46,6 @@ namespace pool {
     /// Returns the opening mode. It can be used to check whether the database is connected.
     virtual OpenMode openMode() const = 0;
 
-    /** Reopens in a different mode.
-     *  If the database was in UPDATE mode before, then all changes since
-     *  the last commit are aborted.
-     */
-    virtual void revertMode( OpenMode mode ) = 0;
-
     /// Returns the file identifier of this database
     virtual const std::string& fid() const = 0;
 
diff --git a/Database/APR/PersistencySvc/src/DatabaseHandler.cpp b/Database/APR/PersistencySvc/src/DatabaseHandler.cpp
index 36c3b28ea9ef9f0ffa85bdb7cffb5ff66bfc8979..d7e40b61b3c969fa60a2bead419c8ab3f6420c4c 100644
--- a/Database/APR/PersistencySvc/src/DatabaseHandler.cpp
+++ b/Database/APR/PersistencySvc/src/DatabaseHandler.cpp
@@ -26,7 +26,6 @@ pool::PersistencySvc::DatabaseHandler::DatabaseHandler( pool::IStorageSvc& stora
   m_storageSvc( storageSvc ),
   m_storageExplorer( storageExplorer ),
   m_session( session ),
-  m_transaction( 0 ),
   m_fileDescriptor( fid, pfn ),
   m_technology( technology ),
   m_accessMode( accessmode )
@@ -39,115 +38,67 @@ pool::PersistencySvc::DatabaseHandler::DatabaseHandler( pool::IStorageSvc& stora
   }
 }
 
-
 pool::PersistencySvc::DatabaseHandler::~DatabaseHandler()
 {
-  if ( this->isTransactionActive() ) {
-    this->rollBackTransaction();
-  }
-  m_storageSvc.disconnect( m_fileDescriptor );
-}
-
-
-bool
-pool::PersistencySvc::DatabaseHandler::startTransaction()
-{
-  if ( m_transaction ) return false;
-  if ( m_storageSvc.startTransaction( m_fileDescriptor.dbc(),
-                                      m_transaction ).isSuccess() ) {
-    return true;
-  }
-  else return false;
+   rollBackTransaction();
+   m_storageSvc.disconnect( m_fileDescriptor );
 }
 
 
 bool
 pool::PersistencySvc::DatabaseHandler::commitTransaction()
 {
-  bool result = false;
-  if ( m_transaction ) {
-    if ( m_storageSvc.endTransaction( m_transaction,
-                                      pool::Transaction::TRANSACT_COMMIT ).isSuccess() &&
-         m_storageSvc.startTransaction( m_fileDescriptor.dbc(),
-                                        m_transaction ).isSuccess() &&
-         m_storageSvc.endTransaction( m_transaction,
-                                      pool::Transaction::TRANSACT_FLUSH ).isSuccess() ) {
-      result = true;
-    }
-    m_transaction = 0;
-  }
-  return result;
+   return ( m_storageSvc.endTransaction( m_fileDescriptor.dbc(),
+                                         Transaction::TRANSACT_COMMIT ).isSuccess() &&
+            m_storageSvc.endTransaction( m_fileDescriptor.dbc(),
+                                         Transaction::TRANSACT_FLUSH ).isSuccess() );
 }
 
 
 bool
 pool::PersistencySvc::DatabaseHandler::commitAndHoldTransaction()
 {
-  bool result = false;
-  if ( m_transaction ) {
-    if ( m_storageSvc.endTransaction( m_transaction,
-                                      pool::Transaction::TRANSACT_COMMIT ).isSuccess() ) {
-      m_transaction = 0;
-      if ( m_storageSvc.startTransaction( m_fileDescriptor.dbc(),
-                                          m_transaction ).isSuccess() ) {
-        result = true;
-      }
-    }
-  }
-  return result;
+   return ( m_storageSvc.endTransaction( m_fileDescriptor.dbc(),
+                                         Transaction::TRANSACT_COMMIT ).isSuccess() );
 }
 
 
 void
 pool::PersistencySvc::DatabaseHandler::rollBackTransaction()
 {
-  if ( m_transaction ) {
-    m_storageSvc.endTransaction( m_transaction, pool::Transaction::TRANSACT_ROLLBACK );
-    m_transaction = 0;
-  }
+   m_storageSvc.endTransaction( m_fileDescriptor.dbc(), Transaction::TRANSACT_ROLLBACK );
 }
 
 
-bool
-pool::PersistencySvc::DatabaseHandler::isTransactionActive() const
-{
-  if ( m_transaction ) return true;
-  else return false;
-}
-
 
 std::vector< std::string >
 pool::PersistencySvc::DatabaseHandler::containers()
 {
-  std::vector< std::string > result;
-  if ( m_transaction ) {
-    std::vector<const Token*> containerTokens;
-    m_storageExplorer.containers( m_fileDescriptor, containerTokens );
-    for ( std::vector<const Token*>::const_iterator iToken = containerTokens.begin();
-          iToken != containerTokens.end(); ++iToken ) {
+   std::vector< std::string > result;
+   std::vector<const Token*> containerTokens;
+   m_storageExplorer.containers( m_fileDescriptor, containerTokens );
+   for ( std::vector<const Token*>::const_iterator iToken = containerTokens.begin();
+         iToken != containerTokens.end(); ++iToken ) {
       result.push_back( m_storageSvc.getContName(m_fileDescriptor, **iToken) );
-    }
-  }
-  return result;
+   }
+   return result;
 }
 
 pool::IContainer*
 pool::PersistencySvc::DatabaseHandler::container( const std::string& containerName )
 {
-  if ( m_transaction ) {
-    // Check the existence of a given container.
-    std::vector< std::string > allContainers = this->containers();
-    for ( std::vector< std::string >::const_iterator iName = allContainers.begin();
-          iName != allContainers.end(); ++iName ) {
+   // Check the existence of a given container.
+   std::vector< std::string > allContainers = this->containers();
+   for ( std::vector< std::string >::const_iterator iName = allContainers.begin();
+         iName != allContainers.end(); ++iName ) {
       if ( *iName == containerName ) {
-        return new pool::PersistencySvc::Container( m_fileDescriptor,
-                                                    m_storageExplorer,
-                                                    m_technology,
-                                                    containerName );
+         return new pool::PersistencySvc::Container( m_fileDescriptor,
+                                                     m_storageExplorer,
+                                                     m_technology,
+                                                     containerName );
       }
-    }
-  }
-  return 0;
+   }
+   return 0;
 }
 
 
@@ -182,12 +133,10 @@ pool::PersistencySvc::DatabaseHandler::accessMode() const
 void
 pool::PersistencySvc::DatabaseHandler::reconnect( long accessMode )
 {
-  bool activeTransaction = this->isTransactionActive();
-  if ( activeTransaction ) this->rollBackTransaction();
-  if ( m_storageSvc.reconnect( m_fileDescriptor, accessMode ).isSuccess() ) {
-    m_accessMode = accessMode;
-  }
-  if ( activeTransaction ) this->startTransaction();
+   rollBackTransaction();
+   if( m_storageSvc.reconnect( m_fileDescriptor, accessMode ).isSuccess() ) {
+      m_accessMode = accessMode;
+   }
 }
 
 
@@ -198,7 +147,6 @@ pool::PersistencySvc::DatabaseHandler::writeObject( const std::string& container
                                                     const RootType& type )
 {
   Token* token = 0;
-  if ( ! m_transaction ) return token;
   if ( ! object ) return token;
 
   // Get the persistent shape.
@@ -209,8 +157,7 @@ pool::PersistencySvc::DatabaseHandler::writeObject( const std::string& container
   }
 
   if ( shape )  {
-    if ( m_storageSvc.allocate( m_transaction,
-                                m_fileDescriptor,
+    if ( m_storageSvc.allocate( m_fileDescriptor,
                                 containerName,
                                 minorTechnology,
                                 object,
@@ -227,7 +174,6 @@ void*
 pool::PersistencySvc::DatabaseHandler::readObject( const Token& token, void* object )
 {
   void* result( object );
-  if ( ! m_transaction ) return result;
 
   // Get the persistent shape
   const pool::Shape* shape = 0;
diff --git a/Database/APR/PersistencySvc/src/DatabaseHandler.h b/Database/APR/PersistencySvc/src/DatabaseHandler.h
index 67134ae3c1d85dd2dd71f2c6cd74a5942d90a01d..2df46d1ac272986ad4e4eb999c18a490879bdae8 100644
--- a/Database/APR/PersistencySvc/src/DatabaseHandler.h
+++ b/Database/APR/PersistencySvc/src/DatabaseHandler.h
@@ -18,7 +18,6 @@ namespace pool {
 
   // forward declarations
   class Session;
-  class Transaction;
   class IStorageSvc;
   class IStorageExplorer;
   class IContainer;
@@ -46,9 +45,6 @@ namespace pool {
       /// Destructor. Disconnects from the database
       ~DatabaseHandler();
 
-      /// Starts the transaction
-      bool startTransaction();
-
       /// Commits the transaction
       bool commitTransaction();
 
@@ -58,9 +54,6 @@ namespace pool {
       /// Rolls back the transaction
       void rollBackTransaction();
 
-      /// Checks if a transaction is active
-      bool isTransactionActive() const;
-
       /// Gives the list of containers
       std::vector< std::string > containers();
 
@@ -113,8 +106,6 @@ namespace pool {
       IStorageExplorer& m_storageExplorer;
       /// Pointer to the session for this database
       Session*          m_session;
-      /// Micro transaction handler for this database
-      Transaction*      m_transaction;
       /// File descriptor for this database
       FileDescriptor    m_fileDescriptor;
       /// Technology identifier
diff --git a/Database/APR/PersistencySvc/src/GlobalTransaction.cpp b/Database/APR/PersistencySvc/src/GlobalTransaction.cpp
index 32e395a637a2ccb09d6e29d6e008d1551b37b5d5..f1c67e6cf3b8514b9f51f78a423a34ca49cc81b3 100644
--- a/Database/APR/PersistencySvc/src/GlobalTransaction.cpp
+++ b/Database/APR/PersistencySvc/src/GlobalTransaction.cpp
@@ -24,34 +24,8 @@ bool
 pool::PersistencySvc::GlobalTransaction::start( pool::ITransaction::Type type )
 {
   if ( this->isActive() || type == pool::ITransaction::UNDEFINED ) return false;
-  unsigned int successfullDatabases = 0;
-  bool result = false;
-  for ( pool::PersistencySvc::DatabaseRegistry::iterator iDb = m_databases.begin();
-        iDb != m_databases.end(); ++iDb ) {
-    if ( ! (*iDb)->startTransaction() ) {
-      coral::MessageStream log( "PersistencySvc::GlobalTransaction" );
-      log << coral::Error << "Could not start a transaction for the database with" << coral::MessageStream::endmsg
-          << "FID = " << (*iDb)->fid() << coral::MessageStream::endmsg
-          << "PFN = " << (*iDb)->pfn() << coral::MessageStream::endmsg;
-      break;
-    }
-    ++successfullDatabases;
-  }
-
-  if ( successfullDatabases == m_databases.size() ) {
-    result = true;
-  }
-  else { // at least one database failed. Rollback the ones we started
-    pool::PersistencySvc::DatabaseRegistry::iterator iDb = m_databases.begin();
-    while ( successfullDatabases > 0 ) {
-      (*iDb)->rollBackTransaction();
-      --successfullDatabases;
-      ++iDb;
-    }
-  }
-
-  if ( result ) m_type = type;
-  return result;
+  m_type = type;
+  return true;
 }
 
 
diff --git a/Database/APR/PersistencySvc/src/MicroSessionManager.cpp b/Database/APR/PersistencySvc/src/MicroSessionManager.cpp
index bb9350449c58854611c9ed87697f6ec8c2ad56d5..d9d6dad6103c2a3381e084cb20716255adfcfdcf 100644
--- a/Database/APR/PersistencySvc/src/MicroSessionManager.cpp
+++ b/Database/APR/PersistencySvc/src/MicroSessionManager.cpp
@@ -82,7 +82,6 @@ pool::PersistencySvc::MicroSessionManager::connect( const std::string& fid,
                                                     accessMode );
     m_registry.registerDatabaseHandler( db );
     m_databaseHandlers.insert( db );
-    db->startTransaction();
   }
   catch( pool::PersistencySvcException& /* error */) {
   }
diff --git a/Database/APR/PersistencySvc/src/UserDatabase.cpp b/Database/APR/PersistencySvc/src/UserDatabase.cpp
index acaf39ddc97af2332ace9146e6652d1af7f7e055..0a4716004333cb1c047b50dd6b27cc739f073bda 100644
--- a/Database/APR/PersistencySvc/src/UserDatabase.cpp
+++ b/Database/APR/PersistencySvc/src/UserDatabase.cpp
@@ -145,7 +145,8 @@ pool::PersistencySvc::UserDatabase::connectForWrite( const pool::DatabaseConnect
 
     if ( this->checkInRegistry() ) {
       if ( m_openMode == pool::IDatabase::READ ) {
-        this->revertMode( pool::IDatabase::UPDATE );
+         m_databaseHandler->reconnect( pool::UPDATE );
+         m_openMode = pool::IDatabase::UPDATE;
       }
     }
     else { // The database is not yet connected.
@@ -253,33 +254,6 @@ pool::PersistencySvc::UserDatabase::openMode() const
 }
 
 
-void
-pool::PersistencySvc::UserDatabase::revertMode( pool::IDatabase::OpenMode mode )
-{
-  if ( m_databaseHandler ) {
-    switch ( mode ){
-    case pool::IDatabase::CLOSED:
-      this->disconnect();
-      break;
-    case pool::IDatabase::READ:
-      if ( m_openMode == pool::IDatabase::UPDATE ) {
-        m_databaseHandler->reconnect( pool::READ );
-        m_openMode = pool::IDatabase::READ;
-      }
-      break;
-    case pool::IDatabase::UPDATE:
-      if ( m_openMode == pool::IDatabase::READ ) {
-        m_databaseHandler->reconnect( pool::UPDATE );
-        m_openMode = pool::IDatabase::UPDATE;
-      }
-      break;
-    default:
-      break;
-    };
-  }
-}
-
-
 const std::string&
 pool::PersistencySvc::UserDatabase::fid() const
 {
diff --git a/Database/APR/PersistencySvc/src/UserDatabase.h b/Database/APR/PersistencySvc/src/UserDatabase.h
index fc4872b1b0ffd409a884217caab1208e91258721..6212069b7913947191fcc3883673ec9ec2157089 100644
--- a/Database/APR/PersistencySvc/src/UserDatabase.h
+++ b/Database/APR/PersistencySvc/src/UserDatabase.h
@@ -61,12 +61,6 @@ namespace pool {
       /// Returns the opening mode. It can be used to check whether the database is connected.
       IDatabase::OpenMode openMode() const;
 
-      /** Reopens in a different mode.
-       *  If the database was in UPDATE mode before, then all changes since
-       *  the last commit are aborted.
-       */
-      void revertMode( IDatabase::OpenMode mode );
-
       /// Returns the file identifier of this database
       const std::string& fid() const;
 
diff --git a/Database/APR/RootStorageSvc/src/RootDatabase.cpp b/Database/APR/RootStorageSvc/src/RootDatabase.cpp
index e2fa30d50655c9c6f72b79d60245467c004fcc98..9ee127fd2a352c1bb872344a630b55f04d8b3762 100644
--- a/Database/APR/RootStorageSvc/src/RootDatabase.cpp
+++ b/Database/APR/RootStorageSvc/src/RootDatabase.cpp
@@ -35,22 +35,20 @@
 
 using namespace pool;
 using namespace std;
-//namespace pool {
-//  void patchStreamers(RootDatabase* db, TFile* file);
-//}
 
 /// Standard Constuctor
 RootDatabase::RootDatabase(IOODatabase* idb)
-: DbDatabaseImp(idb), m_file(nullptr), 
-  m_defCompression(1),
-  m_defCompressionAlg(1),
-  m_defSplitLevel(99),
-  m_defAutoSave(16*1024*1024),
-  m_defBufferSize(16*1024),
-  m_defWritePolicy(TObject::kOverwrite),   // On write create new versions
-  m_branchOffsetTabLen(0),
-  m_defTreeCacheLearnEvents(100),
-  m_fileMgr(nullptr)
+      : DbDatabaseImp(idb),
+        m_file(nullptr), 
+        m_defCompression(1),
+        m_defCompressionAlg(1),
+        m_defSplitLevel(99),
+        m_defAutoSave(16*1024*1024),
+        m_defBufferSize(16*1024),
+        m_defWritePolicy(TObject::kOverwrite),   // On write create new versions
+        m_branchOffsetTabLen(0),
+        m_defTreeCacheLearnEvents(100),
+        m_fileMgr(nullptr)
 {
   m_version = "1.1";
   DbInstanceCount::increment(this);
@@ -783,13 +781,14 @@ void RootDatabase::registerBranchContainer(RootTreeContainer* cont)
 }
 
 
-/// Start/Commit/Rollback Database Transaction
-DbStatus RootDatabase::transAct(DbTransaction&  refTr )
+/// Execute Database Transaction action
+DbStatus RootDatabase::transAct(Transaction::Action action)
 {
+   cout << "RootDatabase::transAct" << endl;
    // process flush to write file
-   if( refTr.state() == Transaction::TRANSACT_FLUSH && m_file != nullptr && m_file->IsWritable()) m_file->Write();
+   if( action == Transaction::TRANSACT_FLUSH && m_file != nullptr && m_file->IsWritable()) m_file->Write();
    // process commits only
-   if( refTr.state() != Transaction::TRANSACT_COMMIT )
+   if( action != Transaction::TRANSACT_COMMIT )
       return Success;
 
    // check all TTrees with branch containers, if they need Filling
diff --git a/Database/APR/RootStorageSvc/src/RootDatabase.h b/Database/APR/RootStorageSvc/src/RootDatabase.h
index 74a8401137714bbc794fd1fe8d58b77178b79fcf..1b7f0bef8d361107bc4c7e48426fb3add69d0028 100644
--- a/Database/APR/RootStorageSvc/src/RootDatabase.h
+++ b/Database/APR/RootStorageSvc/src/RootDatabase.h
@@ -39,7 +39,8 @@ namespace pool  {
     * @date    1/8/2002
     * @version 1.0
     */
-  class RootDatabase : public DbDatabaseImp  {
+   class RootDatabase : public DbDatabaseImp
+   {
   public:
     enum { READ_COUNTER = 0, WRITE_COUNTER = 1, OTHER_COUNTER = 2 };
   private:
@@ -177,9 +178,8 @@ namespace pool  {
       */
     virtual DbStatus close(DbAccessMode mode);
 
-    /// Start/Commit/Rollback Database Transaction
-    virtual DbStatus transAct(DbTransaction& /* refTr */);
-
+    /// Execute Database Transaction action
+    virtual DbStatus transAct(Transaction::Action action);
   };
 }       // End namespace pool
 #endif  /* POOL_ROOTSTORAGESVC_ROOTDBASE_H */
diff --git a/Database/APR/RootStorageSvc/src/RootKeyContainer.cpp b/Database/APR/RootStorageSvc/src/RootKeyContainer.cpp
index b59ffe950aa2fef089549840326ae99b67c493fc..2dc1b088a9ea6300362113e0cb7739c35c6b5f01 100755
--- a/Database/APR/RootStorageSvc/src/RootKeyContainer.cpp
+++ b/Database/APR/RootStorageSvc/src/RootKeyContainer.cpp
@@ -15,13 +15,11 @@
 
 #include "StorageSvc/DbOption.h"
 #include "StorageSvc/DbSelect.h"
-#include "StorageSvc/DbDatabase.h"
 #include "StorageSvc/DbColumn.h"
 #include "StorageSvc/DbTypeInfo.h"
 #include "StorageSvc/DataCallBack.h"
 #include "StorageSvc/DbInstanceCount.h"
 #include "StorageSvc/DbArray.h"
-#include "StorageSvc/DbTransaction.h"
 #include "StorageSvc/DbReflex.h"
 
 // Local implementation files
@@ -90,30 +88,19 @@ long long int RootKeyContainer::size()    {
   return -1;
 }
 
-/// Execute object modification requests during a transaction
-DbStatus RootKeyContainer::endTransaction(DbTransaction& refTr)   {
-  DbStatus status = Success;
-  switch(refTr.state()) {
-  case Transaction::TRANSACT_COMMIT:
-    break;
-  case Transaction::TRANSACT_FLUSH:
-    if ( m_dir )  {
-      m_dir->SaveSelf();
-    }
-    else {
-      status = Error;
-    }
-    break;
-  case Transaction::TRANSACT_START:
-    break;
-  case Transaction::TRANSACT_ROLLBACK:
-    break;
-  default:
-    status = Error;
-    break;
-  }
-  return status;
+/// Execute transaction action
+DbStatus RootKeyContainer::transAct(Transaction::Action action) 
+{
+   // execure action on the base class first
+   DbStatus status = DbContainerImp::transAct(action);
+   if( !status.isSuccess() ) return status;
+
+   if( action != Transaction::TRANSACT_FLUSH ) return Success;
+   if( !m_dir ) return Error;
+   m_dir->SaveSelf();
+   return Success;
 }
+   
 
 // Interface Implementation: Find entry in container
 DbStatus RootKeyContainer::fetch(const Token::OID_t& linkH, Token::OID_t& stmt) {
diff --git a/Database/APR/RootStorageSvc/src/RootKeyContainer.h b/Database/APR/RootStorageSvc/src/RootKeyContainer.h
index 28c20eb2d8bd309a36956a626db030dbd12c1b34..ca83f6db54682767f4facd514bd7d1fc1d63fef8 100755
--- a/Database/APR/RootStorageSvc/src/RootKeyContainer.h
+++ b/Database/APR/RootStorageSvc/src/RootKeyContainer.h
@@ -16,7 +16,6 @@
 // Framework include files
 #include "StorageSvc/DbDatabase.h"
 #include "StorageSvc/DbContainerImp.h"
-#include "StorageSvc/DbImplementation.h"
 
 // Forward declarations
 namespace CINT { class IOHandler; }
@@ -125,7 +124,8 @@ namespace pool  {
       *
       * @return DbStatus code indicating success or failure.  
       */
-    virtual DbStatus endTransaction(DbTransaction& refTr);
+    /// Execute transaction action
+    virtual DbStatus transAct(Transaction::Action action);
   };
 }
 #endif //POOL_ROOTKEYCONTAINER_H
diff --git a/Database/APR/RootStorageSvc/src/RootTreeContainer.cpp b/Database/APR/RootStorageSvc/src/RootTreeContainer.cpp
index 69ed6538c4fd487f91eee209cb8d12c63ecac0ce..46222a23d60649544f315a1d4462bcd2c8a0d195 100755
--- a/Database/APR/RootStorageSvc/src/RootTreeContainer.cpp
+++ b/Database/APR/RootStorageSvc/src/RootTreeContainer.cpp
@@ -22,7 +22,7 @@
 #include "StorageSvc/DataCallBack.h"
 #include "StorageSvc/DbArray.h"
 #include "POOLCore/DbPrint.h"
-#include "StorageSvc/DbTransaction.h"
+#include "StorageSvc/Transaction.h"
 #include "StorageSvc/DbReflex.h"
 
 // Local implementation files
@@ -1213,44 +1213,24 @@ DbStatus RootTreeContainer::setOption(const DbOption& opt)  {
 }
 
 
-/// Execute object modification requests during a transaction
-DbStatus RootTreeContainer::endTransaction(DbTransaction& refTr)  {
-  DbStatus status = Success;
-  switch(refTr.state()) {
-  case Transaction::TRANSACT_COMMIT:
-    break;
-  case Transaction::TRANSACT_FLUSH:
-     if( m_tree )  {
-        DbPrint log(m_name);
-        if( isBranchContainer() ) {
-           log << DbPrintLvl::Debug << "endTransaction: go to finish" << DbPrint::endmsg;
-           status = finishTransAct();
-        } else {
-           log << DbPrintLvl::Debug << "endTransaction:  tree AutoSave" << DbPrint::endmsg;
-           m_tree->AutoSave();
-        }
-     }
-     else {
-        status = Error;
-     }
-     break;
-  case Transaction::TRANSACT_START:
-    break;
-  case Transaction::TRANSACT_ROLLBACK:
-    break;
-  default:
-    status = Error;
-    break;
-  }
-  return status;
-}
-
-DbStatus RootTreeContainer::finishTransAct()    {
+/// Execute transaction action
+DbStatus RootTreeContainer::transAct(Transaction::Action action) 
+{
+   // execure action on the base class first
+   DbStatus status = DbContainerImp::transAct(action);
+   if( !status.isSuccess() ) return status;
+
+   if( action != Transaction::TRANSACT_FLUSH ) return Success;
+   if( !m_tree ) return Error;
+   if( !isBranchContainer() ) {
+      m_tree->AutoSave();
+      return Success;
+   }
+   // check if all TTree branches were filled and write the TTree
    Branches::const_iterator k;
    for(k=m_branches.begin(); k !=m_branches.end(); ++k) {
       Long64_t branchEntries = k->branch->GetEntries();
       Long64_t treeEntries = m_tree->GetEntries();
-      // cout << "  +++  End Transaction. Tree rows=" << treeEntries << " , Branch " << k->branch->GetName() << " " << branchEntries << endl;
       if (branchEntries > treeEntries) {
          TIter next(m_tree->GetListOfBranches());
          TBranch * b = nullptr;
diff --git a/Database/APR/RootStorageSvc/src/RootTreeContainer.h b/Database/APR/RootStorageSvc/src/RootTreeContainer.h
index dc761b8a982e07ef00acfd22c8b5c7a362371c10..b8aaa7a0f8993b09a137303b05fd6fccddc5606a 100755
--- a/Database/APR/RootStorageSvc/src/RootTreeContainer.h
+++ b/Database/APR/RootStorageSvc/src/RootTreeContainer.h
@@ -248,12 +248,8 @@ namespace pool  {
     /// Commit single entry to container
     virtual DbStatus writeObject(TransactionStack::value_type& entry);
 
-    /// Execute end of object modification requests during a transaction
-    /** @param refTr    [IN]     Transaction reference
-      *
-      * @return DbStatus code indicating success or failure.  
-      */
-    virtual DbStatus endTransaction(DbTransaction& refTr);
+    /// Execute Transaction action
+    virtual DbStatus transAct(Transaction::Action action);
   };
 }
 #endif //POOL_ROOTTREECONTAINER_H
diff --git a/Database/APR/StorageSvc/StorageSvc/DbContainer.h b/Database/APR/StorageSvc/StorageSvc/DbContainer.h
index fd790f63cb049b8513436277b458f77e95668ebe..261df9a0da336eda920a0f792d4db31883291e28 100644
--- a/Database/APR/StorageSvc/StorageSvc/DbContainer.h
+++ b/Database/APR/StorageSvc/StorageSvc/DbContainer.h
@@ -17,6 +17,7 @@
 #include "PersistentDataModel/Token.h"
 #include "StorageSvc/DbObject.h"
 #include "StorageSvc/DbHandleBase.h"
+#include "StorageSvc/Transaction.h"
 
 /*
  * POOL namespace declaration
@@ -130,12 +131,10 @@ namespace pool  {
                   const DbType&       dbtyp,
                   DbAccessMode        mod) const;
 
-    /// Allow query if Transaction is active
-    bool transactionActive() const;
     /// Check if the container was opened
     bool isOpen() const;
-    /// Start/Commit/Rollback Database Transaction
-    DbStatus transAct(DbTransaction& refTransaction);
+    /// Execute Database Transaction Action
+    DbStatus transAct(Transaction::Action action);
     /// Pass options to the implementation
     DbStatus setOption(const DbOption& refOpt);
     /// Access options
diff --git a/Database/APR/StorageSvc/StorageSvc/DbContainerImp.h b/Database/APR/StorageSvc/StorageSvc/DbContainerImp.h
index a1a38689f0e45c215af300083dcb677c8cb07601..9e07ae190894efeea17c58e50d8afdc7b9417161 100644
--- a/Database/APR/StorageSvc/StorageSvc/DbContainerImp.h
+++ b/Database/APR/StorageSvc/StorageSvc/DbContainerImp.h
@@ -112,17 +112,7 @@ namespace pool    {
     virtual DbStatus writeObject(TransactionStack::value_type& /* entry */)  
     { return Error;                                                   }
     /// Execute object modification requests during a transaction
-    /** @param refTr    [IN]  Transaction reference
-      *
-      * @return DbStatus code indicating success or failure.  
-      */
-    virtual DbStatus commitTransaction(DbTransaction& refTr);
-    /// Execute end of object modification requests during a transaction
-    /** @param refTr    [IN]  Transaction reference
-      *
-      * @return DbStatus code indicating success or failure.  
-      */
-    virtual DbStatus endTransaction(DbTransaction& refTr);
+    virtual DbStatus commitTransaction();
 
     /// Access section identifier from OID
     virtual const DbSection& getSection(const Token::OID_t& oid) const;
@@ -155,8 +145,8 @@ namespace pool    {
       */
     virtual DbStatus setOption(const DbOption& opt);
 
-    /// Start/Commit/Rollback Database Transaction
-    virtual DbStatus transAct(DbTransaction& pTransaction);
+    /// Execute Transaction Action
+    virtual DbStatus transAct(Transaction::Action);
     /// In place allocation of raw memory for the transient object
     virtual void* allocate(   unsigned long siz, 
                               DbContainer&  cntH,
diff --git a/Database/APR/StorageSvc/StorageSvc/DbDatabase.h b/Database/APR/StorageSvc/StorageSvc/DbDatabase.h
index d7b3fee0a443d6f00d0e6b3ee19b4b072cf66f73..e3375122f541c7911068240c938312bf0b49bb16 100644
--- a/Database/APR/StorageSvc/StorageSvc/DbDatabase.h
+++ b/Database/APR/StorageSvc/StorageSvc/DbDatabase.h
@@ -19,6 +19,7 @@
 #include "StorageSvc/pool.h"
 #include "StorageSvc/DbSection.h"
 #include "StorageSvc/DbHandleBase.h"
+#include "StorageSvc/Transaction.h"
 
 // STL include files
 #include <vector>
@@ -39,7 +40,6 @@ namespace pool  {
   class DbDatabaseObj;
   class DbContainer;
   class DbContainerObj;
-  class DbTransaction;
   class DbOption;
   class DbTypeInfo;
 
@@ -91,8 +91,6 @@ namespace pool  {
     }
     /// Access reference counter
     int refCount()  const;
-    /// Allow query if Transaction is active
-    bool transactionActive() const;
     /// Access to access mode member
     DbAccessMode openMode() const;
     /// Access to db name (FID)
@@ -139,11 +137,11 @@ namespace pool  {
     DbStatus retire() const;
     /// Check if the database was opened
     bool isOpen() const;
-    /// Start/Commit/Rollback Database Transaction
-    /** @param   refTr     [IN]  Valid transaction handle.
+    /// Commit/Rollback Database Transaction
+    /** @param   action     [IN]  action to perform
       * @return Status code indicating success or failure.
       */
-    DbStatus transAct(DbTransaction& refTr);
+    DbStatus transAct(Transaction::Action action);
     /// Set options
     /** @param   refOpt    [IN]  Reference to option object.
       * @return Status code indicating success or failure.
diff --git a/Database/APR/StorageSvc/StorageSvc/DbDatabaseImp.h b/Database/APR/StorageSvc/StorageSvc/DbDatabaseImp.h
index 659dc7f59754eb5cf716e6b94a4aab940e665adc..94a2483563f4466357d970341b159356a900f722 100644
--- a/Database/APR/StorageSvc/StorageSvc/DbDatabaseImp.h
+++ b/Database/APR/StorageSvc/StorageSvc/DbDatabaseImp.h
@@ -75,13 +75,6 @@ namespace pool    {
       */
     virtual DbStatus reopen(DbAccessMode mode);
 
-    /// Find container in Database: to be overridden
-    /** @param handle   [IN]  Handle to invalid container object.
-      *
-      * @return DbStatus code indicating success or failure.  
-      */
-    virtual DbStatus find(DbContainer& handle);
-
     /// Access options
     /** @param opt      [IN]  Reference to option object.
       *
@@ -96,12 +89,19 @@ namespace pool    {
       */
     virtual DbStatus setOption(const DbOption& opt);
 
-    /// Start/Commit/Rollback Database Transaction
-    /** @param refTransaction [IN/OUT]  Transaction context.
-      *
-      * @return DbStatus code indicating success or failure.  
+    /// Execute Database Transaction action
+    /** @param   action     [IN]  action to perform
+      * @return Status code indicating success or failure.
       */
-    virtual DbStatus transAct(DbTransaction& refTransaction);
+    virtual DbStatus transAct(Transaction::Action action);
   };
 }      // End namespace pool
 #endif // POOL_DBDATABASEIMP_H
+
+
+
+
+
+
+
+
diff --git a/Database/APR/StorageSvc/StorageSvc/DbTransaction.h b/Database/APR/StorageSvc/StorageSvc/DbTransaction.h
index 916aa927ce053dcef3a7e25718c4553ef910f79a..8257a9fb4f38d37d9139f753d73ce36036337b54 100644
--- a/Database/APR/StorageSvc/StorageSvc/DbTransaction.h
+++ b/Database/APR/StorageSvc/StorageSvc/DbTransaction.h
@@ -29,6 +29,7 @@ namespace pool  {
   class DbDomainObj;
   class DbDatabaseObj;
   class DbContainerObj;
+  class DbStorageSvc;
 
   /** Definition of the Transaction class
 
@@ -42,6 +43,7 @@ namespace pool  {
     friend class DbDomain;
     friend class DbDatabase;
     friend class DbContainer;
+    friend class DbStorageSvc;
   private:
     /// Transaction type
     Transaction::Action m_state;
diff --git a/Database/APR/StorageSvc/StorageSvc/IDbContainer.h b/Database/APR/StorageSvc/StorageSvc/IDbContainer.h
index 40494d1e04b31aac2ed4872f1425a6c845c51bd2..d8b3d7fd409df82b047fc7dca17ac3ce9a3dc593 100644
--- a/Database/APR/StorageSvc/StorageSvc/IDbContainer.h
+++ b/Database/APR/StorageSvc/StorageSvc/IDbContainer.h
@@ -16,6 +16,7 @@
 #include "PersistentDataModel/Token.h"
 #include "StorageSvc/DbObject.h"
 #include "StorageSvc/DbSection.h"
+#include "StorageSvc/Transaction.h"
 
 #include <vector>
 
@@ -29,7 +30,6 @@ namespace pool    {
   class DbDatabase;
   class DbContainer;
   class DataCallBack;
-  class DbTransaction;
   class DbOption;
   class DbSelect;
 
@@ -153,12 +153,8 @@ namespace pool    {
       */
     virtual DbStatus destroy( const Token::OID_t& linkH) = 0;
 
-    /// Start/Commit/Rollback Database Transaction
-    /** @param refTransaction [IN/OUT]  Transaction context.
-      *
-      * @return DbStatus code indicating success or failure.  
-      */
-    virtual DbStatus transAct(DbTransaction& refTransaction) = 0;
+    /// Execute Transaction Action
+    virtual DbStatus transAct(Transaction::Action) = 0;
 
     /// Query the pending transaction stack
     virtual bool updatesPending() const = 0;
diff --git a/Database/APR/StorageSvc/StorageSvc/IDbDatabase.h b/Database/APR/StorageSvc/StorageSvc/IDbDatabase.h
index 92372aede9a054af11ce9e8515b50e3045924d53..7cdd5873fc33e9c28a2a864a63ef950306bb96bf 100644
--- a/Database/APR/StorageSvc/StorageSvc/IDbDatabase.h
+++ b/Database/APR/StorageSvc/StorageSvc/IDbDatabase.h
@@ -16,6 +16,7 @@
 
 // Framework include files
 #include "StorageSvc/pool.h"
+#include "StorageSvc/Transaction.h"
 
 /*
  *  POOL namespace declaration
@@ -27,7 +28,6 @@ namespace pool    {
   class DbDomain;
   class DbDatabase;
   class DbContainer;
-  class DbTransaction;
 
   /** @class IDbDatabase IDbDatabase.h StorageSvc/IDbDatabase.h
     *
@@ -65,13 +65,6 @@ namespace pool    {
       */
     virtual DbStatus getOption(DbOption& refOpt) const = 0;
 
-    /// Find container in Database
-    /** @param handle   [IN]  Handle to invalid container object.
-      *
-      * @return DbStatus code indicating success or failure.  
-      */
-    virtual DbStatus find(DbContainer& handle) = 0;
-
     /// Close database access
     /** @param mode     [IN]  Desired session access mode.
       *
@@ -107,12 +100,11 @@ namespace pool    {
       */
     virtual DbStatus reopen(DbAccessMode mode) = 0;
 
-    /// Start/Commit/Rollback Database Transaction
-    /** @param refTransaction [IN/OUT]  Transaction context.
-      *
-      * @return DbStatus code indicating success or failure.  
+    /// Execute Database Transaction action
+    /** @param   action     [IN]  action to perform
+      * @return Status code indicating success or failure.
       */
-    virtual DbStatus transAct(DbTransaction& refTransaction) = 0;
-  };
+    virtual DbStatus transAct(Transaction::Action action) = 0;
+ };
 }      // End namespace pool
 #endif // POOL_IDBDATABASE_H
diff --git a/Database/APR/StorageSvc/StorageSvc/IOODatabase.h b/Database/APR/StorageSvc/StorageSvc/IOODatabase.h
index 9111d4d4d26214a39afd921755baf9473cd67c62..91a1a71647877d31c6f16b437e35553dcb041cdb 100644
--- a/Database/APR/StorageSvc/StorageSvc/IOODatabase.h
+++ b/Database/APR/StorageSvc/StorageSvc/IOODatabase.h
@@ -2,7 +2,6 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-// $Id: IOODatabase.h 726071 2016-02-25 09:23:05Z krasznaa $
 //====================================================================
 //  IOODatabase interface definition
 //--------------------------------------------------------------------
@@ -16,7 +15,6 @@
 //====================================================================
 #ifndef POOL_IOODATABASE_H
 #define POOL_IOODATABASE_H
-// $Header: /cvs/PF/pool/StorageSvc/StorageSvc/IOODatabase.h,v 1.18 2007/11/28 16:19:33 frankb Exp $
 
 // Framework include files
 #include "StorageSvc/pool.h"
diff --git a/Database/APR/StorageSvc/StorageSvc/IOODatabaseFactory.h b/Database/APR/StorageSvc/StorageSvc/IOODatabaseFactory.h
deleted file mode 100644
index feef04f54b5f305defafa4780a0ef6d6e8197686..0000000000000000000000000000000000000000
--- a/Database/APR/StorageSvc/StorageSvc/IOODatabaseFactory.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef IOODATABASEFACTORY_H
-#define IOODATABASEFACTORY_H
-
-#include "Reflex/PluginService.h"
-#include "StorageSvc/IOODatabase.h"
-
-#include <new>
-
-// Reflex object factory definition
-namespace {
-  template <typename P> class Factory<P,pool::IOODatabase*()> {
-  public: static void Func( void* ret, void* mem, const std::vector<void*>& arg, void*)     {
-    void* p = (pool::IOODatabase*)(mem ? ::new(mem) P(arg[0]) : ::new P(arg[0]));
-    if (ret) *(void**)ret = p;
-  }
-  };
-}
-
-#define DECLARE_OODATABASE(x) PLUGINSVC_FACTORY(x,pool::IOODatabase*())
-
-#endif
diff --git a/Database/APR/StorageSvc/StorageSvc/IStorageSvc.h b/Database/APR/StorageSvc/StorageSvc/IStorageSvc.h
index 1f9d0c2be703e37d494ff9213c9093b7d738f7ae..a31c7f57b9e092831d136a5925a18bda47efa228 100644
--- a/Database/APR/StorageSvc/StorageSvc/IStorageSvc.h
+++ b/Database/APR/StorageSvc/StorageSvc/IStorageSvc.h
@@ -27,7 +27,6 @@ namespace pool  {
   class FileDescriptor;
   typedef class Session            *SessionH;
   typedef class DatabaseConnection *ConnectionH;
-  typedef class Transaction        *TransactionH;
   typedef const class Shape        *ShapeH;
 
   /** @class IStorageSvc IStorageSvc.h StorageSvc/IStorageSvc.h
@@ -84,9 +83,8 @@ namespace pool  {
     virtual std::string getContName(const FileDescriptor& refDB,
                                     const Token&          pToken) = 0;
 
-    /// Register object identified by its pointer with for write.
+    /// Register object for write
     /**
-      * @param   trCxtH    [IN] Handle to the Transaction context.
       * @param   refDB     [IN] Reference to Database descriptor 
       * @param   refCont   [IN] Reference to container name 
       * @param   technology[IN] Specialised sub-technology
@@ -97,20 +95,13 @@ namespace pool  {
       *
       * @return                 DbStatus code indicating success or failure.
       */
-    virtual DbStatus allocate(    TransactionH          trCxtH,
-                                  const FileDescriptor& refDB,
+    virtual DbStatus allocate(    const FileDescriptor& refDB,
                                   const std::string&    refCont,
                                   int                   technology,
                                   const void*           object,
                                   ShapeH                shapeH,
                                   Token*&               refpTok) = 0;
 
-    /// Free a persistent object from the heap.
-    /**
-      * @param   pToken    [IN] Token to the persistent object.
-      * @return                 DbStatus code indicating success or failure.
-      */
-    virtual DbStatus free(        const Token&        pToken)  = 0;
 
     /// Read a persistent object from the medium.
     /** Reading an object does not create the object.
@@ -128,7 +119,6 @@ namespace pool  {
 
     /// In place update of an existing object.
     /**
-      * @param   trCxtH    [IN] Handle to the Transaction context.
       * @param   refDB     [IN] Reference to Database descriptor 
       * @param   object    [IN] Pointer to persistent data object.
       * @param   shapeH    [IN] Handle to persistent type information
@@ -137,23 +127,20 @@ namespace pool  {
       *
       * @return                 DbStatus code indicating success or failure.
       */
-    virtual DbStatus update(      TransactionH          trCxtH,
-                                  const FileDescriptor& refDB,
+    virtual DbStatus update(      const FileDescriptor& refDB,
                                   const void*           object,
                                   ShapeH                shapeH,
                                   const Token&          refToken) = 0;
 
     /// Destroy an existing persistent object.
     /**
-      * @param   trCxtH    [IN] Handle to the Transaction context.
       * @param   refDB     [IN] Reference to Database descriptor 
       * @param   refToken  [IN] Reference to token containing the location
       *                         information of the persistent object.
       *
       * @return                 DbStatus code indicating success or failure.
       */
-    virtual DbStatus destroy(     TransactionH          trCxtH,
-                                  const FileDescriptor& refDB,
+    virtual DbStatus destroy(     const FileDescriptor& refDB,
                                   const Token&          refToken) = 0;
 
     /// Retrieve persistent shape from Storage manager.
@@ -304,25 +291,6 @@ namespace pool  {
     virtual DbStatus openMode(    FileDescriptor&     refDB,
                                   int&                mode ) = 0;
 
-    /// Start a new Transaction sequence.
-    /** When a new Transaction sequence is started, a new context is delivered
-      * to the user. Using this context he will then start collecting objects
-      * for persistency. After this excercise he will finally commit the
-      * objects he collected during the open Transaction.
-      *
-      * @param    dbcH     [IN] Handle to the Database context containing all 
-      *                         information necessary to access the 
-      *                         proper Database. The Database handle was
-      *                         retrieved when connecting to the Database.
-      *
-      * @param    refCtxt [OUT] Handle to a location where the pointer
-      *                         of the Transaction context can be stored.
-      *
-      * @return                 DbStatus code indicating success or failure.
-      */
-    virtual DbStatus startTransaction(const ConnectionH   dbcH,
-                                      TransactionH&       refCtxt) = 0;
-
     /// End/Finish an existing Transaction sequence.
     /** At  this  phase all  objects, which were marked for  write when 
       * the Transaction was started, are either going to be made persistent
@@ -330,7 +298,7 @@ namespace pool  {
       * is invalidated and may no longer be used independent wether the 
       * Transaction was successful or not.
       *
-      * @param    ctxtH [IN]    Transaction context handle.
+      * @param    conn  [IN]    Database connection
       * @param    typ   [IN]    Enum indicating an action to be performed.
       *                         Valid arguments are COMMIT and ROLLBACK.
       *                         ROLLBACK can only be suported if the 
@@ -339,8 +307,7 @@ namespace pool  {
       *
       * @return                 DbStatus code indicating success or failure.
       */
-    virtual DbStatus endTransaction(TransactionH        ctxtH,
-                                    Transaction::Action typ) = 0;
+    virtual DbStatus endTransaction( ConnectionH conn, Transaction::Action typ) = 0;
 
     /// DbStatus code definitions
     enum   {
diff --git a/Database/APR/StorageSvc/src/DbContainer.cpp b/Database/APR/StorageSvc/src/DbContainer.cpp
index 25b451a9fd021aa357a8a49b6f4d014b4b9c3192..a3658253ffc4b5b3ea2e47e8bd524281bb899528 100644
--- a/Database/APR/StorageSvc/src/DbContainer.cpp
+++ b/Database/APR/StorageSvc/src/DbContainer.cpp
@@ -21,7 +21,6 @@
 #include "StorageSvc/DbObjectCallBack.h"
 #include "StorageSvc/DbTypeInfo.h"
 #include "StorageSvc/DbContainer.h"
-#include "StorageSvc/DbTransaction.h"
 #include "StorageSvc/DbToken.h"
 #include "DbContainerObj.h"
 
@@ -106,15 +105,9 @@ bool DbContainer::isOpen() const  {
   return isValid();
 }
 
-/// Allow query if Transaction is active
-bool DbContainer::transactionActive() const  {
-  return isValid() ? m_ptr->transactionActive() : false;
-}
-
-/// Start/Commit/Rollback Database Transaction
-DbStatus DbContainer::transAct(DbTransaction& refTr) {
-  return (isValid() && refTr.validate(m_ptr).isSuccess()) 
-    ? m_ptr->transAct(refTr) : Error;
+/// Execute Database Transaction Action
+DbStatus DbContainer::transAct(Transaction::Action action) {
+  return isValid() ? m_ptr->transAct(action) : Error;
 }
 
 /// Pass options to the implementation
@@ -268,7 +261,7 @@ DbStatus DbContainer::_load(DbObjectHandle<DbObject>& objH,
     Token::OID_t oid;
     DbCallBack call(this, &objH, typ);
     if ( m_ptr->load(&call, linkH, oid, mod, false).isSuccess() )  {
-objH._setObject(call.object());
+      objH._setObject(call.object());
       objH.oid() = oid;
       return Success;
     }
diff --git a/Database/APR/StorageSvc/src/DbContainerImp.cpp b/Database/APR/StorageSvc/src/DbContainerImp.cpp
index 8fdadc0847a122018f5de2c19855ddd28978d932..f6c984dd499ff3edb2983912ec1303047ace86e8 100644
--- a/Database/APR/StorageSvc/src/DbContainerImp.cpp
+++ b/Database/APR/StorageSvc/src/DbContainerImp.cpp
@@ -122,7 +122,7 @@ DbStatus DbContainerImp::clearStack()   {
 }
 
 /// Execute object modification requests during a transaction
-DbStatus DbContainerImp::commitTransaction(DbTransaction& refTr ) {
+DbStatus DbContainerImp::commitTransaction() {
   DbStatus iret   = Success;
   DbStatus status = Success;
   TransactionStack::iterator i = m_stack.begin();
@@ -150,43 +150,18 @@ DbStatus DbContainerImp::commitTransaction(DbTransaction& refTr ) {
       break;
     }
   }
-  clearStack();
-  status = endTransaction(refTr);
-  if ( !status.isSuccess() )  {
-    iret = status;
-  }
   return iret;
 }
 
-/// Execute object modification requests during a transaction
-DbStatus DbContainerImp::endTransaction(DbTransaction& /* refTr */ ) {
-  return Success;
-}
 
-/// Start/Commit/Rollback Database Transaction
-DbStatus DbContainerImp::transAct(DbTransaction& refTr)   {
+/// Execute Database Transaction action
+DbStatus DbContainerImp::transAct(Transaction::Action action)
+{
   DbStatus status = Success;
-  switch(refTr.state()) {
-  case Transaction::TRANSACT_COMMIT:
-    status = commitTransaction(refTr);
-    refTr.set(Transaction::TRANSACT_ENDED);
-    break;
-  case Transaction::TRANSACT_FLUSH:
-    status = commitTransaction(refTr);
-    refTr.set(Transaction::TRANSACT_ENDED);
-    break;
-  case Transaction::TRANSACT_START:
-    refTr.set(Transaction::TRANSACT_ACTIVE);
-    clearStack();
-    break;
-  case Transaction::TRANSACT_ROLLBACK:
-    clearStack();
-    refTr.set(Transaction::TRANSACT_ENDED);
-    break;
-  default:
-    status = Error;
-    break;
+  if( action==Transaction::TRANSACT_COMMIT || action==Transaction::TRANSACT_FLUSH ) {
+     status = commitTransaction();
   }
+  clearStack();
   return status;
 }
 
diff --git a/Database/APR/StorageSvc/src/DbContainerObj.cpp b/Database/APR/StorageSvc/src/DbContainerObj.cpp
index 9a2d84dcff8fc5628574311c63ace61e4ef4a6e9..cd8c7521ebef05804a864e3ec3f515e56673e830 100644
--- a/Database/APR/StorageSvc/src/DbContainerObj.cpp
+++ b/Database/APR/StorageSvc/src/DbContainerObj.cpp
@@ -48,12 +48,11 @@ DbContainerObj::DbContainerObj( const DbDatabase& dbH,
                                 const string&     nam, 
                                 const DbType&     dbtyp,
                                 DbAccessMode      mod)   
-: Base(nam, mod, dbtyp, dbH.db()), m_info(0), m_tokH(0), m_transactOpen(false)
+: Base(nam, mod, dbtyp, dbH.db()), m_info(0), m_tokH(0)
 {
   DbPrint log( dbH.logon() );
   m_isOpen    = false;
   s_count->increment();
-  m_transactOpen = dbH.transactionActive();
 
   if ( 0 != db() && dbtyp == dbH.type() )   {
     if ( dbH.isValid() )  {
@@ -202,28 +201,8 @@ bool DbContainerObj::updatesPending() const  {
 }
 
 /// Start/Commit/Rollback Database Transaction
-DbStatus DbContainerObj::transAct(DbTransaction& refTr) {
-  if ( m_info )    {
-    Transaction::Action typ = refTr.state();
-    switch( typ ) {
-    case Transaction::TRANSACT_START:
-      if ( m_transactOpen )
-        return Error;
-      m_transactOpen = true;
-      break;
-    case Transaction::TRANSACT_FLUSH:
-    case Transaction::TRANSACT_COMMIT:
-    case Transaction::TRANSACT_ROLLBACK:
-      if ( !m_transactOpen )
-        return Error;
-      m_transactOpen = false;
-      break;
-    default:
-      break;
-    }
-    return m_info->transAct(refTr); 
-  }
-  return Success;
+DbStatus DbContainerObj::transAct(Transaction::Action action) {
+   return m_info?  m_info->transAct(action) : Error;
 }
 
 /// Pass options to the implementation
@@ -365,7 +344,7 @@ DbStatus DbContainerObj::load(DataCallBack* call,
 
 /// Perform UPDATE select
 DbStatus DbContainerObj::update(DbSelect& sel)  {
-  if ( !isReadOnly() && hasAccess() && transactionActive() )  {
+  if ( !isReadOnly() && hasAccess() )  {
     m_dbH.setAge(0);
     return m_info->update(sel);
   }
@@ -374,7 +353,7 @@ DbStatus DbContainerObj::update(DbSelect& sel)  {
 
 /// Perform DELETE statement
 DbStatus DbContainerObj::destroy(DbSelect& sel) {
-  if ( !isReadOnly() && hasAccess() && transactionActive() )  {
+  if ( !isReadOnly() && hasAccess() )  {
     m_dbH.setAge(0);
     return m_info->destroy(sel);
   }
diff --git a/Database/APR/StorageSvc/src/DbContainerObj.h b/Database/APR/StorageSvc/src/DbContainerObj.h
index fd37bacc75262754004962f6684815deb3b52eae..a8d979b8252c3616f3d0e0f84c2ba51f74b35c20 100644
--- a/Database/APR/StorageSvc/src/DbContainerObj.h
+++ b/Database/APR/StorageSvc/src/DbContainerObj.h
@@ -61,8 +61,6 @@ namespace pool  {
     DbDatabase                    m_dbH;
     /// Flag indication DbStatus of technology dependent container
     bool                          m_isOpen;
-    /// Flag to mark ongoing Transactions
-    bool                          m_transactOpen;
 
     /// Check database access
     bool hasAccess();
@@ -91,8 +89,6 @@ namespace pool  {
     DbDatabase& database()                  {  return m_dbH;          }
     /// Access the token of the container object
     const Token* token() const              {  return m_tokH;         }
-    /// Allow query if Transaction is active
-    bool transactionActive() const          {  return m_transactOpen; }
     /// Query the pending transaction stack
     bool updatesPending() const;
     /// Flag if container was opened
@@ -101,7 +97,7 @@ namespace pool  {
     bool isReadOnly() const      
     { return !(mode()&pool::UPDATE) && !(mode()&pool::CREATE);    }
     /// Cancel transaction flag
-    void cancelTransaction()                { m_transactOpen = false; }
+    void cancelTransaction()                { }
     /// Size of the Database container (=# of objects)
     long long int size();
     /// Open the container
@@ -110,8 +106,8 @@ namespace pool  {
     DbStatus close();
     /// Retire the container
     DbStatus retire();
-    /// Start/Commit/Rollback Database Transaction
-    DbStatus transAct(DbTransaction& refTransaction);
+    /// Execute Database Transaction Action
+    DbStatus transAct(Transaction::Action);
     /// Pass options to the implementation
     DbStatus setOption(const DbOption& opt);
     /// Access options
diff --git a/Database/APR/StorageSvc/src/DbDatabase.cpp b/Database/APR/StorageSvc/src/DbDatabase.cpp
index 1d58f3a85714a798a27ee13dbaf61c82324376fa..668c21c122a5adac036945cdcdf3f03cc37480f3 100644
--- a/Database/APR/StorageSvc/src/DbDatabase.cpp
+++ b/Database/APR/StorageSvc/src/DbDatabase.cpp
@@ -157,13 +157,9 @@ DbStatus DbDatabase::getLink(const Token::OID_t& lnkH, Token* pTok, const DbSect
 std::string DbDatabase::cntName(const Token& token) const
 {  return isValid() ? ptr()->cntName(token) : "";                       }
 
-/// Allow query if Transaction is active
-bool DbDatabase::transactionActive() const  
-{  return isValid() ? ptr()->transactionActive() : false;               }
-
-/// Start/Commit/Rollback Database Transaction
-DbStatus DbDatabase::transAct(DbTransaction& refTr) {
-  return isValid() && refTr.validate(ptr()).isSuccess() ? ptr()->transAct(refTr) : Error;
+/// Execute Database Transaction action
+DbStatus DbDatabase::transAct(Transaction::Action action) {
+  return isValid()? ptr()->transAct(action) : Error;
 }
 
 /// Pass options to the implementation
diff --git a/Database/APR/StorageSvc/src/DbDatabaseImp.cpp b/Database/APR/StorageSvc/src/DbDatabaseImp.cpp
index 6da2a8359f8b0bdde5cb2dcae222738579538138..448f488a5d41e0622769969f870a7d274b8d027c 100644
--- a/Database/APR/StorageSvc/src/DbDatabaseImp.cpp
+++ b/Database/APR/StorageSvc/src/DbDatabaseImp.cpp
@@ -34,10 +34,6 @@ DbStatus DbDatabaseImp::onOpen(const DbDatabase& /* dbH  */,DbAccessMode /* mode
 DbStatus DbDatabaseImp::reopen(DbAccessMode /* mode */)
 {  return Error;                                                        }
 
-/// Find container in Database: to be overridden
-DbStatus DbDatabaseImp::find(DbContainer& /* handle */)
-{  return Success;                                                      }
-
 /// Access options
 DbStatus DbDatabaseImp::getOption(DbOption& /* opt */) const
 {  return Error;                                                        }
@@ -46,6 +42,6 @@ DbStatus DbDatabaseImp::getOption(DbOption& /* opt */) const
 DbStatus DbDatabaseImp::setOption(const DbOption& /* opt */)
 {  return Success;                                                      }
 
-/// Start/Commit/Rollback Database Transaction
-DbStatus DbDatabaseImp::transAct(DbTransaction& /* refTr */)
+/// Execute Database Transaction action
+DbStatus DbDatabaseImp::transAct(Transaction::Action /*action*/)
 {  return Success;                                                      }
diff --git a/Database/APR/StorageSvc/src/DbDatabaseObj.cpp b/Database/APR/StorageSvc/src/DbDatabaseObj.cpp
index 64f08fa793b1356740702e4759fb8de6fadda0c0..0a705416972abb0a0e1fa6bca4c7c2cf8b6cbc4a 100644
--- a/Database/APR/StorageSvc/src/DbDatabaseObj.cpp
+++ b/Database/APR/StorageSvc/src/DbDatabaseObj.cpp
@@ -24,7 +24,6 @@
 #include "StorageSvc/DbReflex.h"
 #include "StorageSvc/DbColumn.h"
 #include "StorageSvc/DbTypeInfo.h"
-#include "StorageSvc/DbTransaction.h"
 #include "StorageSvc/DbInstanceCount.h"
 #include "StorageSvc/IOODatabase.h"
 #include "StorageSvc/IDbDatabase.h"
@@ -53,7 +52,7 @@ DbDatabaseObj::DbDatabaseObj( const DbDomain& dom,
                               const string&   fid, 
                               DbAccessMode    mod) 
 : Base(fid, mod, dom.type(), dom.db()), m_dom(dom), 
-  m_info(0), m_string_t(0), m_transactOpen(false), m_fileAge(0)
+  m_info(0), m_string_t(0), m_fileAge(0)
 {
   DbPrint log( m_dom.name() );
   DbInstanceCount::increment(this);
@@ -535,7 +534,6 @@ DbStatus DbDatabaseObj::reopen(DbAccessMode mod) {
           (*i).second->cancelTransaction();
           (*i).second->setMode(mod);
         }
-        m_transactOpen = false;
         return sc;
       }
       log << DbPrintLvl::Error << "Failed to reopen the database " << name()
@@ -586,7 +584,7 @@ bool DbDatabaseObj::updatesPending() const  {
 
 /// Close Database object
 DbStatus DbDatabaseObj::retire()  {
-  if ( !updatesPending() && !transactionActive() )  {
+  if ( !updatesPending() )  {
     DbPrint log( m_logon);
     log << DbPrintLvl::Info << "Database being retired..." << DbPrint::endmsg;
 
@@ -821,69 +819,32 @@ DbStatus DbDatabaseObj::associations(vector<const Token*>& assocs) {
   return Error;
 }
 
-/// Start/Commit/Rollback Database Transaction
-DbStatus DbDatabaseObj::transAct(DbTransaction& refTr)  {
-  Transaction::Action typ = refTr.state();
+/// Execute Database Transaction action
+DbStatus DbDatabaseObj::transAct(Transaction::Action action)  {
   bool upda = (0 != (mode()&pool::CREATE) || 0 != (mode()&pool::UPDATE));
   if ( 0 != m_info )  {
     DbStatus iret, status = Success;
-    switch( typ ) {
-    case Transaction::TRANSACT_START:
-      if ( m_transactOpen )
-        return Error;
-      m_transactOpen = true;
-      break;
-    case Transaction::TRANSACT_FLUSH:
-    case Transaction::TRANSACT_COMMIT:
-    case Transaction::TRANSACT_ROLLBACK:
-      if ( !m_transactOpen )
-        return Error;
-      m_transactOpen = false;
-      break;
-    default:
-      break;
-    }
-
     for (iterator i=begin(); i != end(); ++i )    {
       DbContainerObj* c = (*i).second;
-      if ( c == m_links.ptr() ) continue;
-      else if ( c == m_params.ptr() ) continue;
-      else if ( c == m_shapes.ptr() ) continue;
-      else  {
-        iret = (*i).second->transAct(refTr);
-        if ( !iret.isSuccess() ) {
-          status = iret;
-        }
-        if ( i != end() )  {
-          switch( typ ) {
-          case Transaction::TRANSACT_FLUSH:
-          case Transaction::TRANSACT_START:
-          case Transaction::TRANSACT_COMMIT:
-          case Transaction::TRANSACT_ROLLBACK:
-            refTr.set(typ);
-            break;
-          default:
-            status = Error;
-            break;
-          }
-        }
+      if( c == m_links.ptr() || c == m_params.ptr() || c == m_shapes.ptr() ) continue;
+      iret = c->transAct( action );
+      if ( !iret.isSuccess() ) {
+         status = iret;
       }
     }
+
     if ( status.isSuccess() )  {
-      status = m_params.transAct(refTr);
-      refTr.set(typ);
+      status = m_params.transAct(action);
     }
     if ( status.isSuccess() )  {
-      status = m_shapes.transAct(refTr);
-      refTr.set(typ);
+      status = m_shapes.transAct(action);
     }
-    if ( status.isSuccess() )  {
-      status = m_links.transAct(refTr);
-      refTr.set(typ);
+      if ( status.isSuccess() )  {
+      status = m_links.transAct(action);
     }
+    // now execute the action on the DB implementation
     if ( status.isSuccess() )  {
-      status = m_info->transAct(refTr);
-      refTr.set(typ);
+      status = m_info->transAct(action);
     }
     return status;
   }
@@ -897,24 +858,6 @@ DbStatus DbDatabaseObj::transAct(DbTransaction& refTr)  {
   else  {
     // This means, that the database is retired.
     // Only READONLY databases may be retired.
-    switch( typ ) {
-    case Transaction::TRANSACT_START:
-      if ( m_transactOpen )
-        return Error;
-      m_transactOpen = true;
-      refTr.set(typ);
-      break;
-    case Transaction::TRANSACT_FLUSH:
-    case Transaction::TRANSACT_COMMIT:
-    case Transaction::TRANSACT_ROLLBACK:
-      if ( !m_transactOpen )
-        return Error;
-      m_transactOpen = false;
-      refTr.set(typ);
-      break;
-    default:
-      break;
-    }
     // Should be safe: Pending updates were checked on Re-open
     for (iterator i=begin(); i != end(); ++i )    {
       (*i).second->cancelTransaction();
diff --git a/Database/APR/StorageSvc/src/DbDatabaseObj.h b/Database/APR/StorageSvc/src/DbDatabaseObj.h
index 7eaaf4cb3f424cf20140d6515531aa53adef4275..4e2b87dde656b1841871904d7e482ede15452e60 100644
--- a/Database/APR/StorageSvc/src/DbDatabaseObj.h
+++ b/Database/APR/StorageSvc/src/DbDatabaseObj.h
@@ -97,8 +97,6 @@ namespace pool    {
     const DbTypeInfo*             m_string_t;
     /// Physical Database login
     std::string                   m_logon;
-    /// Flag to mark ongoing Transactions
-    bool                          m_transactOpen;
     /// File age counter
     int                           m_fileAge;
     /// Token describing the object
@@ -127,8 +125,6 @@ namespace pool    {
     IDbDatabase* info() const         {  return m_info;         }
     /// Access to domain handle (CONST)
     DbDomain& domain()                {  return m_dom;          }
-    /// Allow query if Transaction is active
-    bool transactionActive() const    {  return m_transactOpen; }
     /// Access age value
     int  age()  const                 {  return m_fileAge;      }
     /// Access the token of the database object
@@ -146,8 +142,8 @@ namespace pool    {
     DbStatus retire();
     /// Check for pending updates
     bool updatesPending() const;
-    /// Start/Commit/Rollback Database Transaction
-    DbStatus transAct(DbTransaction& refTransaction);
+    /// Execute Database Transaction action
+    DbStatus transAct(Transaction::Action action);
 
     /// Retrieve association link from token with redirection when file is merged.
     DbStatus getRedirection(const Token& token, Token::OID_t& obj_linkH);
diff --git a/Database/APR/StorageSvc/src/DbDomainObj.cpp b/Database/APR/StorageSvc/src/DbDomainObj.cpp
index 05fe64cecbb779663c59ff70ed71e68fb522663c..03111dd4797b0714a092832de8ea08315f68f52b 100644
--- a/Database/APR/StorageSvc/src/DbDomainObj.cpp
+++ b/Database/APR/StorageSvc/src/DbDomainObj.cpp
@@ -122,8 +122,7 @@ DbStatus DbDomainObj::ageOpenDbs() {
     for (iterator i = begin(); i != end(); ++i ) {
       DbDatabaseObj* pDB = (*i).second;
       DbAccessMode m  = pDB->mode();
-      bool         tr = pDB->transactionActive();
-      if ( false == tr && 0==(m&pool::CREATE) && 0==(m&pool::UPDATE) )  {
+      if( 0==(m&pool::CREATE) && 0==(m&pool::UPDATE) )  {
         pDB->setAge(1);
       }
     }
@@ -140,8 +139,7 @@ DbStatus DbDomainObj::closeAgedDbs()  {
       DbDatabaseObj* pDB = (*i).second;
       if ( pDB->age() > m_maxAge )   {
         DbAccessMode m  = pDB->mode();
-        bool         tr = pDB->transactionActive();
-        if ( false == tr && 0 == (m&pool::CREATE) && 0 == (m&pool::UPDATE) )  {
+        if( 0 == (m&pool::CREATE) && 0 == (m&pool::UPDATE) )  {
           aged_dbs.push_back(pDB);
         }
       }
diff --git a/Database/APR/StorageSvc/src/DbStorageSvc.cpp b/Database/APR/StorageSvc/src/DbStorageSvc.cpp
index 9f4bf1a550e2068d0ef14130e57e48fed9b7c2c5..17c63f52ea0ef3cd22025f93e96bfbaab6aeda04 100644
--- a/Database/APR/StorageSvc/src/DbStorageSvc.cpp
+++ b/Database/APR/StorageSvc/src/DbStorageSvc.cpp
@@ -24,10 +24,11 @@
 #include "StorageSvc/DbObject.h"
 #include "StorageSvc/DbTypeInfo.h"
 #include "StorageSvc/DbContainer.h"
-#include "StorageSvc/DbTransaction.h"
+#include "StorageSvc/Transaction.h"
 #include "StorageSvc/DbDatabase.h"
 #include "StorageSvc/DbTransform.h"
 #include "StorageSvc/DbConnection.h"
+#include "DbDatabaseObj.h"
 #include "StorageSvc/DbSection.h"
 #include "StorageSvc/IOODatabase.h"
 #include "StorageSvc/FileDescriptor.h"
@@ -52,93 +53,7 @@ namespace pool  {
   typedef const DbDatabaseObj *DbDatabaseH;
 
   class DbClassMap : public map<TypeH, Guid> {};
-  class StorageTransaction : public Transaction   {
-  public:
-    /// Internal storage
-    union Pointers  {
-      DbDomain*    dom;
-      DbDatabase*  db;
-      DbContainer* cnt;
-      char*        p;
-    };
-    Pointers      m_ptr;
-    DbTransaction m_tr;
-  public:
-    StorageTransaction()  {
-      m_ptr.p  = 0;
-    }
-    virtual ~StorageTransaction()    {
-      switch(m_tr.type())    {
-      case TRANSACT_DB:
-        deletePtr(m_ptr.db);
-        break;
-      case TRANSACT_CNT:
-        deletePtr(m_ptr.cnt);
-        break;
-      case TRANSACT_DOM:
-        deletePtr(m_ptr.dom);
-        break;
-      default:
-        break;
-      }
-    }
-    DbTransaction& transaction()  {
-      return m_tr;
-    }
-    /// Transaction implementation: Access to the transaction type
-    virtual Transaction::Type type()  const  {
-      return m_tr.type();
-    }
-    /// Transaction implementation: Access to the transaction state
-    virtual Transaction::Action state()  const  {
-      return m_tr.state();
-    }
-    /// Access to the transaction handle
-    void* trHandle()  const  {
-      switch( m_tr.type() )   {
-      case TRANSACT_DB:
-        return m_ptr.db->ptr();
-      case TRANSACT_CNT:
-        return m_ptr.cnt->ptr();
-      case TRANSACT_DOM:
-        return m_ptr.dom->ptr();
-      default:
-        return 0;
-      }
-    }
-    DbStatus set(DbDatabase& dbH)   {
-      if ( dbH.isValid() )    {
-        m_ptr.db = ::new DbDatabase(dbH);
-        m_technology = m_ptr.db->type().type();
-        return m_ptr.db->transAct(m_tr);
-      }
-      return Error;
-    }
-    DbStatus set(DbContainer& cntH)   {
-      if ( cntH.isValid() )    {
-        m_ptr.cnt = ::new DbContainer(cntH);
-        m_technology = m_ptr.cnt->type().type();
-        return m_ptr.cnt->transAct(m_tr);
-      }
-      return Error;
-    }
-    DbStatus transAct(Transaction::Action typ)   {
-      m_tr.set(typ);
-      switch( m_tr.type() )   {
-      case TRANSACT_DB:
-        return m_ptr.db->transAct(m_tr);
-      case TRANSACT_CNT:
-        return m_ptr.cnt->transAct(m_tr);
-      case TRANSACT_DOM:
-      default:
-        return Error;
-      }
-    }
-    bool isValid() const 
-    {
-      return true;
-    }
-  };
+
 
    
 /// Standard Constructor.
@@ -281,184 +196,120 @@ DbStatus DbStorageSvc::createShape( const FileDescriptor&  /*fDesc   */,
   return sc;
 }
 
-/// Register object identified by its pointer with for write.
-DbStatus DbStorageSvc::allocate( TransactionH          refContext,
-                                 const FileDescriptor& fDesc,
+/// Register object for write
+DbStatus DbStorageSvc::allocate( const FileDescriptor& fDesc,
                                  const string&         refCont,
                                  int                   technology,
                                  const void*           object,
                                  ShapeH                shape,
                                  Token*&               refpToken)
 {
-  DbStatus sc = Error;
-  refpToken = 0;
+   DbStatus sc = Error;
+   refpToken = 0;
 
-  if ( refContext && shape && object ) {
-    StorageTransaction* tr = (StorageTransaction*)refContext;
-    if ( tr->isValid() ) {
+   if( shape && object ) {
       void* handle = fDesc.dbc()->handle();
-      if (tr->m_tr.type() == Transaction::TRANSACT_DB && handle == tr->trHandle()) {
-        DbDatabase dbH((DbDatabaseH)handle);
-        if ( dbH.transactionActive() )  {
-          DbContainer cntH(dbH.type());
-          sc = cntH.open( dbH, 
-                          refCont,
-                          DbTypeInfoH(shape),
-                          DbType(technology),
-                          pool::CREATE|pool::UPDATE);
-          if ( sc.isSuccess() ) {
-            Token* t = new Token(cntH.token());
-            t->setClassID(shape->shapeID());
-            sc = cntH.allocate(object, shape, t->oid());
+      DbDatabase dbH((DbDatabaseH)handle);
+      DbContainer cntH(dbH.type());
+      sc = cntH.open( dbH, 
+                      refCont,
+                      DbTypeInfoH(shape),
+                      DbType(technology),
+                      pool::CREATE|pool::UPDATE);
+      if ( sc.isSuccess() ) {
+         Token* t = new Token(cntH.token());
+         t->setClassID(shape->shapeID());
+         sc = cntH.allocate(object, shape, t->oid());
+         if ( sc.isSuccess() )  {
+            sc = dbH.makeLink(t, t->oid());
             if ( sc.isSuccess() )  {
-              sc = dbH.makeLink(t, t->oid());
-              if ( sc.isSuccess() )  {
-                refpToken = t;
-                return Success;
-              }
+               refpToken = t;
+               return Success;
             }
-            t->release();
-          }
-        }
-        return INVALID_CONNECTION_TOKEN;
-      }
-      else  {
-        DbPrint log( name());
-        log << DbPrintLvl::Error 
-            << "The Transaction handle has nothing to do with "
-            << "the Database you wanted."
-            << DbPrint::endmsg;
-        return sc;
+         }
+         t->release();
       }
-    }
-    sc = INVALID_TRANSACTION_TOKEN;
-  }
-  DbPrint err( name());
-  err << DbPrintLvl::Error 
-      << "Cannot allocate persistent object." << DbPrint::endmsg
-      << "Transaction Handle :" << (void*)refContext
-      << " Shape Handle :"      << (void*)shape
-      << " FID="                << fDesc.FID() 
-      << " Cnt="                << refCont
-      << DbPrint::endmsg;
-  return sc;
+      return INVALID_CONNECTION_TOKEN;
+   }
+   DbPrint err( name());
+   err << DbPrintLvl::Error 
+       << "Cannot allocate persistent object." << DbPrint::endmsg
+       << " Shape Handle :"      << (void*)shape
+       << " FID="                << fDesc.FID() 
+       << " Cnt="                << refCont
+       << DbPrint::endmsg;
+   return sc;
 }
 
 /// In place update of an existing object.
-DbStatus DbStorageSvc::update(    TransactionH          refContext,
-                                  const FileDescriptor& fDesc,
-                                  const void*           object,
-                                  ShapeH                shape,
-                                  const Token&          refToken)
+DbStatus DbStorageSvc::update( const FileDescriptor& fDesc,
+                               const void*           object,
+                               ShapeH                shape,
+                               const Token&          refToken )
 {
-  DbStatus sc = Error;
-  if ( refContext && shape && object ) {
-    StorageTransaction* tr = (StorageTransaction*)refContext;
-    if ( tr->isValid() ) {
+   DbStatus sc = Error;
+   if( shape && object ) {
       void* handle = fDesc.dbc()->handle();
-      if (tr->m_tr.type() == Transaction::TRANSACT_DB && handle == tr->trHandle()) {
-        DbDatabase dbH((DbDatabaseH)handle);
-        if ( dbH.isValid() ) {
-          if ( dbH.transactionActive() )  {
-            DbContainer cntH(dbH.find(dbH.cntName(refToken)));
-            if ( !cntH.isValid() )  {
-              DbType db_typ(refToken.technology());
-              const DbTypeInfo* db_info = dbH.objectShape(shape->shapeID());
-              cntH.open(dbH, dbH.cntName(refToken), db_info, db_typ, dbH.openMode());
-            }
-            if ( cntH.isValid() )  {
-              return cntH.update(object, shape, refToken.oid());
-            }
-            DbPrint log( name());
-            log << DbPrintLvl::Error << "The container " 
-                << refToken.dbID() << "::" << dbH.cntName(refToken)
-                << " cannot be accessed." << DbPrint::endmsg
-                << "Was this object really read from the container "
-                << "the object token claims?"
-                << DbPrint::endmsg;
-            return INVALID_OBJ_TOKEN;
-          }
-        }
-        return INVALID_CONNECTION_TOKEN;
-      }
-      else  {
-        DbPrint log( name());
-        log << DbPrintLvl::Error 
-            << "The Transaction handle has nothing to do with "
-            << "the Database you wanted."
-            << " DB:" << refToken.dbID()
-            << DbPrint::endmsg;
+      DbDatabase dbH((DbDatabaseH)handle);
+      if ( dbH.isValid() ) {
+         DbContainer cntH(dbH.find(dbH.cntName(refToken)));
+         if ( !cntH.isValid() )  {
+            DbType db_typ(refToken.technology());
+            const DbTypeInfo* db_info = dbH.objectShape(shape->shapeID());
+            cntH.open(dbH, dbH.cntName(refToken), db_info, db_typ, dbH.openMode());
+         }
+         if ( cntH.isValid() )  {
+            return cntH.update(object, shape, refToken.oid());
+         }
+         DbPrint log( name());
+         log << DbPrintLvl::Error << "The container " 
+             << refToken.dbID() << "::" << dbH.cntName(refToken)
+             << " cannot be accessed." << DbPrint::endmsg
+             << "Was this object really read from the container "
+             << "the object token claims?"
+             << DbPrint::endmsg;
+         return INVALID_OBJ_TOKEN;
       }
-    }
-    sc = INVALID_TRANSACTION_TOKEN;
-  }
-  DbPrint err( name());
-  err << DbPrintLvl::Error 
-      << "Cannot update persistent object." << DbPrint::endmsg
-      << "Transaction Handle :" << (void*)refContext
-      << " Shape Handle :"      << (void*)shape
-      << " DB:" << refToken.dbID()
-      << DbPrint::endmsg;
-  return sc;
+      return INVALID_CONNECTION_TOKEN;
+   }
+   DbPrint err( name());
+   err << DbPrintLvl::Error 
+       << "Cannot update persistent object." << DbPrint::endmsg
+       << " Shape Handle :"      << (void*)shape
+       << " DB:" << refToken.dbID()
+       << DbPrint::endmsg;
+   return sc;
 }
 
 /// Destroy an existing persistent object.
 DbStatus 
-DbStorageSvc::destroy(TransactionH refContext, const FileDescriptor& refDB, const Token& refToken) {
-  DbStatus sc = Error;
-  if ( refContext ) {
-    StorageTransaction* tr = (StorageTransaction*)refContext;
-    if ( tr->isValid() ) {
-      void* handle = refDB.dbc()->handle();
-      if (tr->m_tr.type()==Transaction::TRANSACT_DB && handle==tr->trHandle()) {
-        DbDatabase dbH((DbDatabaseH)handle);
-        if ( dbH.isValid() )  {
-          if ( dbH.transactionActive() )  {
-            DbContainer cntH(dbH.find(dbH.cntName(refToken)));
-            if ( !cntH.isValid() )  {
-              DbType db_typ(refToken.technology());
-              const DbTypeInfo* db_info = dbH.objectShape(refToken.classID());
-              cntH.open(dbH, dbH.cntName(refToken), db_info, db_typ, dbH.openMode());
-            }
-            if ( cntH.isValid() )  {
-              return cntH.destroy(refToken.oid());
-            }
-            DbPrint log( name());
-            log << DbPrintLvl::Error << "The container " 
-                << refToken.dbID() << "::" << dbH.cntName(refToken)
-                << " cannot be accessed." << DbPrint::endmsg
-                << "Was this object really read from the container "
-                << "the object token claims?"
-                << DbPrint::endmsg;
-            return INVALID_OBJ_TOKEN;
-          }
-        }
-        return INVALID_CONNECTION_TOKEN;
+DbStorageSvc::destroy( const FileDescriptor& refDB, const Token& refToken )
+{
+   DbStatus sc = Error;
+   void* handle = refDB.dbc()->handle();
+   DbDatabase dbH((DbDatabaseH)handle);
+   if ( dbH.isValid() )  {
+      DbContainer cntH(dbH.find(dbH.cntName(refToken)));
+      if ( !cntH.isValid() )  {
+         DbType db_typ(refToken.technology());
+         const DbTypeInfo* db_info = dbH.objectShape(refToken.classID());
+         cntH.open(dbH, dbH.cntName(refToken), db_info, db_typ, dbH.openMode());
       }
-      else  {
-        DbPrint log( name());
-        log << DbPrintLvl::Error 
-            << "The Transaction handle has nothing to do with "
-            << "the Database you wanted:"
-            << refToken.dbID()
-            << DbPrint::endmsg;
+      if ( cntH.isValid() )  {
+         return cntH.destroy(refToken.oid());
       }
-    }
-    sc = INVALID_TRANSACTION_TOKEN;
-  }
-  DbPrint err( name());
-  err << DbPrintLvl::Error 
-      << "Cannot update persistent object." << DbPrint::endmsg
-      << "Transaction Handle :" << (void*)refContext
-      << " DB:" << refToken.dbID()
-      << DbPrint::endmsg;
-  return sc;
+      DbPrint log( name());
+      log << DbPrintLvl::Error << "The container " 
+          << refToken.dbID() << "::" << dbH.cntName(refToken)
+          << " cannot be accessed." << DbPrint::endmsg
+          << "Was this object really read from the container "
+          << "the object token claims?"
+          << DbPrint::endmsg;
+      return INVALID_OBJ_TOKEN;
+   }
+   return INVALID_CONNECTION_TOKEN;
 }
 
-/// Free a persistent object from the heap.
-DbStatus DbStorageSvc::free(const Token& /* pToken */ )  {
-  return Success;
-}
 
 /// Read a persistent object from the medium.
 DbStatus DbStorageSvc::read( const FileDescriptor& fDesc,
@@ -634,49 +485,11 @@ DbStatus DbStorageSvc::openMode(FileDescriptor& refDB, int& mode) {
   return Error;
 }
 
-/// Start a new Transaction sequence.
-DbStatus DbStorageSvc::startTransaction(const ConnectionH connectionH, TransactionH& transH) {
-  DbPrint err( name());
-  if ( connectionH && connectionH->type() == m_domH.type().type() )   {
-    if ( connectionH->handle() != (void*)pool::INVALID ) {
-      DbDatabaseH handle = DbDatabaseH(connectionH->handle());
-      DbDatabase dbH(handle);
-      transH = 0;
-      if ( dbH.isValid() && dbH.type() == m_domH.type() )    {
-        auto_ptr<StorageTransaction> tr(new StorageTransaction);
-        if ( tr->set(dbH).isSuccess() )  {
-          transH = tr.release();
-          return Success;
-        }
-        err << DbPrintLvl::Error 
-            << "Cannot start Transaction."
-            << "Is there an overlapping Transaction going on?"
-            << DbPrint::endmsg;
-        return Error;
-      }
-    }
-  }
-  err << DbPrintLvl::Error 
-      << "Cannot start Transaction. Invalid Database connection handle." << DbPrint::endmsg;
-  return Error;
-}
 
 /// End/Finish an existing Transaction sequence.
-DbStatus DbStorageSvc::endTransaction(TransactionH pCtxt,Transaction::Action typ)  {
-  if( pCtxt )  {
-    StorageTransaction* tr = (StorageTransaction*)pCtxt;
-    DbStatus status = tr->transAct(typ);
-    // Keep the transaction handle alive in failure.
-    if ( status.isSuccess() ) {
-      delete tr;
-      return status;
-    }
-    return status;
-  }
-  DbPrint err( name());
-  err << DbPrintLvl::Error 
-      << "Cannot end transaction. Invalid transaction handle." << DbPrint::endmsg;
-  return Error;
+DbStatus DbStorageSvc::endTransaction( ConnectionH connection, Transaction::Action typ)
+{
+   return ( (DbDatabaseObj*)connection->handle() )->transAct( typ );
 }
 
 /// Access options for a given database domain.
diff --git a/Database/APR/StorageSvc/src/DbStorageSvc.h b/Database/APR/StorageSvc/src/DbStorageSvc.h
index c74a02b887ab9e60849a660255b428dbe6e76240..d77448c40586c8dbb5490c353899cd9778983dc6 100644
--- a/Database/APR/StorageSvc/src/DbStorageSvc.h
+++ b/Database/APR/StorageSvc/src/DbStorageSvc.h
@@ -100,9 +100,8 @@ namespace pool  {
 
     /**@name IStorageExplorer interface                           */
 
-    /// Register object identified by its pointer with for write.
+    /// Register object for write
     /**
-      * @param   trCxtH    [IN] Handle to the Transaction context.
       * @param   refDB     [IN] Reference to Database descriptor 
       * @param   refCont   [IN] Reference to container name 
       * @param   technology[IN] Specialised sub-technology
@@ -113,8 +112,7 @@ namespace pool  {
       *
       * @return                 DbStatus code indicating success or failure.
       */
-    virtual DbStatus allocate(      TransactionH          trCxtH,
-                                    const FileDescriptor& refDB,
+    virtual DbStatus allocate(      const FileDescriptor& refDB,
                                     const std::string&    refCont,
                                     int                   technology,
                                     const void*           object,
@@ -123,7 +121,6 @@ namespace pool  {
 
     /// In place update of an existing object.
     /**
-      * @param   trCxtH    [IN] Handle to the Transaction context.
       * @param   refDB     [IN] Reference to Database descriptor 
       * @param   object    [IN] Pointer to persistent data object.
       * @param   shapeH    [IN] Handle to persistent type information
@@ -132,31 +129,22 @@ namespace pool  {
       *
       * @return                 DbStatus code indicating success or failure.
       */
-    virtual DbStatus update(        TransactionH          trCxtH,
-                                    const FileDescriptor& refDB,
+    virtual DbStatus update(        const FileDescriptor& refDB,
                                     const void*           object,
                                     ShapeH                shapeH,
                                     const Token&          refToken);
 
     /// Destroy an existing persistent object.
     /**
-      * @param   trCxtH    [IN] Handle to the Transaction context.
       * @param   refDB     [IN] Reference to Database descriptor 
       * @param   refToken  [IN] Reference to token containing the location
       *                         information of the persistent object.
       *
       * @return                 DbStatus code indicating success or failure.
       */
-    virtual DbStatus destroy(       TransactionH          trCxtH,
-                                    const FileDescriptor& refDB,
+    virtual DbStatus destroy(       const FileDescriptor& refDB,
                                     const Token&          refToken);
 
-    /// Free a persistent object from the heap.
-    /**
-      * @param   pToken    [IN] Token to the persistent object.
-      * @return                 DbStatus code indicating success or failure.
-      */
-    virtual DbStatus free(          const Token&        pToken);
 
     /// Read a persistent object from the medium.
     /** Reading an object does not create the object.
@@ -329,24 +317,6 @@ namespace pool  {
     virtual DbStatus openMode(    FileDescriptor&     refDB,
                                   int&                mode );
 
-    /// Start a new Transaction sequence.
-    /** When a new Transaction sequence is started, a new context is delivered
-      * to the user. Using this context he will then start collecting objects
-      * for persistency. After this excercise he will finally commit the
-      * objects he collected during the open Transaction.
-      *
-      * @param    dbcH     [IN] Handle to the Database context containing all 
-      *                         information necessary to access the 
-      *                         proper Database. The Database handle was
-      *                         retrieved when connecting to the Database.
-      *
-      * @param    refCtxt [OUT] Handle to a location where the pointer
-      *                         of the Transaction context can be stored.
-      *
-      * @return                 DbStatus code indicating success or failure.
-      */
-    virtual DbStatus startTransaction(const ConnectionH   dbcH,
-                                      TransactionH&       refCtxt);
 
     /// End/Finish an existing Transaction sequence.
     /** At  this  phase all  objects, which were marked for  write when 
@@ -355,7 +325,7 @@ namespace pool  {
       * is invalidated and may no longer be used independent wether the 
       * Transaction was successful or not.
       *
-      * @param    ctxtH [IN]    Transaction context handle.
+      * @param    conn  [IN]    DB connection
       * @param    typ   [IN]    Enum indicating an action to be performed.
       *                         Valid arguments are COMMIT and ROLLBACK.
       *                         ROLLBACK can only be suported if the 
@@ -364,8 +334,8 @@ namespace pool  {
       *
       * @return                 DbStatus code indicating success or failure.
       */
-    virtual DbStatus endTransaction(TransactionH        ctxtH,
-                                    Transaction::Action typ);
+    virtual DbStatus endTransaction( ConnectionH conn,
+                                     Transaction::Action typ);
 
     /// Access options for a given database domain.
     /** Domain options are global options, which refer to the
diff --git a/Database/APR/Tests/StorageSvc_AuxStore/TestDriver.cpp b/Database/APR/Tests/StorageSvc_AuxStore/TestDriver.cpp
index 9c544a40a540655b46b3c0be2561bd946729e1f3..7c0ce96ca8dbfce7876604ccb79bfbce8c40117f 100755
--- a/Database/APR/Tests/StorageSvc_AuxStore/TestDriver.cpp
+++ b/Database/APR/Tests/StorageSvc_AuxStore/TestDriver.cpp
@@ -151,7 +151,7 @@ TestDriver::testWriting()
    cout << "Writing objects" << endl;
    for( int objn=0; objn <nObjects; objn++ ) {
       Token* token;
-      if( ! ( storSvc->allocate( transaction, fd,
+      if( ! ( storSvc->allocate( fd,
                                  container, pool::ROOTTREE_StorageType.type(),
                                  objs[objn], shape, token ).isSuccess() ) ) {
          throw std::runtime_error( "Could not write an object" );
diff --git a/Database/APR/Tests/StorageSvc_BasicFunctionality/TestDriver.cpp b/Database/APR/Tests/StorageSvc_BasicFunctionality/TestDriver.cpp
index b2022813d14ddd6cf3241c55f82245cc273ec91c..bca576ebcbcdf976061ba4b5ddc1cce8e4d49c58 100644
--- a/Database/APR/Tests/StorageSvc_BasicFunctionality/TestDriver.cpp
+++ b/Database/APR/Tests/StorageSvc_BasicFunctionality/TestDriver.cpp
@@ -64,11 +64,6 @@ TestDriver::testWriting()
       throw std::runtime_error( "Could not start a connection." );
    }
    pool::DatabaseConnection* connection = fd.dbc();
-   pool::Transaction* transaction = 0;
-   cout << "startTransaction" << endl;
-   if ( ! ( storSvc->startTransaction( connection, transaction ).isSuccess() ) ) {
-      throw std::runtime_error( "Could not start a transaction." );
-   }
 
   // Retrieve the dictionary
   RootType class_SimpleTestClass ( "SimpleTestClass" );
@@ -101,7 +96,7 @@ TestDriver::testWriting()
   
     // Writing the object.
     Token* token;
-    if ( ! ( storSvc->allocate( transaction, fd,
+    if ( ! ( storSvc->allocate( fd,
 				container, pool::ROOTTREE_StorageType.type(),
 				myObject, shape, token ).isSuccess() ) ) {
       throw std::runtime_error( "Could not write an object" );
@@ -111,7 +106,7 @@ TestDriver::testWriting()
   }
 
   // Closing the transaction.
-  if ( ! ( storSvc->endTransaction( transaction, pool::Transaction::TRANSACT_COMMIT ).isSuccess() ) ) {
+  if ( ! ( storSvc->endTransaction( connection, pool::Transaction::TRANSACT_COMMIT ).isSuccess() ) ) {
     throw std::runtime_error( "Could not end a transaction." );
   }
 
diff --git a/Database/APR/Tests/StorageSvc_MultipleIterators/TestDriver.cpp b/Database/APR/Tests/StorageSvc_MultipleIterators/TestDriver.cpp
index fce60f2581c8f50f294a9d89e30e3e65b9af8b67..0fb958525ef19e601a0f6ce94b38bc98e51da05a 100644
--- a/Database/APR/Tests/StorageSvc_MultipleIterators/TestDriver.cpp
+++ b/Database/APR/Tests/StorageSvc_MultipleIterators/TestDriver.cpp
@@ -112,7 +112,7 @@ TestDriver::testWriting()
   
     // Writing the object.
     Token* token_SimpleTestClass;
-    if ( ! ( storSvc->allocate( transaction, fd,
+    if ( ! ( storSvc->allocate( fd,
 				container, pool::ROOTKEY_StorageType.type(),
 				myObject_SimpleTestClass, shape_SimpleTestClass, token_SimpleTestClass ).isSuccess() ) ) {
       throw std::runtime_error( "Could not write an object" );
@@ -138,7 +138,7 @@ TestDriver::testWriting()
   
     // Writing the object.
     Token* token_TestClassPrimitives;
-    if ( ! ( storSvc->allocate( transaction, fd,
+    if ( ! ( storSvc->allocate( fd,
 				container, pool::ROOTKEY_StorageType.type(),
 				myObject_TestClassPrimitives, shape_TestClassPrimitives, token_TestClassPrimitives ).isSuccess() ) ) {
       throw std::runtime_error( "Could not write an object" );
diff --git a/Database/APR/Tests/StorageSvc_ParallelReadWrite/TestDriver.cpp b/Database/APR/Tests/StorageSvc_ParallelReadWrite/TestDriver.cpp
index 8d9ade19b36761e5dd5c0da0b8cd9d5f29a59d08..64864902813086741af7592ac6a5561ac4025c3c 100644
--- a/Database/APR/Tests/StorageSvc_ParallelReadWrite/TestDriver.cpp
+++ b/Database/APR/Tests/StorageSvc_ParallelReadWrite/TestDriver.cpp
@@ -100,7 +100,7 @@ TestDriver::testWriting()
   
     // Writing the object.
     Token* token;
-    if ( ! ( storSvc->allocate( transaction, fd,
+    if ( ! ( storSvc->allocate( fd,
 				container, pool::ROOTTREE_StorageType.type(),
 				myObject, shape, token ).isSuccess() ) ) {
       throw std::runtime_error( "Could not write an object" );
@@ -256,7 +256,7 @@ TestDriver::testParallelReadWrite()
       
       // Writing the object.
       Token* tokenw;
-      if ( ! ( storSvc->allocate( transaction2, fd2,
+      if ( ! ( storSvc->allocate( fd2,
 				  container, pool::ROOTTREE_StorageType.type(),
 				  myObject, shapew, tokenw ).isSuccess() ) ) {
 	throw std::runtime_error( "Could not write an object" );
diff --git a/Database/APR/Tests/StorageSvc_TransientMembers/TestDriver.cpp b/Database/APR/Tests/StorageSvc_TransientMembers/TestDriver.cpp
index 37846dd263acae89c4171b0731cb6318ddb076f6..3956bb75035ba6f8c0c3fd0729fca1e841947171 100644
--- a/Database/APR/Tests/StorageSvc_TransientMembers/TestDriver.cpp
+++ b/Database/APR/Tests/StorageSvc_TransientMembers/TestDriver.cpp
@@ -113,7 +113,7 @@ TestDriver::testWriting()
   
     // Writing the object.
     Token* token;
-    if ( ! ( storSvc->allocate( transaction, fd,
+    if ( ! ( storSvc->allocate( fd,
 				container, pool::ROOTTREE_StorageType.type(),
 				myObject, shape, token ).isSuccess() ) ) {
       throw std::runtime_error( "Could not write an object" );