diff --git a/Detector/DetCEPCv4/compact/tpc10_01.xml b/Detector/DetCEPCv4/compact/tpc10_01.xml
index 539e06577a621ecf4a610af491c9d9c564a036c2..cef34c70fe00ce6688ef56683195c92355838388 100644
--- a/Detector/DetCEPCv4/compact/tpc10_01.xml
+++ b/Detector/DetCEPCv4/compact/tpc10_01.xml
@@ -86,7 +86,7 @@
 
  <readouts>
     <readout name="TPCCollection">
-      <id>system:5,side:-2,layer:9,module:8,sensor:8</id>
+      <id>system:5,side:-2,layer:13,module:8,sensor:8</id>
     </readout>
  </readouts>
 
diff --git a/Detector/Identifier/include/Identifier/CEPCConf.h b/Detector/Identifier/include/Identifier/CEPCConf.h
index 2dceac7e12193b6aebdbe1f3fbc746dcd5db7093..95544ffcfecc175327192a43c41482eb62ed4829 100644
--- a/Detector/Identifier/include/Identifier/CEPCConf.h
+++ b/Detector/Identifier/include/Identifier/CEPCConf.h
@@ -45,5 +45,19 @@ namespace CEPCConf{
     static const int DOUBLE_HIT_CANDIDATE = 28;
     static const int GOOD                 = 27;
   };
+
+  struct DetEncoderString{
+    static const int system = 5;
+    static const int side = -2;
+    static const int layer = 13;
+    static const int module = 6;
+    static const int sensor = 6;
+    static std::string getStringRepresentation() {
+        std::stringstream ss;
+        ss << "system:" << system << ",side:" << side << ",layer:" << layer << ",module:" << module << ",sensor:" << sensor;
+        return ss.str();
+    }
+  };
+
 }
 #endif
diff --git a/Digitisers/SimpleDigi/src/TPCDigiAlg.cpp b/Digitisers/SimpleDigi/src/TPCDigiAlg.cpp
index c6057e548414e27ed26ac1c683964a15bb497c60..091ccff2dfb98dda848a1d28b666374494d063ad 100644
--- a/Digitisers/SimpleDigi/src/TPCDigiAlg.cpp
+++ b/Digitisers/SimpleDigi/src/TPCDigiAlg.cpp
@@ -33,6 +33,7 @@
 #include <gear/BField.h>
 //
 #include "UTIL/ILDConf.h"
+#include "Identifier/CEPCConf.h"
 
 #define TRKHITNCOVMATRIX 6
 
@@ -512,7 +513,9 @@ StatusCode TPCDigiAlg::execute()
     return StatusCode::SUCCESS;
   }
 
-  _cellid_encoder = new UTIL::BitField64( lcio::ILDCellID0::encoder_string ) ;
+  // _cellid_encoder = new UTIL::BitField64( lcio::ILDCellID0::encoder_string ) ;
+  // _cellid_encoder = new UTIL::BitField64( "system:5,side:-2,layer:13,module:6,sensor:6" ) ;
+  _cellid_encoder = new UTIL::BitField64( CEPCConf::DetEncoderString::getStringRepresentation() ) ;
   //int det_id = 0 ;
   //if ( (STHcol != nullptr) && (STHcol->size()>0) ) {
   //  auto SimTHit = STHcol->at( 0 ) ;
diff --git a/Reconstruction/Tracking/include/Tracking/TrackingHelper.h b/Reconstruction/Tracking/include/Tracking/TrackingHelper.h
index 6235b3fb25e6a06ed8d6d8ceee9e8127ad370f71..7dd90d7869bb0b49cb299f05634c42ae89ed0783 100644
--- a/Reconstruction/Tracking/include/Tracking/TrackingHelper.h
+++ b/Reconstruction/Tracking/include/Tracking/TrackingHelper.h
@@ -6,6 +6,7 @@
 #include "UTIL/BitField64.h"
 #include "UTIL/CellIDDecoder.h"
 #include "UTIL/ILDConf.h"
+#include "Identifier/CEPCConf.h"
 #include "lcio.h"
 #include <array>
 
