diff --git a/Detector/DetCRD/compact/CRD_o1_v02/CRD_o1_v02-onlyTracker.xml b/Detector/DetCRD/compact/CRD_o1_v02/CRD_o1_v02-onlyTracker.xml
index 2397761df6e9cb259db958cd691453c9b70f45ed..e0a91d1715723fb00976597c31290b225cfeb852 100644
--- a/Detector/DetCRD/compact/CRD_o1_v02/CRD_o1_v02-onlyTracker.xml
+++ b/Detector/DetCRD/compact/CRD_o1_v02/CRD_o1_v02-onlyTracker.xml
@@ -31,7 +31,7 @@
   <include ref="../CRD_common_v01/VXD_v01_01.xml"/>
   <include ref="../CRD_common_v01/FTD_SkewRing_v01_01.xml"/>
   <include ref="../CRD_common_v01/SIT_SimplePixel_v01_01.xml"/>
-  <include ref="../CRD_common_v01/DC_Simple_v01_01.xml"/>
+  <include ref="../CRD_common_v01/DC_Simple_v01_02.xml"/>
   <include ref="../CRD_common_v01/SET_SimplePlanar_v01_01.xml"/>
 
   <fields>
diff --git a/Detector/DetCRD/compact/CRD_o1_v03/CRD_o1_v03-onlyTracker.xml b/Detector/DetCRD/compact/CRD_o1_v03/CRD_o1_v03-onlyTracker.xml
index f62b193f970b2bb5178eaebad2a90b6c318852ef..cc30d11b38cb9b01e91cee5245c89220b80a0f7f 100644
--- a/Detector/DetCRD/compact/CRD_o1_v03/CRD_o1_v03-onlyTracker.xml
+++ b/Detector/DetCRD/compact/CRD_o1_v03/CRD_o1_v03-onlyTracker.xml
@@ -32,7 +32,7 @@
   <include ref="../CRD_common_v01/VXD_StaggeredLadder_v01_01.xml"/>
   <include ref="../CRD_common_v01/FTD_SkewRing_v01_01.xml"/>
   <include ref="../CRD_common_v01/SIT_SimplePixel_v01_01.xml"/>
-  <include ref="../CRD_common_v01/DC_Simple_v01_01.xml"/>
+  <include ref="../CRD_common_v01/DC_Simple_v01_02.xml"/>
   <include ref="../CRD_common_v01/SET_SimplePixel_v01_01.xml"/>
   
   <fields>
diff --git a/Detector/DetCRD/compact/CRD_o1_v03/CRD_o1_v03.xml b/Detector/DetCRD/compact/CRD_o1_v03/CRD_o1_v03.xml
index 296528b765bfb025f9856a084c45cc55d33640fe..79eea6dcf5d048ace369f3bd3c300d5b8ce04340 100644
--- a/Detector/DetCRD/compact/CRD_o1_v03/CRD_o1_v03.xml
+++ b/Detector/DetCRD/compact/CRD_o1_v03/CRD_o1_v03.xml
@@ -31,7 +31,7 @@
   <include ref="../CRD_common_v01/VXD_StaggeredLadder_v01_01.xml"/>
   <include ref="../CRD_common_v01/FTD_SkewRing_v01_01.xml"/>
   <include ref="../CRD_common_v01/SIT_SimplePixel_v01_01.xml"/>
-  <include ref="../CRD_common_v01/DC_Simple_v01_01.xml"/>
+  <include ref="../CRD_common_v01/DC_Simple_v01_02.xml"/>
   <include ref="../CRD_common_v01/SET_SimplePixel_v01_01.xml"/>
   <include ref="../CRD_common_v01/Ecal_Crystal_Barrel_v01_01.xml"/>
   <!--include ref="../CRD_common_v01/Ecal_Crystal_Endcap_v01_01.xml"/-->
