diff --git a/Detector/DetCEPCv4/compact/vxd07.xml b/Detector/DetCEPCv4/compact/vxd07.xml
index d37a273164603d33913b4971d3c9e8e05a48c4b3..a3a1efd54370634ad4739bbbd5de9ae3afdcd8bb 100644
--- a/Detector/DetCEPCv4/compact/vxd07.xml
+++ b/Detector/DetCEPCv4/compact/vxd07.xml
@@ -62,7 +62,7 @@
 			    external_metal_thickness="0.009*mm"  />
   <!-- SQL command: "SELECT * FROM cryostat;"  -->
   <cryostat id="1" alu_skin_inner_radious="100*mm" alu_skin_tickness="0.5*mm" foam_inner_radious="90*mm" foam_tickness="10*mm" foam_half_z="166.6*mm" 
-	    endplate_inner_radious="VXD_inner_radius_1" 
+	    endplate_inner_radious="VXD_inner_radius_1+5.6*mm" 
 	    cryostat_option="1" cryostat_apperture="30*mm" cryostat_apperture_radius="1.5*mm"  />
   <!-- SQL command: "select * from support_shell;"  -->
   <support_shell id="0" inner_radious="65*mm" half_z="145*mm" thickess="0.49392*mm" endplate_inner_radious="30*mm" endplate_inner_radius_L1="15.7*mm" endplate_outer_radius_L1="20*mm" 
@@ -93,7 +93,7 @@
   <readouts>
     <readout name="VXDCollection">
       <!-- fixme: for now DD4hep cannot handle signed values - side should actually be "-2" -->
-      <id>system:5,side:-2,layer:9,module:8,sensor:8</id>
+      <id>system:5,side:-2,layer:9,module:8,sensor:8,barrelside:-2</id>
     </readout>
   </readouts>
 
diff --git a/Detector/DetCEPCv4/src/tracker/VXD04_geo.cpp b/Detector/DetCEPCv4/src/tracker/VXD04_geo.cpp
index bec4117d8d72721a2c93c1bb9e5087a2d7847f54..1ed9e3a7c6ce0fc7ad2561e4e6178311fa4f365a 100644
--- a/Detector/DetCEPCv4/src/tracker/VXD04_geo.cpp
+++ b/Detector/DetCEPCv4/src/tracker/VXD04_geo.cpp
@@ -760,7 +760,7 @@ static Ref_t create_element(Detector& theDetector, xml_h e, SensitiveDetector se
 	  
 	  //**fg: choose sensor 1 for sensitive electronics side band
 	  if(active_side_band_electronics_option==1)
-	    pv_el_band_pos.addPhysVolID("layer", LayerId ).addPhysVolID( "module" , int(elec_loop)  ).addPhysVolID("sensor", 1 ).addPhysVolID("side", 1 )   ;
+	    pv_el_band_pos.addPhysVolID("layer", LayerId ).addPhysVolID( "module" , int(elec_loop)  ).addPhysVolID("sensor", 1 ).addPhysVolID("side", 0 ).addPhysVolID("barrelside", 1 );
 
 	  PlacedVolume pv_el_band_neg = layer_assembly.placeVolume( ElectronicsBandLogical,
 				     Transform3D( rot, Position((layer_radius+(side_band_electronics_thickness/2.)+layer_gap)*sin(phirot2)+side_band_electronic_offset_phi*cos(phirot2),
@@ -768,7 +768,7 @@ static Ref_t create_element(Detector& theDetector, xml_h e, SensitiveDetector se
 								-Z))  );
 
 	  if(active_side_band_electronics_option==1)
-	    pv_el_band_neg.addPhysVolID("layer", LayerId ).addPhysVolID( "module" , int(elec_loop)  ).addPhysVolID("sensor", 1 ).addPhysVolID("side", -1 )   ;
+	    pv_el_band_neg.addPhysVolID("layer", LayerId ).addPhysVolID( "module" , int(elec_loop)  ).addPhysVolID("sensor", 1 ).addPhysVolID("side", 0 ).addPhysVolID("barrelside", -1 );
 	  
 	}
 
@@ -791,14 +791,14 @@ static Ref_t create_element(Detector& theDetector, xml_h e, SensitiveDetector se
 								Z))  );
 
 	  if(active_side_band_electronics_option==1)