@@ -55,7 +56,9 @@ inline float getPhi(const edm4hep::Track &track) {
 
 
 inline int getLayer(const edm4hep::TrackerHit hit) {
-    UTIL::BitField64* _encoder = new UTIL::BitField64(lcio::ILDCellID0::encoder_string);
+    // UTIL::BitField64* _encoder = new UTIL::BitField64(lcio::ILDCellID0::encoder_string);
+    // UTIL::BitField64* _encoder = new UTIL::BitField64( "system:5,side:-2,layer:13,module:6,sensor:6" );
+    UTIL::BitField64* _encoder = new UTIL::BitField64( CEPCConf::DetEncoderString::getStringRepresentation() );
     _encoder->setValue(hit.getCellID());
     int layer = (*_encoder)[lcio::ILDCellID0::layer];
     delete _encoder;
diff --git a/Reconstruction/Tracking/src/Clupatra/ClupatraAlg.cpp b/Reconstruction/Tracking/src/Clupatra/ClupatraAlg.cpp
index 937adba6ab52508fd907b5ece1c64ca6a0b703c6..40a4f3960db9012d1461f7f01db87f867ef02b21 100644
--- a/Reconstruction/Tracking/src/Clupatra/ClupatraAlg.cpp
+++ b/Reconstruction/Tracking/src/Clupatra/ClupatraAlg.cpp
@@ -930,6 +930,9 @@ StatusCode ClupatraAlg::execute() {
 
 					// flag the segments so they can be ignored for final list
 					// FIXME I need to set type
+					int type = trk.getType();
+					type |= (1<<lcio::ILDTrackTypeBit::SEGMENT);
+					trk.setType(type) ;
 					// trk->setType( lcio::ILDTrackTypeBit::SEGMENT ) ;
 
 					// add old segments to new track
diff --git a/Reconstruction/Tracking/src/Clupatra/clupatra_new.cpp b/Reconstruction/Tracking/src/Clupatra/clupatra_new.cpp
index 17a8dcbb43eae981f3341775b1e3ed363c4459f8..ee11aba6d764feb53dc7114eb2ccd156e71d92a2 100644
--- a/Reconstruction/Tracking/src/Clupatra/clupatra_new.cpp
+++ b/Reconstruction/Tracking/src/Clupatra/clupatra_new.cpp
@@ -4,6 +4,7 @@
 
 #include <UTIL/BitField64.h>
 #include <UTIL/ILDConf.h>
+#include <Identifier/CEPCConf.h>
 #include <UTIL/BitSet32.h>
 
 ///---- GEAR ----
@@ -287,7 +288,9 @@ namespace clupatra_new{
 
 		unsigned step = 0 ;
 
-		UTIL::BitField64 encoder( UTIL::ILDCellID0::encoder_string ) ;
+		// UTIL::BitField64 encoder( UTIL::ILDCellID0::encoder_string ) ;
+		// UTIL::BitField64 encoder( "system:5,side:-2,layer:13,module:6,sensor:6" );
+		UTIL::BitField64 encoder( CEPCConf::DetEncoderString::getStringRepresentation() );
 		encoder[UTIL::ILDCellID0::subdet] = UTIL::ILDDetID::TPC ;
 
 #if PODIO_BUILD_VERSION < PODIO_VERSION(0, 17, 4)
@@ -499,7 +502,9 @@ namespace clupatra_new{
 
 		IMarlinTrack* trk =  MarTrkof(clu) ;
 
-		UTIL::BitField64 encoder( UTIL::ILDCellID0::encoder_string ) ;
+		// UTIL::BitField64 encoder( UTIL::ILDCellID0::encoder_string ) ;
+		// UTIL::BitField64 encoder( "system:5,side:-2,layer:13,module:6,sensor:6" );
+		UTIL::BitField64 encoder( CEPCConf::DetEncoderString::getStringRepresentation() );
 
 		encoder[ UTIL::ILDCellID0::subdet ] = detectorID ;
 		encoder[ UTIL::ILDCellID0::layer  ] = layer ;
@@ -1314,7 +1319,10 @@ start:
 
 	edm4hep::MutableTrack PLCIOTrackConverter::operator() (CluTrack* c) {
 	  
-		static lcio::BitField64 encoder( lcio::ILDCellID0::encoder_string ) ;
+		// static lcio::BitField64 encoder( lcio::ILDCellID0::encoder_string ) ;
+		// static UTIL::BitField64 encoder( "system:5,side:-2,layer:13,module:6,sensor:6" );
+		static UTIL::BitField64 encoder( CEPCConf::DetEncoderString::getStringRepresentation() );
+		
 
 		edm4hep::MutableTrack trk;
 
diff --git a/Utilities/KalDet/src/ild/tpc/ILDTPCKalDetector.cc b/Utilities/KalDet/src/ild/tpc/ILDTPCKalDetector.cc
index 61af3eedbd6421b78c3d9189de7daea2d203160a..18aaa5934cbc2ce611c337c1df563c91a46340d4 100644
--- a/Utilities/KalDet/src/ild/tpc/ILDTPCKalDetector.cc
+++ b/Utilities/KalDet/src/ild/tpc/ILDTPCKalDetector.cc
@@ -24,6 +24,7 @@
 
 #include <UTIL/BitField64.h>
 #include <UTIL/ILDConf.h>
+#include "../../../../../Detector/Identifier/include/Identifier/CEPCConf.h"
 
 // #include "streamlog/streamlog.h"
 
@@ -124,7 +125,9 @@ TVKalDetector(250) // SJA:FIXME initial size, 250 looks reasonable for ILD, thou
   // create measurement layers
   Double_t r = rmin;
   
-  UTIL::BitField64 encoder( lcio::ILDCellID0::encoder_string ) ; 
+  // UTIL::BitField64 encoder( lcio::ILDCellID0::encoder_string ) ; 
+  // UTIL::BitField64 encoder( "system:5,side:-2,layer:13,module:6,sensor:6" );
+  UTIL::BitField64 encoder( CEPCConf::DetEncoderString::getStringRepresentation() );
   
   for (Int_t layer = 0; layer < nlayers; layer++) {