diff --git a/Reconstruction/Digi_Calo/src/CaloDigiAlg.cpp b/Reconstruction/Digi_Calo/src/CaloDigiAlg.cpp
index acc8533f91d4ead80ec4d74bea12d01e806cd50e..af65187c95ed83656ce9afaf6e92e96ddee7964e 100644
--- a/Reconstruction/Digi_Calo/src/CaloDigiAlg.cpp
+++ b/Reconstruction/Digi_Calo/src/CaloDigiAlg.cpp
@@ -46,7 +46,6 @@ StatusCode CaloDigiAlg::initialize()
 StatusCode CaloDigiAlg::execute()
 {
   std::map<unsigned long long, edm4hep::SimCalorimeterHit> id_hit_map;
-  std::map<unsigned long long, std::vector<edm4hep::SimCalorimeterHit> > id_hits_map;
   edm4hep::CalorimeterHitCollection* caloVec   = w_DigiCaloCol.createAndPut();
   edm4hep::MCRecoCaloAssociationCollection* caloAssoVec   = w_CaloAssociationCol.createAndPut();
   const edm4hep::SimCalorimeterHitCollection* SimHitCol =  r_SimCaloCol.get();
@@ -56,25 +55,32 @@ StatusCode CaloDigiAlg::execute()
      std::cout<<"not found SimCalorimeterHitCollection"<< std::endl;
      return StatusCode::SUCCESS;
   }
+
+  auto SimHit0 = SimHitCol->at(0);
+  std::map<unsigned long long, std::vector<decltype(SimHit0)> > id_hits_map;
+
   std::cout<<"digi, input sim hit size="<< SimHitCol->size() <<std::endl;
   for( int i = 0; i < SimHitCol->size(); i++ ) 
   {
-      edm4hep::SimCalorimeterHit SimHit = SimHitCol->at(i);
+      auto SimHit = SimHitCol->at(i);
       unsigned long long id = SimHit.getCellID();
       float en = SimHit.getEnergy();
       tot_e += en;
       if ( id_hit_map.find(id) != id_hit_map.end()) id_hit_map[id].setEnergy(id_hit_map[id].getEnergy() + en);
-      else id_hit_map[id] = SimHit ;
+      else {
+        edm4hep::SimCalorimeterHit newSimHit(SimHit.getCellID(), SimHit.getEnergy(), SimHit.getPosition());
+        id_hit_map[id] = newSimHit ;
+      }
 
       if ( id_hits_map.find(id) != id_hits_map.end()) id_hits_map[id].push_back(SimHit);
       else 
       {
-          std::vector<edm4hep::SimCalorimeterHit> vhit;
+          std::vector<decltype(SimHit)> vhit;
           vhit.push_back(SimHit);
           id_hits_map[id] = vhit ;
       }
   }
-  for(std::map<unsigned long long, edm4hep::SimCalorimeterHit>::iterator iter = id_hit_map.begin(); iter != id_hit_map.end(); iter++)
+  for(auto iter = id_hit_map.begin(); iter != id_hit_map.end(); iter++)
   {
     auto caloHit = caloVec->create();
     caloHit.setCellID((iter->second).getCellID());