diff --git a/Database/AthenaPOOL/PoolSvc/src/PoolSvc.cxx b/Database/AthenaPOOL/PoolSvc/src/PoolSvc.cxx
index 0166e957d7dbd96a7251ffe1c3bebc01dd0efedc..b4224da7d7b603777572e2651fd932fa31fcade4 100644
--- a/Database/AthenaPOOL/PoolSvc/src/PoolSvc.cxx
+++ b/Database/AthenaPOOL/PoolSvc/src/PoolSvc.cxx
@@ -444,14 +444,17 @@ pool::ICollection* PoolSvc::createCollection(const std::string& collectionType,
 	 collection = "PFN:" + collectionName;
       }
    }
-   if (contextId >= m_persistencySvcVec.size()) {
-      contextId = IPoolSvc::kInputStream;
-   }
-   if (contextId == IPoolSvc::kInputStream && openMode != pool::ICollection::READ) {
+   std::lock_guard<CallMutex> lock(m_pool_mut);
+   if (openMode != pool::ICollection::READ) {
       contextId = IPoolSvc::kOutputStream;
+   } else {
+      if (contextId > m_persistencySvcVec.size()) {
+         contextId = IPoolSvc::kInputStream;
+      } else if (contextId == m_persistencySvcVec.size()) {
+         contextId = const_cast<PoolSvc*>(this)->getInputContext("");
+      }
    }
-   std::lock_guard<CallMutex> lock(m_pool_mut);
-   if (contextId >= m_persistencySvcVec.size() && !const_cast<PoolSvc*>(this)->reinit().isSuccess()) {
+   if (contextId >= m_persistencySvcVec.size()) {
       return(nullptr);
    }
    std::lock_guard<CallMutex> lockC(*m_pers_mut[contextId]);
@@ -579,11 +582,17 @@ Token* PoolSvc::getToken(const std::string& connection,
 }
 //__________________________________________________________________________
 StatusCode PoolSvc::connect(pool::ITransaction::Type type, unsigned int contextId) const {
+   std::lock_guard<CallMutex> lock(m_pool_mut);
    if (type != pool::ITransaction::READ) {
       contextId = IPoolSvc::kOutputStream;
+   } else {
+      if (contextId > m_persistencySvcVec.size()) {
+         contextId = IPoolSvc::kInputStream;
+      } else if (contextId == m_persistencySvcVec.size()) {
+         contextId = const_cast<PoolSvc*>(this)->getInputContext("");
+      }
    }
-   std::lock_guard<CallMutex> lock(m_pool_mut);
-   if (contextId >= m_persistencySvcVec.size() && !const_cast<PoolSvc*>(this)->reinit().isSuccess()) {
+   if (contextId >= m_persistencySvcVec.size()) {
       return(StatusCode::FAILURE);
    }
    std::lock_guard<CallMutex> lockC(*m_pers_mut[contextId]);