-	    pv_el_band_pos.addPhysVolID("layer", LayerId ).addPhysVolID( "module" , int(elec_loop)  ).addPhysVolID("sensor", 1 ).addPhysVolID("side", 1 )   ;
+	    pv_el_band_pos.addPhysVolID("layer", LayerId ).addPhysVolID( "module" , int(elec_loop)  ).addPhysVolID("sensor", 1 ).addPhysVolID("side", 0 ).addPhysVolID("barrelside", 1 )   ;
 
 	  PlacedVolume pv_el_band_neg = layer_assembly.placeVolume( ElectronicsBandLogical,
 				     Transform3D( rot, Position((layer_radius-(side_band_electronics_thickness/2.))*sin(phirot2)+side_band_electronic_offset_phi*cos(phirot2),
 								-(layer_radius-(side_band_electronics_thickness/2.))*cos(phirot2)+side_band_electronic_offset_phi*sin(phirot2),
 								-Z))  );
 	  if(active_side_band_electronics_option==1)
-	    pv_el_band_neg.addPhysVolID("layer", LayerId ).addPhysVolID( "module" , int(elec_loop)  ).addPhysVolID("sensor", 1 ).addPhysVolID("side", -1 )   ;
+	    pv_el_band_neg.addPhysVolID("layer", LayerId ).addPhysVolID( "module" , int(elec_loop)  ).addPhysVolID("sensor", 1 ).addPhysVolID("side", 0 ).addPhysVolID("barrelside", -1 );
 	}
       }      
     }
@@ -1114,7 +1114,7 @@ static Ref_t create_element(Detector& theDetector, xml_h e, SensitiveDetector se
 										     -(layer_radius+(active_silicon_thickness/2.)+layer_gap)*cos(phirot2)+active_offset_phi*sin(phirot2),
 										     Z)) ) ;
 	
-	pv_layer_pos.addPhysVolID("layer", LayerId ).addPhysVolID( "module" , int(active_loop)  ).addPhysVolID("sensor", 0 ).addPhysVolID("side", 1 )   ;
+	pv_layer_pos.addPhysVolID("layer", LayerId ).addPhysVolID( "module" , int(active_loop)  ).addPhysVolID("sensor", 0 ).addPhysVolID("side", 0 ).addPhysVolID("barrelside", 1 )   ;
 
 	DetElement   ladderDEposZ( vxd ,  ladderNameP , x_det.id() );
 	ladderDEposZ.setPlacement( pv_layer_pos ) ;
@@ -1125,7 +1125,7 @@ static Ref_t create_element(Detector& theDetector, xml_h e, SensitiveDetector se
 										     -(layer_radius+(active_silicon_thickness/2.)+layer_gap)*cos(phirot2)+active_offset_phi*sin(phirot2),
 										     -Z)) );
 	
-	pv_layer_neg.addPhysVolID("layer", LayerId ).addPhysVolID( "module" , int(active_loop)  ).addPhysVolID("sensor", 0 ).addPhysVolID("side", -1 )   ;
+	pv_layer_neg.addPhysVolID("layer", LayerId ).addPhysVolID( "module" , int(active_loop)  ).addPhysVolID("sensor", 0 ).addPhysVolID("side", 0 ).addPhysVolID("barrelside", -1 )   ;
 
 	DetElement   ladderDEnegZ( vxd ,   ladderNameN , x_det.id() );
 	ladderDEnegZ.setPlacement( pv_layer_neg ) ;
@@ -1138,7 +1138,7 @@ static Ref_t create_element(Detector& theDetector, xml_h e, SensitiveDetector se
 										     -(layer_radius-(active_silicon_thickness/2.))*cos(phirot2)+active_offset_phi*sin(phirot2),
 										     Z)) ) ;
 	
-	pv_layer_pos.addPhysVolID("layer", LayerId ).addPhysVolID( "module" , int(active_loop)  ).addPhysVolID("sensor", 0 ).addPhysVolID("side", 1 )   ;
+	pv_layer_pos.addPhysVolID("layer", LayerId ).addPhysVolID( "module" , int(active_loop)  ).addPhysVolID("sensor", 0 ).addPhysVolID("side", 0 ).addPhysVolID("barrelside", 1 )   ;
 	
 	DetElement   ladderDEposZ( vxd ,  ladderNameP , x_det.id() );
 	ladderDEposZ.setPlacement( pv_layer_pos ) ;
