diff --git a/Control/StoreGate/src/SGHiveMgrSvc.cxx b/Control/StoreGate/src/SGHiveMgrSvc.cxx
index ef474705e039e9ab23bff646cc64c9c2d4a84dad..756c1c9d43e2fc60851ed7b983082953bde6cefc 100644
--- a/Control/StoreGate/src/SGHiveMgrSvc.cxx
+++ b/Control/StoreGate/src/SGHiveMgrSvc.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "GaudiKernel/IIncidentSvc.h"
@@ -47,7 +47,6 @@ StatusCode HiveMgrSvc::clearStore(size_t slotIndex) {
   if (slotIndex < m_nSlots) {
     rc=m_slots[slotIndex].pEvtStore->clearStore();
     if (rc.isSuccess()) debug() << "cleared store " << slotIndex << endmsg;
-    m_freeSlots++;
   }    
   if (!rc.isSuccess()) error() << "could not clear store " << slotIndex << endmsg;
   return rc;
@@ -111,8 +110,14 @@ size_t HiveMgrSvc::allocateStore( int evtNumber ) {
  */
 StatusCode HiveMgrSvc::freeStore( size_t slotIndex ) {
   if (slotIndex < m_nSlots) {
-    m_slots[slotIndex].eventNumber = -1;
-    debug() << "Freed slot " << slotIndex << endmsg;
+    if (m_slots[slotIndex].eventNumber == -1) {
+      debug() << "Slot " << slotIndex << " is already free" << endmsg;
+    }
+    else {
+      m_slots[slotIndex].eventNumber = -1;
+      m_freeSlots++;
+      debug() << "Freed slot " << slotIndex << endmsg;
+    }
     return StatusCode::SUCCESS;
   } else {
     error() << "no slot at " << slotIndex << endmsg;