diff --git a/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx b/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx
index 20c566df027c05f0c40c032be6a2d6f6a33676e4..cd56cc19a0e912eec1b027e482e1e0d141400714 100644
--- a/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx
+++ b/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx
@@ -16,6 +16,9 @@
 
 // Athena
 
+// STL includes
+#include <algorithm>    // std::find
+
 HltROBDataProviderSvc::HltROBDataProviderSvc(const std::string& name, ISvcLocator* pSvcLocator) :
   base_class(name, pSvcLocator)
 {
@@ -338,7 +341,7 @@ void HltROBDataProviderSvc::getROBData(const EventContext& context,
   // check input ROB list against cache
   eventCache_checkRobListToCache(cache, robIds, robFragments, robIds_missing) ;
 
-  //  missing ROB fragments from the DCM and add them to the cache
+  // no missing ROB fragments, return the found ROB fragments 
   if (robIds_missing.size() == 0) {
     ATH_MSG_DEBUG( __FUNCTION__ << ": All requested ROB Ids were found in the cache. "); 
     return;
@@ -552,6 +555,13 @@ void HltROBDataProviderSvc::eventCache_checkRobListToCache(EventCache* cache, co
 
   for (uint32_t id : robIds_toCheck) {
 
+    // check for duplicate IDs on the list of missing ROBs
+    std::vector<uint32_t>::iterator missing_it = std::find(robIds_missing.begin(), robIds_missing.end(), id);
+    if (missing_it != robIds_missing.end()) {
+      ATH_MSG_VERBOSE(__FUNCTION__ << " ROB Id : 0x" << MSG::hex << id << MSG::dec <<" is already on the list of missing IDs.");
+      continue;
+    }
+
     // check if ROB is already in cache
     ROBMAP::const_iterator map_it = cache->robmap.find(id);
     if (map_it != cache->robmap.end()) {