diff --git a/Detector/DetCRD/compact/CRD_o1_v04/CRD_Dimensions_v01_04.xml b/Detector/DetCRD/compact/CRD_o1_v04/CRD_Dimensions_v01_04.xml
index f06d550dd4c9be2b637b264f5ebaf5741e08fe97..4b0b8a9844c51e92349f51e0278f079695f4a1bc 100644
--- a/Detector/DetCRD/compact/CRD_o1_v04/CRD_Dimensions_v01_04.xml
+++ b/Detector/DetCRD/compact/CRD_o1_v04/CRD_Dimensions_v01_04.xml
@@ -110,10 +110,10 @@
     <constant name="DC_inner_radius" value="DC_chamber_layer_rbegin-SDT_inner_wall_thickness-DC_safe_distance"/>
     <constant name="DC_outer_radius" value="DC_chamber_layer_rend+SDT_outer_wall_thickness+DC_safe_distance"/>
 
-    <constant name="SIT1_inner_radius"   value="80*mm"/>
-    <constant name="SIT3_inner_radius"   value="DC_chamber_layer_rbegin-30*mm"/>
-    <constant name="SIT2_inner_radius"   value="0.5*(SIT1_inner_radius+SIT3_inner_radius)"/>
-    <constant name="SIT4_inner_radius"   value="770*mm"/>
+    <constant name="SIT1_inner_radius"   value="150*mm"/>
+    <constant name="SIT2_inner_radius"   value="350*mm"/>
+    <constant name="SIT4_inner_radius"   value="DC_chamber_layer_rbegin-30*mm"/>
+    <constant name="SIT3_inner_radius"   value="0.5*(SIT2_inner_radius+SIT4_inner_radius)"/>
     <constant name="SIT1_half_length"    value="461*mm"/>
     <constant name="SIT2_half_length"    value="691*mm"/>
     <constant name="SIT3_half_length"    value="1013*mm"/>
@@ -128,14 +128,14 @@
     <constant name="SiTracker_endcap_z3" value="SIT1_half_length+SiTracker_barrel_endcap_gap"/>
     <constant name="SiTracker_endcap_z4" value="SIT2_half_length+SiTracker_barrel_endcap_gap"/>
     <constant name="SiTracker_endcap_z5" value="SIT3_half_length+SiTracker_barrel_endcap_gap"/>
-    <constant name="SiTracker_endcap_z6" value="0.5*(SIT3_half_length+MainTracker_half_length)"/>
+    <constant name="SiTracker_endcap_z6" value="SIT4_half_length+SiTracker_barrel_endcap_gap"/>
     <constant name="SiTracker_endcap_z7" value="MainTracker_half_length+SiTracker_DC_endcap_gap"/>
-    <constant name="SiTracker_endcap_outer_radius1" value="Vertex_outer_radius"/>
-    <constant name="SiTracker_endcap_outer_radius2" value="Vertex_outer_radius"/>
+    <constant name="SiTracker_endcap_outer_radius1" value="SIT1_inner_radius"/>
+    <constant name="SiTracker_endcap_outer_radius2" value="SIT1_inner_radius"/>
     <constant name="SiTracker_endcap_outer_radius3" value="SIT1_inner_radius+SiTracker_barrel_endcap_gap"/>
     <constant name="SiTracker_endcap_outer_radius4" value="SIT2_inner_radius+SiTracker_barrel_endcap_gap"/>
     <constant name="SiTracker_endcap_outer_radius5" value="SIT3_inner_radius+SiTracker_barrel_endcap_gap"/>
-    <constant name="SiTracker_endcap_outer_radius6" value="SIT3_inner_radius+SiTracker_barrel_endcap_gap"/>
+    <constant name="SiTracker_endcap_outer_radius6" value="SIT4_inner_radius+SiTracker_barrel_endcap_gap"/>
     <constant name="SiTracker_endcap_outer_radius7" value="SET_inner_radius+SiTracker_barrel_endcap_gap"/>
     <!--obseleted -->
     <constant name="FTD_BeamPipe_cable_clearance"     value="10*mm"/> 
