diff --git a/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp b/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp
index 88d71d3c05c70a4e57d64454cc8f2ed7847d44e3..a3fde79c5e4ffb9894c9d9d70450152c44155dbd 100644
--- a/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp
+++ b/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp
@@ -660,7 +660,7 @@ int SiliconTrackingAlg::InitialiseVTX() {
     
     for (int ielem=0; ielem<nelem; ++ielem) {
     //for(auto hit : *hitVTXCol){ 
-      edm4hep::TrackerHit hit = hitVTXCol->at(ielem);
+      auto hit = hitVTXCol->at(ielem);
       //gear::Vector3D U(1.0,hit->getU()[1],hit->getU()[0],gear::Vector3D::spherical);
       //gear::Vector3D V(1.0,hit->getV()[1],hit->getV()[0],gear::Vector3D::spherical);
       gear::Vector3D U(1.0,hit.getCovMatrix()[1],hit.getCovMatrix()[0],gear::Vector3D::spherical);
diff --git a/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.cpp b/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.cpp
index 956b425122cb65927647ffa885bb3e3524b7e96e..fdd5118dab14d0c693f674335ee01f415bb853d0 100644
--- a/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.cpp
+++ b/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.cpp
@@ -108,10 +108,17 @@ StatusCode SpacePointBuilderAlg::execute(){
     
     unsigned nHits = hitCol->size();
     debug() << "Number of hits: " << nHits << endmsg;
+
+    if (!nHits) {
+        return sc;
+    }
+
+    auto tmpHit0 = hitCol->at(0);
     
     //store hits in map according to their CellID0
-    std::map<long long, std::vector<edm4hep::TrackerHit> > map_cellID0_hits;
-    std::map<long long, std::vector<edm4hep::TrackerHit> >::iterator it;
+    
+    std::map<long long, std::vector<decltype(tmpHit0)> > map_cellID0_hits;
+    decltype(map_cellID0_hits)::iterator it;
     for(auto trkHit : *hitCol){
       debug() << "Add hit with CellID0 = " << trkHit.getCellID() << " " << getCellID0Info( trkHit.getCellID() ) << endmsg;
       map_cellID0_hits[ trkHit.getCellID() ].push_back( trkHit );
@@ -121,14 +128,14 @@ StatusCode SpacePointBuilderAlg::execute(){
     // now loop over all CellID0s
     for( it= map_cellID0_hits.begin(); it!= map_cellID0_hits.end(); it++ ){
       rawStripHits += it->second.size();
-      std::vector<edm4hep::TrackerHit>& hitsFront = it->second;
+      auto hitsFront = it->second;
       unsigned long long cellID0 = it->first;
       //get the CellID0s at the back of this sensor
       std::vector<int> cellID0sBack = getCellID0sAtBack( cellID0 );
       
       for( unsigned i=0; i< cellID0sBack.size(); i++ ){ 
         int cellID0Back = cellID0sBack[i];
-        std::vector<edm4hep::TrackerHit>& hitsBack = map_cellID0_hits[ cellID0Back ];
+        auto hitsBack = map_cellID0_hits[ cellID0Back ];
         debug() << "strips: CellID0 " << cellID0  << " " << getCellID0Info( cellID0 )  << "(" << hitsFront.size()
 		<< " hits) <---> CellID0 " << cellID0Back << getCellID0Info( cellID0Back )
 		<< "(" << hitsBack.size() << " hits)" << endmsg
@@ -137,9 +144,9 @@ StatusCode SpacePointBuilderAlg::execute(){
         possibleSpacePoints += hitsFront.size() * hitsBack.size();
 	// Now iterate over all combinations and store those that make sense
         for( unsigned ifront=0; ifront<hitsFront.size(); ifront++ ){
-	  edm4hep::TrackerHit& hitFront = hitsFront[ifront];
+	  auto hitFront = hitsFront[ifront];
 	  for( unsigned j=0; j<hitsBack.size(); j++ ){
-	    edm4hep::TrackerHit& hitBack = hitsBack[j];
+	    auto hitBack = hitsBack[j];
 
 	    std::vector<edm4hep::ConstSimTrackerHit> simHitsFront;
 	    std::vector<edm4hep::ConstSimTrackerHit> simHitsBack;
diff --git a/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp b/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp
index 2efe0f52c1fae8cbb0f154b88844469b568d4540..3d049e6ae8e318eef46cff80e71fc1e49ff1abe6 100644
--- a/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp
+++ b/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp
@@ -96,7 +96,7 @@ StatusCode TrackSubsetAlg::finalize(){
 }
 
 StatusCode TrackSubsetAlg::execute(){ 
-  std::vector<edm4hep::Track> tracks;
+  std::vector<edm4hep::ConstTrack> tracks;
 
   auto trkCol = _outColHdl.createAndPut();
   /**********************************************************************************************/
@@ -151,9 +151,9 @@ StatusCode TrackSubsetAlg::execute(){
   
   debug() << "The tracks and their qualities (and their hits ): " << endmsg;
 
-  std::vector<edm4hep::Track*> tracks_p;
+  std::vector<edm4hep::ConstTrack*> tracks_p;
   for( unsigned i=0; i < tracks.size(); i++ ){
-    edm4hep::Track* track = &tracks[i];
+    auto* track = &tracks[i];
     tracks_p.push_back(track);
     double qi = trackQI( track );
     debug() << "Track " << track->id() << " address " << track << "\t" << qi << "( ";
@@ -174,14 +174,14 @@ StatusCode TrackSubsetAlg::execute(){
   
   TrackCompatibility comp;
   
-  SubsetHopfieldNN<edm4hep::Track*> subset;
+  SubsetHopfieldNN<edm4hep::ConstTrack*> subset;
   //SubsetSimple<edm4hep::Track* > subset;
   subset.add( tracks_p );
   subset.setOmega( _omega );
   subset.calculateBestSet( comp, trackQI );
 
-  std::vector<edm4hep::Track*> accepted = subset.getAccepted();
-  std::vector<edm4hep::Track*> rejected = subset.getRejected();
+  auto accepted = subset.getAccepted();
+  auto rejected = subset.getRejected();
   
   debug() << "\tThe accepted tracks:" << endmsg;
   for( unsigned i=0; i < accepted.size(); i++ ){
@@ -203,7 +203,7 @@ StatusCode TrackSubsetAlg::execute(){
   for( unsigned i=0; i < accepted.size(); i++ ){
     edm4hep::Track trackImpl;
     
-    edm4hep::Track* track = accepted[i];
+    auto track = accepted[i];
     
     std::vector<edm4hep::ConstTrackerHit> trackerHitsObj;
     std::vector<edm4hep::ConstTrackerHit> trackerHits;
diff --git a/Reconstruction/SiliconTracking/src/TrackSubsetAlg.h b/Reconstruction/SiliconTracking/src/TrackSubsetAlg.h
index c6e59d81799a82a49936153a2d15d4d5778995b6..e6f710ddf096c4a1fda91d546bb222e3b850a00b 100644
--- a/Reconstruction/SiliconTracking/src/TrackSubsetAlg.h
+++ b/Reconstruction/SiliconTracking/src/TrackSubsetAlg.h
@@ -5,6 +5,7 @@
 #include "GaudiAlg/GaudiAlgorithm.h"
 
 #include "edm4hep/TrackCollection.h"
+#include "edm4hep/TrackerHitCollection.h"
 //#include "edm4hep/Track.h"
 #include "TrackSystemSvc/IMarlinTrkSystem.h"
 
@@ -83,7 +84,7 @@ class TrackSubsetAlg : public GaudiAlgorithm {
 /** A functor to return whether two tracks are compatible: The criterion is if the share a TrackerHit or more */
 class TrackCompatibility{
  public:
-  inline bool operator()( edm4hep::Track* trackA, edm4hep::Track* trackB ){
+  inline bool operator()( edm4hep::ConstTrack* trackA, edm4hep::ConstTrack* trackB ){
     unsigned nHitsA = trackA->trackerHits_size();
     unsigned nHitsB = trackB->trackerHits_size();
     for( unsigned i=0; i < nHitsA; i++){
@@ -103,7 +104,7 @@ class TrackQI{
   /** @param trkSystem a pointer to an IMarlinTrkSystem, needed for fitting of tracks */
   TrackQI( MarlinTrk::IMarlinTrkSystem* trkSystem ): _trkSystem(trkSystem){}
   
-  inline double operator()( edm4hep::Track* track ){
+  inline double operator()( edm4hep::ConstTrack* track ){
     return ROOT::Math::chisquared_cdf_c( track->getChi2() , track->getNdf() );   
   }
   
diff --git a/Utilities/KiTrack/include/ILDImpl/FTDHit01.h b/Utilities/KiTrack/include/ILDImpl/FTDHit01.h
index 6750231efe04a04032f1e90a987f689ff7ed1771..66b975e5d27e5a0b423ad7c4b8f5d921efe0438a 100644
--- a/Utilities/KiTrack/include/ILDImpl/FTDHit01.h
+++ b/Utilities/KiTrack/include/ILDImpl/FTDHit01.h
@@ -14,7 +14,7 @@ namespace KiTrackMarlin{
   class FTDHit01 : public IFTDHit{
   public:
       
-    FTDHit01( edm4hep::TrackerHit trackerHit , const SectorSystemFTD* const sectorSystemFTD );
+    FTDHit01( edm4hep::ConstTrackerHit trackerHit , const SectorSystemFTD* const sectorSystemFTD );
   };
 }
 #endif
diff --git a/Utilities/KiTrack/include/ILDImpl/IFTDHit.h b/Utilities/KiTrack/include/ILDImpl/IFTDHit.h
index 33b817bf5bc5f0aaa73edb6188574977dbb757fe..cb497dfafabb9e99d954feb980f12893991fedc7 100644
--- a/Utilities/KiTrack/include/ILDImpl/IFTDHit.h
+++ b/Utilities/KiTrack/include/ILDImpl/IFTDHit.h
@@ -16,7 +16,7 @@ namespace KiTrackMarlin{
   class IFTDHit : public IHit{
   public:
         
-    edm4hep::TrackerHit* getTrackerHit() { return &_trackerHit; };
+    edm4hep::ConstTrackerHit* getTrackerHit() { return &_trackerHit; };
             
     int getSide() { return _side; }
     unsigned getModule() { return _module; }
@@ -31,7 +31,7 @@ namespace KiTrackMarlin{
     
   protected:
     
-    edm4hep::TrackerHit _trackerHit;
+    edm4hep::ConstTrackerHit _trackerHit;
             
     int _side;
     unsigned _layer;
diff --git a/Utilities/KiTrack/src/ILDImpl/FTDHit01.cc b/Utilities/KiTrack/src/ILDImpl/FTDHit01.cc
index a5eaab1ca29a184eb0ff8cc2e457ee7f03450b42..5d53538cac4f9c9d9c42ee666a99928ac4aaa9ee 100644
--- a/Utilities/KiTrack/src/ILDImpl/FTDHit01.cc
+++ b/Utilities/KiTrack/src/ILDImpl/FTDHit01.cc
@@ -6,7 +6,7 @@
 using namespace KiTrackMarlin;
 
 
-FTDHit01::FTDHit01( edm4hep::TrackerHit trackerHit , const SectorSystemFTD* const sectorSystemFTD ){
+FTDHit01::FTDHit01( edm4hep::ConstTrackerHit trackerHit , const SectorSystemFTD* const sectorSystemFTD ){
    
    
    _sectorSystemFTD = sectorSystemFTD;