diff --git a/Control/StoreGate/src/SGHiveMgrSvc.cxx b/Control/StoreGate/src/SGHiveMgrSvc.cxx
index 5927ac513a91148683202f5d0f8475dfc63973ac..2fe5815d1f97478e5a8c8cb2cea2153d94ae7a19 100644
--- a/Control/StoreGate/src/SGHiveMgrSvc.cxx
+++ b/Control/StoreGate/src/SGHiveMgrSvc.cxx
@@ -155,7 +155,20 @@ bool HiveMgrSvc::exists( const DataObjID& id) {
   // don't care if it's slow
   std::string key = id.key();
   key.erase(0,key.find("+")+1);
-  return m_hiveStore->transientContains(id.clid(), id.key());
+
+  if (id.clid() == 0) {
+    // this is an ugly hack in case the DataObjID gets munged
+    // upstream, and we have to re-separate it into (class,key)
+    // from "class/key"
+    std::string cl = id.fullKey();
+    cl.erase(cl.find("/"),cl.length());
+
+    DataObjID d2(cl,key);
+    return m_hiveStore->transientContains(d2.clid(), key);
+  } else {    
+    return m_hiveStore->transientContains(id.clid(), key);
+  }
+ 
 } 
 
 StatusCode HiveMgrSvc::initialize() {