@@ -262,7 +262,7 @@
     <vis name="YOKEVis"          alpha="1.0" r="0.64"  g="0.75"    b="0.99"  showDaughters="false" visible="true"/>
     <vis name="LCALVis"          alpha="1.0" r="0.25"  g="0.88"    b="0.81"  showDaughters="true"  visible="true"/>
     <vis name="SupportVis"       alpha="1.0" r="0.2"   g="0.2"     b="0.2"   showDaughters="true"  visible="true"/>
-    <vis name="ShellVis"         alpha="1.0" r="0.83"  g="0.55"    b="0.89"  showDaughters="false" visible="true"/>
+    <vis name="ShellVis"         alpha="1.0" r="0.82"  g="0.59"    b="0.36"  showDaughters="false" visible="true"/>
 
     <vis name="WhiteVis"         alpha="0.0" r=".96" g=".96"  b=".96"   showDaughters="true"  visible="true"/>
     <vis name="LightGrayVis"     alpha="0.0" r=".75" g=".75"  b=".75"   showDaughters="true"  visible="true"/>
diff --git a/Detector/DetCRD/compact/CRD_o1_v04/CRD_o1_v04-onlyTracker.xml b/Detector/DetCRD/compact/CRD_o1_v04/CRD_o1_v04-onlyTracker.xml
index 7f552594e3df4ae36372f557fed25ec98fb4818c..ececd6165bbf2b9217bd005dc0bba4f980da37e2 100644
--- a/Detector/DetCRD/compact/CRD_o1_v04/CRD_o1_v04-onlyTracker.xml
+++ b/Detector/DetCRD/compact/CRD_o1_v04/CRD_o1_v04-onlyTracker.xml
@@ -31,7 +31,7 @@
   <include ref="../CRD_common_v01/VXD_v01_03.xml"/>
   <include ref="../CRD_common_v01/FTD_SkewRing_v01_03.xml"/>
   <include ref="../CRD_common_v01/SIT_SimplePixel_v01_01.xml"/>
-  <include ref="../CRD_common_v01/DC_Simple_v01_01.xml"/>
+  <include ref="../CRD_common_v01/DC_Simple_v01_02.xml"/>
   <include ref="../CRD_common_v01/SET_SimplePixel_v01_01.xml"/>
 
   <fields>
diff --git a/Detector/DetCRD/compact/CRD_o1_v04/CRD_o1_v04.xml b/Detector/DetCRD/compact/CRD_o1_v04/CRD_o1_v04.xml
index 633bdaff7cd8fc63f804ede13099b2cbadae9270..1804d93a39d5f90048721b6fb21f83fcd6e82c84 100644
--- a/Detector/DetCRD/compact/CRD_o1_v04/CRD_o1_v04.xml
+++ b/Detector/DetCRD/compact/CRD_o1_v04/CRD_o1_v04.xml
@@ -31,7 +31,7 @@
   <include ref="../CRD_common_v01/VXD_v01_03.xml"/>
   <include ref="../CRD_common_v01/FTD_SkewRing_v01_03.xml"/>
   <include ref="../CRD_common_v01/SIT_SimplePixel_v01_01.xml"/>
-  <include ref="../CRD_common_v01/DC_Simple_v01_01.xml"/>
+  <include ref="../CRD_common_v01/DC_Simple_v01_02.xml"/>
   <include ref="../CRD_common_v01/SET_SimplePixel_v01_01.xml"/>
   <include ref="../CRD_common_v01/Ecal_Crystal_Barrel_v01_01.xml"/>
   <!--include ref="../CRD_common_v01/Ecal_Crystal_Endcap_v01_01.xml"/-->