@@ -1152,7 +1152,7 @@ static Ref_t create_element(Detector& theDetector, xml_h e, SensitiveDetector se
 	ladderDEnegZ.setPlacement( pv_layer_neg ) ;
 	volSurfaceList( ladderDEnegZ )->push_back( surf ) ;
 	
-	pv_layer_neg.addPhysVolID("layer", LayerId ).addPhysVolID( "module" , int(active_loop)  ).addPhysVolID("sensor", 0 ).addPhysVolID("side", -1 )   ;
+	pv_layer_neg.addPhysVolID("layer", LayerId ).addPhysVolID( "module" , int(active_loop)  ).addPhysVolID("sensor", 0 ).addPhysVolID("side", 0 ).addPhysVolID("barrelside", -1 )    ;
 	
       }		  
 
diff --git a/Reconstruction/SiliconTracking/src/ForwardTrackingAlg.cpp b/Reconstruction/SiliconTracking/src/ForwardTrackingAlg.cpp
index 57868b94f45e57365e7d08e85f99b96f6fa74c50..3f9c425f1c76eeaaf6ba4dae6e9e869e191ec6d4 100644
--- a/Reconstruction/SiliconTracking/src/ForwardTrackingAlg.cpp
+++ b/Reconstruction/SiliconTracking/src/ForwardTrackingAlg.cpp
@@ -180,7 +180,8 @@ StatusCode ForwardTrackingAlg::initialize(){
 
 StatusCode ForwardTrackingAlg::execute(){
   debug() << " processing event number " << _nEvt << endmsg;
-   
+
+  auto trkCol = _outColHdl.createAndPut();
   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   //                                                                                                              //
   //                                 ForwardTracking                                                              //
@@ -626,7 +627,7 @@ StatusCode ForwardTrackingAlg::execute(){
     /**********************************************************************************************/
     debug() << "\t\t---Save Tracks---" << endmsg ;
       
-    auto trkCol = _outColHdl.createAndPut();
+    //auto trkCol = _outColHdl.createAndPut();
     
     for (unsigned int i=0; i < tracks.size(); i++){
       FTDTrack* myTrack = dynamic_cast< FTDTrack* >( tracks[i] );
@@ -906,7 +907,14 @@ void ForwardTrackingAlg::finaliseTrack( edm4hep::Track* trackImpl ){
   Fitter fitter( trackImpl , _trkSystem );
    
   //trackImpl->trackStates().clear();
-  debug() << "Track has " << trackImpl->trackStates_size() << " TrackState now, should be cleared but not supported by EDM4hep" << endmsg;
+  int nState = trackImpl->trackStates_size();
+  if(nState>0){
+    debug() << "Track has " << nState << " TrackState now, should be cleared but not supported by EDM4hep" << endmsg;
+    for(int i=0;i<nState;i++){
+      debug() << trackImpl->getTrackStates(i).location << " ";
+    }
+    debug() << endmsg;
+  }
   
   edm4hep::TrackState trkStateIP( *fitter.getTrackState( 1/*lcio::TrackState::AtIP*/ ) ) ;
   trkStateIP.location = 1;
diff --git a/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp b/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp
index 256f8fb6b6067f4e33c21cefd684b7eb4a865fe1..54b2720e816bf0cd13718f936295950aa0b06e5a 100644
--- a/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp
+++ b/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp
@@ -159,6 +159,7 @@ StatusCode SiliconTrackingAlg::execute(){
   Navigation::Instance()->Initialize();
   //_current_event = evt;
   //_allHits.reserve(1000);
+  auto trkCol = _outColHdl.createAndPut();
 
   _output_track_col_quality = _output_track_col_quality_GOOD;
   
@@ -238,7 +239,7 @@ StatusCode SiliconTrackingAlg::execute(){
 
     //edm4hep::TrackCollection* trkCol = nullptr; 
     //edm4hep::LCRelationCollection* relCol = nullptr;
-    auto trkCol = _outColHdl.createAndPut();
+    //auto trkCol = _outColHdl.createAndPut();
     //auto relCol = _outRelColHdl.createAndPut();
     /*
     LCCollectionVec * trkCol = new LCCollectionVec(LCIO::TRACK);
diff --git a/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.cpp b/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.cpp
index d2a9b87c350c0d5f7b9595623c2e1d425430c923..bae1388b078d23849e7cae52da7d419817835b37 100644
--- a/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.cpp
+++ b/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.cpp
@@ -69,6 +69,9 @@ StatusCode SpacePointBuilderAlg::initialize() {
 
 StatusCode SpacePointBuilderAlg::execute(){
   StatusCode sc;
+  auto spCol = _outSPColHdl.createAndPut();
+  auto relCol = _outSPAssColHdl.createAndPut();
+
   const edm4hep::TrackerHitCollection* hitCol = nullptr;
   try {
     hitCol = _inHitColHdl.get();
@@ -95,8 +98,8 @@ StatusCode SpacePointBuilderAlg::execute(){
     _nStripsTooParallel = 0;
     _nPlanesNotParallel = 0;
     
-    edm4hep::TrackerHitCollection* spCol = new edm4hep::TrackerHitCollection();    // output spacepoint collection
-    edm4hep::MCRecoTrackerAssociationCollection* relCol = new edm4hep::MCRecoTrackerAssociationCollection();    // output relation collection
+    //edm4hep::TrackerHitCollection* spCol = new edm4hep::TrackerHitCollection();    // output spacepoint collection
+    //edm4hep::MCRecoTrackerAssociationCollection* relCol = new edm4hep::MCRecoTrackerAssociationCollection();    // output relation collection
     
     // to store the weights
     //LCFlagImpl lcFlag(0) ;
@@ -235,10 +238,10 @@ StatusCode SpacePointBuilderAlg::execute(){
       }
     }
     
-    if(spCol->size()!=0) _outSPColHdl.put(spCol);
-    else                 delete spCol;
-    if(relCol->size()!=0) _outSPAssColHdl.put(relCol);
-    else                  delete relCol;
+    //if(spCol->size()!=0) _outSPColHdl.put(spCol);
+    //else                 delete spCol;
+    //if(relCol->size()!=0) _outSPAssColHdl.put(relCol);
+    //else                  delete relCol;
     
     debug() << "\nCreated " << createdSpacePoints << " space points ( raw strip hits: " << rawStripHits << ")\n"
 	    << "  There were " << rawStripHits << " strip hits available, giving " 
diff --git a/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.h b/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.h
index 17cae2394b7e9801ad2cd1a44865da0b28e81ec7..0106b89bd34ac9e598c59f7a85f278a63fef008a 100644
--- a/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.h
+++ b/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.h
@@ -78,6 +78,11 @@ class SpacePointBuilderAlg : public GaudiAlgorithm {
   // Output collection
   DataHandle<edm4hep::TrackerHitCollection> _outSPColHdl{"FTDSpacePoints", Gaudi::DataHandle::Writer, this};
   DataHandle<edm4hep::MCRecoTrackerAssociationCollection> _outSPAssColHdl{"FTDSpacePointsAssociation", Gaudi::DataHandle::Writer, this};
+
+  Gaudi::Property<float> _nominal_vertex_x{this, "NominalVertexX", 0.0};
+  Gaudi::Property<float> _nominal_vertex_y{this, "NominalVertexY", 0.0};
+  Gaudi::Property<float> _nominal_vertex_z{this, "NominalVertexZ", 0.0};
+  Gaudi::Property<float> _striplength_tolerance{this, "StriplengthTolerance", 0.1};
   /** Calculates the 2 dimensional crossing point of two lines.
    * Each line is specified by a point (x,y) and a direction vector (ex,ey).
    * 
@@ -169,14 +174,7 @@ class SpacePointBuilderAlg : public GaudiAlgorithm {
   unsigned _nStripsTooParallel;
   unsigned _nPlanesNotParallel;
 
-  float _nominal_vertex_x;
-  float _nominal_vertex_y;
-  float _nominal_vertex_z;
-
   CLHEP::Hep3Vector _nominal_vertex;
-
-  float _striplength_tolerance;
-  
 } ;
 
 #endif
diff --git a/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp b/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp
index 8961484d60abc0b61f9106325a37974176fa5732..541c5b16791824d317218e6cf68a20b9fada4dba 100644
--- a/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp
+++ b/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp
@@ -97,7 +97,8 @@ StatusCode TrackSubsetAlg::finalize(){
 
 StatusCode TrackSubsetAlg::execute(){ 
   std::vector<edm4hep::Track> tracks;
-  
+
+  auto trkCol = _outColHdl.createAndPut();
   /**********************************************************************************************/
   /*       Read in the collections                                                              */
   /**********************************************************************************************/
@@ -197,7 +198,7 @@ StatusCode TrackSubsetAlg::execute(){
   /**********************************************************************************************/
   debug() << "Fitting and saving of the tracks" << endmsg;
 
-  auto trkCol = _outColHdl.createAndPut();
+  //auto trkCol = _outColHdl.createAndPut();
 
   for( unsigned i=0; i < accepted.size(); i++ ){
     edm4hep::Track trackImpl;
@@ -326,6 +327,8 @@ StatusCode TrackSubsetAlg::execute(){
   }
 
   debug() << "Saving " << trkCol->size() << " tracks" << endmsg;
+  
+  Navigation::Instance()->Initialize();
 
   _nEvt ++ ;
   return StatusCode::SUCCESS;
diff --git a/Service/TrackSystemSvc/src/MarlinKalTestTrack.cc b/Service/TrackSystemSvc/src/MarlinKalTestTrack.cc
index a98029db9132c5c1f45a5392e6403888598549aa..4c0bf1539129e6772f6557a6d9411f0035bf2a81 100644
--- a/Service/TrackSystemSvc/src/MarlinKalTestTrack.cc
+++ b/Service/TrackSystemSvc/src/MarlinKalTestTrack.cc
@@ -110,8 +110,14 @@ namespace MarlinTrk {
   
   
   int MarlinKalTestTrack::addHit( edm4hep::TrackerHit* trkhit) {
-    
-    return this->addHit( trkhit, _ktest->findMeasLayer( trkhit )) ;
+    const ILDVMeasLayer* ml = 0;
+    try{
+      ml = _ktest->findMeasLayer( trkhit );
+    }
+    catch(MarlinTrk::Exception& e){
+      std::cout << e.what() << std::endl;
+    }
+    return this->addHit( trkhit, ml) ;
     
   } 
   
@@ -122,8 +128,7 @@ namespace MarlinTrk {
       return this->addHit( trkhit, ml->ConvertLCIOTrkHit(trkhit), ml) ;
     }
     else {
-      std::cout << "MarlinKalTestTrack::addHit: trkhit = "  << trkhit->id() << " addr: " << trkhit << " ml = " << ml << std::endl ;
-      //streamlog_out( ERROR ) << " MarlinKalTestTrack::addHit - bad inputs " <<  trkhit << " ml : " << ml << std::endl ;
+      //std::cout << "MarlinKalTestTrack::addHit: trkhit = "  << trkhit->id() << " addr: " << trkhit << " ml = " << ml << std::endl ;
       return bad_intputs ;
     }
     return bad_intputs ;
@@ -609,21 +614,21 @@ namespace MarlinTrk {
       // get the measurement layer of the current hit
       const ILDVMeasLayer* ml =  dynamic_cast<const ILDVMeasLayer*>( &(kalhit->GetMeasLayer() ) ) ;
       TVector3 pos = ml->HitToXv(*kalhit);
+      /*
       std::cout << "debug: Kaltrack::addAndFit : site discarded! at index : " << ml->GetIndex()
-      << " for type " << ml->GetName() 
-      << " chi2increment = " << chi2increment
-      << " maxChi2Increment = " << maxChi2Increment
-      << " x = " << pos.x()
-      << " y = " << pos.y()
-      << " z = " << pos.z()
-      << " with CellIDs: " << std::endl;
-      
+	<< " for type " << ml->GetName() 
+	<< " chi2increment = " << chi2increment
+	<< " maxChi2Increment = " << maxChi2Increment
+	<< " x = " << pos.x()
+	<< " y = " << pos.y()
+	<< " z = " << pos.z()
+	<< " with CellIDs: " << std::endl;
       for (unsigned int i = 0; i < (dynamic_cast<const ILDVMeasLayer*>( &(kalhit->GetMeasLayer() ) )->getNCellIDs());++i) {
 	std::cout << "debug: CellID = " 
         << dynamic_cast<const ILDVMeasLayer*>( &(kalhit->GetMeasLayer() ) )->getCellIDs()[i] 
         << std::endl ;
       }
-      
+      */
 
 #ifdef MARLINTRK_DIAGNOSTICS_ON
       _ktest->_diagnostics.record_rejected_site(kalhit, temp_site);