diff --git a/objectstore/Helpers.cpp b/objectstore/Helpers.cpp
index d037106d13831eef6b25231265ba4256480fed18..eebcd25da40e45d6b6b44838dc8f1a0b5df08866 100644
--- a/objectstore/Helpers.cpp
+++ b/objectstore/Helpers.cpp
@@ -396,11 +396,12 @@ void Helpers::getLockedAndFetchedDriveState(DriveState& driveState, ScopedExclus
     RootEntry re(be);
     re.fetchNoLock();
     DriveRegister dr(re.getDriveRegisterAddress(), be);
-    dr.fetch();
+    dr.fetchNoLock();
     driveState.setAddress(dr.getDriveAddress(driveName));
     driveStateLock.lock(driveState);
     driveState.fetch();
     if (driveState.getOwner() != dr.getAddressIfSet()) {
+      std::string previouslySeenOwner=driveState.getOwner();
       // We have a special case: the drive state is not owned by the
       // drive register.
       // As we are lock free, we will re-lock in proper order.
@@ -408,12 +409,20 @@ void Helpers::getLockedAndFetchedDriveState(DriveState& driveState, ScopedExclus
       ScopedExclusiveLock drl(dr);
       dr.fetch();
       // Re-get the state (could have changed).
+      driveState.resetAddress();
       driveState.setAddress(dr.getDriveAddress(driveName));
       driveStateLock.lock(driveState);
+      driveState.fetch();
       // We have an exclusive lock on everything. We can now
       // safely switch the owner of the drive status to the drive register
       // (there is no other steady state ownership).
       // return all as we are done.
+      log::ScopedParamContainer params (lc);
+      params.add("driveRegisterObject", dr.getAddressIfSet())
+            .add("driveStateObject", driveState.getAddressIfSet())
+            .add("driveStateCurrentOwner", driveState.getOwner())
+            .add("driveStatePreviouslySeenOwner", previouslySeenOwner);
+      lc.log(log::WARNING, "In Helpers::getLockedAndFetchedDriveState(): unexpected owner for driveState (should be register, will fix it).");
       if (driveState.getOwner() != dr.getAddressIfSet()) {
         driveState.setOwner(dr.getAddressIfSet());
         driveState.commit();
@@ -457,12 +466,15 @@ void Helpers::getLockedAndFetchedDriveState(DriveState& driveState, ScopedExclus
       driveState.setAddress(agentReference.nextId(std::string ("DriveStatus-")+driveName));
       driveState.initialize(driveName);
       agentReference.addToOwnership(driveState.getAddressIfSet(), be);
+      driveState.setOwner(agentReference.getAgentAddress());
       driveState.insert();
       dr.setDriveAddress(driveName, driveState.getAddressIfSet());
       dr.commit();
-      agentReference.removeFromOwnership(driveState.getAddressIfSet(), be);
       driveStateLock.lock(driveState);
       driveState.fetch();
+      driveState.setOwner(dr.getAddressIfSet());
+      driveState.commit();
+      agentReference.removeFromOwnership(driveState.getAddressIfSet(), be);
       return;
     }
   }
diff --git a/scheduler/OStoreDB/OStoreDB.cpp b/scheduler/OStoreDB/OStoreDB.cpp
index f8209895589e7a9f0707da04042959873514aada..34b385bb298def8e9a370dbaad3f0021410f1990 100644
--- a/scheduler/OStoreDB/OStoreDB.cpp
+++ b/scheduler/OStoreDB/OStoreDB.cpp
@@ -1183,26 +1183,26 @@ void OStoreDB::updateDriveStatistics(const common::dataStructures::DriveInfo& dr
       lc, Helpers::CreateIfNeeded::doNotCreate);
   } catch (cta::exception::Exception & ex) {
     // The drive is missing in the registry. Nothing to update
-      return;    
+    return;    
   }
   driveState = ds.getState();
   // Set the parameters that we always set
   driveState.host = driveInfo.host;
   driveState.logicalLibrary = driveInfo.logicalLibrary;
-
+  
   switch (driveState.driveStatus) {    
     case DriveStatus::Transferring:
-      {
+    {
       const time_t timeDifference = inputs.reportTime -  driveState.lastUpdateTime;
       const uint64_t bytesDifference = inputs.bytesTransferred - driveState.bytesTransferredInSession;   
       driveState.lastUpdateTime=inputs.reportTime;
       driveState.bytesTransferredInSession=inputs.bytesTransferred;
       driveState.filesTransferredInSession=inputs.filesTransferred;
       driveState.latestBandwidth = timeDifference?1.0*bytesDifference/timeDifference:0.0;
-      }
-      break;    
+      break;
+    }
     default:
-      return ;
+      return;
   }
   ds.setState(driveState);
   ds.commit();
@@ -2823,4 +2823,3 @@ void OStoreDB::RetrieveJob::checkSucceed() {
 
 } // namespace cta
 
-