diff --git a/Detector/GeomSvc/src/GeomSvc.cpp b/Detector/GeomSvc/src/GeomSvc.cpp
index f7ae4a2bd6c04f6f728e51a8c251e1cd9a31575e..31443757ef16cb43bd2115d1de4c28929b7bb836 100644
--- a/Detector/GeomSvc/src/GeomSvc.cpp
+++ b/Detector/GeomSvc/src/GeomSvc.cpp
@@ -44,6 +44,9 @@ GeomSvc::initialize() {
 StatusCode
 GeomSvc::finalize() {
   StatusCode sc;
+
+  dd4hep::Detector::destroyInstance();
+
   return sc;
 }
 
diff --git a/Digitisers/SimpleDigi/src/PlanarDigiAlg.cpp b/Digitisers/SimpleDigi/src/PlanarDigiAlg.cpp
index 09fb7eecd86948cf36f45dcdda81b35d48118cc9..2a4ee084e2ecf41a90a4dcc700d8e70683f79cdd 100644
--- a/Digitisers/SimpleDigi/src/PlanarDigiAlg.cpp
+++ b/Digitisers/SimpleDigi/src/PlanarDigiAlg.cpp
@@ -85,7 +85,7 @@ StatusCode PlanarDigiAlg::initialize()
   //TODO:trksystem->init() ;
   //FIXME:SJA gear surface store has now been filled so we can dispose of the MarlinTrkSystem
   //TODO:delete trksystem;
-  
+  // fucd: fix TODO - surface store is needed to fill once always if does not handle tracking algorithm in job
   auto _trackSystemSvc = service<ITrackSystemSvc>("TrackSystemSvc");
   if ( !_trackSystemSvc ) {
     error() << "Failed to find TrackSystemSvc ..." << endmsg;
@@ -166,6 +166,7 @@ StatusCode PlanarDigiAlg::execute()
 
   int i = 0;
   for( auto SimTHit : *STHcol ) {
+    if (SimTHit.getEDep()<=_eThreshold) continue;
 
     const int celId = SimTHit.getCellID() ;
 
@@ -252,11 +253,14 @@ StatusCode PlanarDigiAlg::execute()
                 << " sensor" << sensor << " : retries " << tries << endmsg;
       }
 
-      localPointSmeared.setX( localPoint.x() + gsl_ran_gaussian(_rng, resU) );
-      localPointSmeared.setY( localPoint.y() + gsl_ran_gaussian(_rng, resV) );
+      double dx = gsl_ran_gaussian(_rng, resU);
+      double dy = gsl_ran_gaussian(_rng, resV);
+      localPointSmeared.setX( localPoint.x() + dx );
+      localPointSmeared.setY( localPoint.y() + dy );
 
       //check if hit is in boundaries
-      if ( ms->isLocalInBoundary( localPointSmeared ) ) {
+      if ( ms->isLocalInBoundary( localPointSmeared ) && fabs(dx)<_maxPull*resU && fabs(dy)<_maxPull*resV ) {
+      //if ( ms->isLocalInBoundary( localPointSmeared ) ) {
         accept_hit = true;
         break;
       }
@@ -339,7 +343,7 @@ StatusCode PlanarDigiAlg::execute()
         trkHit.setType( UTIL::set_bit( trkHit.getType() , UTIL::ILDTrkHitTypeBit::ONE_DIMENSIONAL ) ) ;
     }
     trkHit.setEDep( SimTHit.getEDep() );
-
+    trkHit.setTime( SimTHit.getTime() );
     // make the relation
     auto rel = relCol->create();
 
@@ -374,5 +378,8 @@ StatusCode PlanarDigiAlg::execute()
 StatusCode PlanarDigiAlg::finalize()
 {
   info() << "Processed " << _nEvt << " events " << endmsg;
+
+  if(_rng) gsl_rng_free(_rng);
+
   return GaudiAlgorithm::finalize();
 }
diff --git a/Digitisers/SimpleDigi/src/PlanarDigiAlg.h b/Digitisers/SimpleDigi/src/PlanarDigiAlg.h
index 10ddd9dd4bc3216348518ea0df14ebe9cb000684..0e53e707abcff7188e4c3031261c7163107d5abd 100644
--- a/Digitisers/SimpleDigi/src/PlanarDigiAlg.h
+++ b/Digitisers/SimpleDigi/src/PlanarDigiAlg.h
@@ -82,13 +82,15 @@ protected:
   // whether use Planar tag for type and cov, if true, CEPCConf::TrkHitTypeBit::PLANAR bit is set as true
   // cov[0]=thetaU, cov[1]=phiU, cov[2]=resU, cov[0]=thetaV, cov[1]=phiV, cov[2]=resV
   Gaudi::Property<bool> _usePlanarTag{ this, "UsePlanarTag", true };
+  Gaudi::Property<float> _eThreshold{ this, "EnergyThreshold", 0 };
+  Gaudi::Property<float> _maxPull{ this, "PullCutToRetry", 1000. };
 
   // Input collections
   DataHandle<edm4hep::EventHeaderCollection> _headerCol{"EventHeaderCol", Gaudi::DataHandle::Reader, this};
   DataHandle<edm4hep::SimTrackerHitCollection> _inColHdl{"VXDCollection", Gaudi::DataHandle::Reader, this};
   // Output collections
   DataHandle<edm4hep::TrackerHitCollection> _outColHdl{"VXDTrackerHits", Gaudi::DataHandle::Writer, this};
-  DataHandle<edm4hep::MCRecoTrackerAssociationCollection> _outRelColHdl{"VTXTrackerHitRelations", Gaudi::DataHandle::Writer, this};
+  DataHandle<edm4hep::MCRecoTrackerAssociationCollection> _outRelColHdl{"VXDTrackerHitRelations", Gaudi::DataHandle::Writer, this};
 };
 
 #endif
diff --git a/Reconstruction/Tracking/src/Clupatra/ClupatraAlg.cpp b/Reconstruction/Tracking/src/Clupatra/ClupatraAlg.cpp
index 05d12daeb2d9f5367e8e0f1c5bde76f490a8d114..d218e041b47024844daf858f9abf23d77693143f 100644
--- a/Reconstruction/Tracking/src/Clupatra/ClupatraAlg.cpp
+++ b/Reconstruction/Tracking/src/Clupatra/ClupatraAlg.cpp
@@ -799,7 +799,7 @@ StatusCode ClupatraAlg::execute() {
 	//===============================================================================================
 
 	// FIXME Mingrui
-	debug()  << " ===========    refitting final " << cluList.size() << " track segments  "   << endmsg ;
+	debug()  << " =========== refitting final " << cluList.size() << " track segments chi2 cut = " << _dChi2Max << endmsg ;
 
 	//---- refit cluster tracks individually to save memory ( KalTest tracks have ~1MByte each)
 
@@ -811,10 +811,12 @@ StatusCode ClupatraAlg::execute() {
 			continue ;
 
 		MarlinTrk::IMarlinTrack* trk = fit( *icv ) ;
-		trk->smooth() ;
-		edm4hep::MutableTrack edm4hepTrk = converter( *icv ) ;
-		tsCol_tmp.push_back( new ClupaPlcioTrack(edm4hepTrk) ) ;
-		MarTrk_of_edm4hepTrack(edm4hepTrk) = 0 ;
+		if(trk){
+		  trk->smooth() ;
+		  edm4hep::MutableTrack edm4hepTrk = converter( *icv ) ;
+		  tsCol_tmp.push_back( new ClupaPlcioTrack(edm4hepTrk) ) ;
+		  MarTrk_of_edm4hepTrack(edm4hepTrk) = 0 ;
+		}
 		delete trk ;
 	}
 
@@ -883,14 +885,13 @@ StatusCode ClupatraAlg::execute() {
 
 			nntrkclu.cluster( incSegVec.begin() , incSegVec.end() , std::back_inserter( incSegCluVec ), trkMerge , 2  ) ;
 
-			// FIXME: Mingrui
-			// streamlog_out( DEBUG4 ) << " ===== merged track segments - # cluster: " << incSegCluVec.size()
-			//  << " from " << incSegVec.size() << " incomplete track segments "    << "  ============================== " << std::endl ;
+			debug() << " ===== merged track segments - # cluster: " << incSegCluVec.size()
+				<< " from " << incSegVec.size() << " incomplete track segments =====" << endmsg;
 
 			for(  TrackClusterer::cluster_vector::iterator it= incSegCluVec.begin() ; it != incSegCluVec.end() ; ++it) {
 
 				// FIXME: Mingrui
-				// streamlog_out( DEBUG4 ) <<  edm4hep::header<edm4hep::Track>() << std::endl ;
+                                // streamlog_out( DEBUG4 ) <<  edm4hep::header<edm4hep::Track>() << std::endl ;
 
 				TrackClusterer::cluster_type*  incSegClu = *it ;
 
@@ -951,8 +952,7 @@ StatusCode ClupatraAlg::execute() {
 				delete mTrk ;
 				computeTrackInfo( track ) ;
 
-				// FIXME: Mingrui
-				// streamlog_out( DEBUG4 ) << "   ******  created new track : " << " : " << lcshort( (Track*) track )  << std::endl ;
+				debug() << "   ******  created new track : " << " : " << track.id() << endmsg;
 
 			}
 		}// loop over l
diff --git a/Service/GearSvc/src/GearSvc.cpp b/Service/GearSvc/src/GearSvc.cpp
index e96ae681694de49f30b430dedf1ec1ac9568f0e3..695e455499efff51aeca796bb0ee45bd1d8b7020 100644
--- a/Service/GearSvc/src/GearSvc.cpp
+++ b/Service/GearSvc/src/GearSvc.cpp
@@ -135,7 +135,7 @@ StatusCode GearSvc::initialize()
     m_gearMgr->setYokeBarrelParameters(barrelYokeParam) ;
     m_gearMgr->setYokeEndcapParameters(endcapYokeParam) ;
     m_gearMgr->setYokePlugParameters(plugYokeParam) ;
-    gear::TiXmlDocument* doc = new gear::TiXmlDocument ;
+
     gear::GearXML::createXMLFile(m_gearMgr, "test.xml");
   }
   
diff --git a/Service/TrackSystemSvc/src/MarlinTrkUtils.cc b/Service/TrackSystemSvc/src/MarlinTrkUtils.cc
index ffa0f7f9395accd360f1efce633308447873d258..0e40fbabc2cb07f006002af22118267480bfa68a 100644
--- a/Service/TrackSystemSvc/src/MarlinTrkUtils.cc
+++ b/Service/TrackSystemSvc/src/MarlinTrkUtils.cc
@@ -258,7 +258,9 @@ namespace MarlinTrk {
     // set the initial track parameters  
     ///////////////////////////////////////////////////////
     
-    return_error = marlinTrk->initialise( *pre_fit, bfield_z, IMarlinTrack::backward ) ;
+    //return_error = marlinTrk->initialise( *pre_fit, bfield_z, IMarlinTrack::backward ) ;
+    // fucd: previous fixed as IMarlinTrack::backward, can not change? using input value now
+    return_error = marlinTrk->initialise( *pre_fit, bfield_z, fit_backwards ) ;
     if (return_error != IMarlinTrack::success) {
       
       std::cout << "MarlinTrk::createFit Initialisation of track fit failed with error : " << return_error << std::endl;
@@ -388,10 +390,10 @@ namespace MarlinTrk {
     return_error = marlintrk->getNDF(ndf);
 
     if ( return_error != IMarlinTrack::success) {
-      //streamlog_out(DEBUG3) << "MarlinTrk::finaliseLCIOTrack: getNDF returns " << return_error << std::endl;
+      //std::cout << "MarlinTrk::finaliseLCIOTrack: getNDF returns " << return_error << std::endl;
       return return_error;
     } else if( ndf < 0 ) {
-      //streamlog_out(DEBUG2) << "MarlinTrk::finaliseLCIOTrack: number of degrees of freedom less than 0 track dropped : NDF = " << ndf << std::endl;
+      //std::cout << "MarlinTrk::finaliseLCIOTrack: number of degrees of freedom less than 0 track dropped : NDF = " << ndf << std::endl;
       return IMarlinTrack::error;
     } else {
       //streamlog_out(DEBUG1) << "MarlinTrk::finaliseLCIOTrack: NDF = " << ndf << std::endl;
@@ -543,7 +545,6 @@ namespace MarlinTrk {
       track->addToTrackStates(*trkStateAtFirstHit);
     } else {
       //streamlog_out( WARNING ) << "  >>>>>>>>>>> MarlinTrk::finaliseLCIOTrack:  could not get TrackState at First Hit " << firstHit << std::endl ;
-      delete trkStateAtFirstHit;
     }
     
     double r_first = firstHit.getPosition()[0]*firstHit.getPosition()[0] + firstHit.getPosition()[1]*firstHit.getPosition()[1];
@@ -569,7 +570,7 @@ namespace MarlinTrk {
         track->addToTrackStates(*trkStateAtLastHit);
       } else {
 	std::cout << "ERROR>>>>>>>>>>> MarlinTrk::finaliseLCIOTrack:  could not get TrackState at Last Hit " << last_constrained_hit.id() << std::endl ;
-        delete trkStateAtLastHit;
+        //delete trkStateAtLastHit;
       }
       
 //      const EVENT::FloatVec& ma = trkStateAtLastHit->getCovMatrix();
@@ -587,17 +588,22 @@ namespace MarlinTrk {
 //      return_error = createTrackStateAtCaloFace(marlintrk, trkStateCalo, lastHit, tanL_is_positive);
       
       if ( return_error == 0 ) {
+	//std::cout << "fucdout referencePoint " << trkStateCalo.referencePoint << std::endl;
         trkStateCalo.location = MarlinTrk::Location::AtCalorimeter;
         track->addToTrackStates(trkStateCalo);
       } else {
-        //streamlog_out( WARNING ) << "  >>>>>>>>>>> MarlinTrk::finaliseLCIOTrack:  could not get TrackState at Calo Face "  << std::endl ;
+	std::cout << "  >>>>>>>>>>> MarlinTrk::finaliseLCIOTrack:  could not get TrackState at Calo Face "  << std::endl ;
         //delete trkStateCalo;
       }
     } else {
       track->addToTrackStates(*atLastHit);
       track->addToTrackStates(*atCaloFace);
+      //delete trkStateAtLastHit;
     }
-    
+
+    if(trkStateAtFirstHit) delete trkStateAtFirstHit;
+    if(trkStateAtLastHit)  delete trkStateAtLastHit;
+    if(trkStateIP)         delete trkStateIP;
     ///////////////////////////////////////////////////////
     // done
     ///////////////////////////////////////////////////////
diff --git a/Simulation/DetSimSD/src/GenericTrackerSensitiveDetector.cpp b/Simulation/DetSimSD/src/GenericTrackerSensitiveDetector.cpp
index d250079ef0a8aa5f15e50fb801b1de90c46d3a17..5e9ba1a6af4cf2dbe994a1bf7d686f3bfcbf19f7 100644
--- a/Simulation/DetSimSD/src/GenericTrackerSensitiveDetector.cpp
+++ b/Simulation/DetSimSD/src/GenericTrackerSensitiveDetector.cpp
@@ -23,10 +23,11 @@ void GenericTrackerSensitiveDetector::Initialize(G4HCofThisEvent* HCE){
 }
 
 G4bool GenericTrackerSensitiveDetector::ProcessHits(G4Step* step, G4TouchableHistory*){
-  
   G4TouchableHandle touchPost = step->GetPostStepPoint()->GetTouchableHandle(); 
   G4TouchableHandle touchPre  = step->GetPreStepPoint()->GetTouchableHandle(); 
   dd4hep::sim::Geant4StepHandler h(step);
+  if (fabs(h.trackDef()->GetPDGCharge()) < 0.01) return true;
+
   dd4hep::Position prePos    = h.prePos();
   dd4hep::Position postPos   = h.postPos();
   dd4hep::Position direction = postPos - prePos;
diff --git a/Simulation/DetSimSD/src/TrackerCombineSensitiveDetector.cpp b/Simulation/DetSimSD/src/TrackerCombineSensitiveDetector.cpp
index 0d53d3b99c915a4428be09f2dfceec72040f7195..591c3cf3273a872f8533a8d11f3301fe60a408eb 100644
--- a/Simulation/DetSimSD/src/TrackerCombineSensitiveDetector.cpp
+++ b/Simulation/DetSimSD/src/TrackerCombineSensitiveDetector.cpp
@@ -23,6 +23,8 @@ void TrackerCombineSensitiveDetector::Initialize(G4HCofThisEvent* HCE){
 
 G4bool TrackerCombineSensitiveDetector::ProcessHits(G4Step* step, G4TouchableHistory*){
   dd4hep::sim::Geant4StepHandler h(step);
+  if (fabs(h.trackDef()->GetPDGCharge()) < 0.01) return true;
+
   bool return_code = false;
   if ( userData.current == -1 ) userData.start(getCellID(step), step, h.pre);
   else if ( !userData.track || userData.current != h.track->GetTrackID() ) {
diff --git a/Utilities/KalTest/src/kaltracklib/TKalDetCradle.cxx b/Utilities/KalTest/src/kaltracklib/TKalDetCradle.cxx
index 5f8c643d242d5289b0f8170e2153819cc6ede1ab..0ff61c7073b50eea9ce7f33d1397f0b21b7bcaae 100644
--- a/Utilities/KalTest/src/kaltracklib/TKalDetCradle.cxx
+++ b/Utilities/KalTest/src/kaltracklib/TKalDetCradle.cxx
@@ -29,6 +29,7 @@
 #include "TVSurface.h"       // from GeomLib
 #include <memory>            // from STL
 #include <iostream>          // from STL
+#include <map>
 
 ClassImp(TKalDetCradle)
 
@@ -45,6 +46,19 @@ fDone(kFALSE), fIsClosed(kFALSE)
 
 TKalDetCradle::~TKalDetCradle()
 {
+  //std::cout << "TKalDetCradle::~TKalDetCradle() " << this << " " << GetEntries() << std::endl;
+  std::map<TAttElement*, int> det_nelement;
+
+  TIter next(this);
+  TObject *mlp = 0;
+  while ((mlp = next())) {
+    TAttElement* det = const_cast<TAttElement*>(&(dynamic_cast<TAttElement *>(mlp)->GetParent(kFALSE)));
+    if(det_nelement.find(det)!=det_nelement.end()) det_nelement[det]++;
+    else det_nelement[det] = 1;
+  }
+  for (auto it : det_nelement) {
+    delete it.first;
+  }
 }
 
 //_________________________________________________________________________
@@ -71,6 +85,8 @@ void TKalDetCradle::Install(TVKalDetector &det)
     dynamic_cast<TAttElement *>(mlp)->SetParentPtr(&det);
     det.SetParentPtr(this);
   }
+  det.SetOwner(kFALSE);
+
   fDone = kFALSE;
 }