diff --git a/Detector/DetCEPCv4/src/tracker/FTD_Simple_Staggered_geo.cpp b/Detector/DetCEPCv4/src/tracker/FTD_Simple_Staggered_geo.cpp
index 648cc222a61c1d0a22468ce4308f90773f24a04e..8a7ae183999e4f0001e408c9ec65107930a07a0b 100644
--- a/Detector/DetCEPCv4/src/tracker/FTD_Simple_Staggered_geo.cpp
+++ b/Detector/DetCEPCv4/src/tracker/FTD_Simple_Staggered_geo.cpp
@@ -327,7 +327,13 @@ static Ref_t create_element(Detector& theDetector, xml_h e, SensitiveDetector se
   
   PlacedVolume pv;
 
-  sens.setType("tracker");
+  if (x_det.hasAttr(_U(sensitive))) {
+    xml_dim_t sd_typ = x_det.child(_U(sensitive));
+    sens.setType(sd_typ.typeStr());
+  }
+  else {
+    sens.setType("tracker");
+  }
 
   // --- create assembly and DetElement for support and service volumes 
 
diff --git a/Detector/DetCEPCv4/src/tracker/FTD_cepc_geo.cpp b/Detector/DetCEPCv4/src/tracker/FTD_cepc_geo.cpp
index 053371aacf430406f2412e579648971f1d610d50..1515fdd025578ae5ec2b92229b08b040a21a4b2b 100644
--- a/Detector/DetCEPCv4/src/tracker/FTD_cepc_geo.cpp
+++ b/Detector/DetCEPCv4/src/tracker/FTD_cepc_geo.cpp
@@ -327,7 +327,13 @@ static Ref_t create_element(Detector& theDetector, xml_h e, SensitiveDetector se
   
   PlacedVolume pv;
 
-  sens.setType("tracker");
+  if (x_det.hasAttr(_U(sensitive))) {
+    xml_dim_t sd_typ = x_det.child(_U(sensitive));
+    sens.setType(sd_typ.typeStr());
+  }
+  else {
+    sens.setType("tracker");
+  }
 
   // --- create assembly and DetElement for support and service volumes 
 
diff --git a/Detector/DetCEPCv4/src/tracker/SET_Simple_Planar_geo.cpp b/Detector/DetCEPCv4/src/tracker/SET_Simple_Planar_geo.cpp
index e311fcc923d3470be157a1caf69716dbda8a05b0..390939704a14bb4a0c9e76feef872ee343e27ea3 100644
--- a/Detector/DetCEPCv4/src/tracker/SET_Simple_Planar_geo.cpp
+++ b/Detector/DetCEPCv4/src/tracker/SET_Simple_Planar_geo.cpp
@@ -77,9 +77,13 @@ static dd4hep::Ref_t create_element(dd4hep::Detector& theDetector, xml_h e, dd4h
   
   //PlacedVolume pv;
   
-  
-  sens.setType("tracker");
-
+  if (x_det.hasAttr(_U(sensitive))) {
+    xml_dim_t sd_typ = x_det.child(_U(sensitive));
+    sens.setType(sd_typ.typeStr());
+  }
+  else {
+    sens.setType("tracker");
+  }
   
   dd4hep::rec::ZPlanarData*  zPlanarData = new ZPlanarData ;
 
diff --git a/Detector/DetCEPCv4/src/tracker/SIT_Simple_Pixel_geo.cpp b/Detector/DetCEPCv4/src/tracker/SIT_Simple_Pixel_geo.cpp
index 51aaaabe534bcf50aac95705ae7b7b4126a3e297..2599359474fca1e8add47298b6b831ec8d7cf3f2 100644
--- a/Detector/DetCEPCv4/src/tracker/SIT_Simple_Pixel_geo.cpp
+++ b/Detector/DetCEPCv4/src/tracker/SIT_Simple_Pixel_geo.cpp
@@ -84,9 +84,13 @@ static dd4hep::Ref_t create_element(dd4hep::Detector& theDetector, xml_h e, dd4h
   
   dd4hep::PlacedVolume pv;
   
-  
-  sens.setType("tracker");
-
+  if (x_det.hasAttr(_U(sensitive))) {
+    xml_dim_t sd_typ = x_det.child(_U(sensitive));
+    sens.setType(sd_typ.typeStr());
+  }
+  else {
+    sens.setType("tracker");
+  }
 
   dd4hep::rec::ZPlanarData*  zPlanarData = new dd4hep::rec::ZPlanarData ;
 
diff --git a/Detector/DetCEPCv4/src/tracker/SIT_Simple_Planar_geo.cpp b/Detector/DetCEPCv4/src/tracker/SIT_Simple_Planar_geo.cpp
index f76791463b748f9ddc7eeb4db177f8564569af0f..a33d71e676cef6e9b58366c039ea261c0cfa0ebe 100644
--- a/Detector/DetCEPCv4/src/tracker/SIT_Simple_Planar_geo.cpp
+++ b/Detector/DetCEPCv4/src/tracker/SIT_Simple_Planar_geo.cpp
@@ -84,9 +84,13 @@ static dd4hep::Ref_t create_element(dd4hep::Detector& theDetector, xml_h e, dd4h
   
   dd4hep::PlacedVolume pv;
   
-  
-  sens.setType("tracker");
-
+  if (x_det.hasAttr(_U(sensitive))) {
+    xml_dim_t sd_typ = x_det.child(_U(sensitive));
+    sens.setType(sd_typ.typeStr());
+  }
+  else {
+    sens.setType("tracker");
+  }
 
   dd4hep::rec::ZPlanarData*  zPlanarData = new dd4hep::rec::ZPlanarData ;
 
diff --git a/Detector/DetCEPCv4/src/tracker/TPC10_geo.cpp b/Detector/DetCEPCv4/src/tracker/TPC10_geo.cpp
index 50d28c2e8b9af697bdb7d5ff16e1ea6779c83140..01d7ab0d55a278ac4484387e59a5dcd092c99f3c 100644
--- a/Detector/DetCEPCv4/src/tracker/TPC10_geo.cpp
+++ b/Detector/DetCEPCv4/src/tracker/TPC10_geo.cpp
@@ -68,7 +68,13 @@ static Ref_t create_element(Detector& theDetector, xml_h e, SensitiveDetector se
 
   PlacedVolume pv;  
 
-  sens.setType("tracker");
+  if (x_det.hasAttr(_U(sensitive))) {
+    xml_dim_t sd_typ = x_det.child(_U(sensitive));
+    sens.setType(sd_typ.typeStr());
+  }
+  else {
+    sens.setType("tracker");
+  }
 
   std::cout << " ** building TPC10_geo in lcgeo " << lcgeo::versionString() << std::endl ;
 
diff --git a/Detector/DetCEPCv4/src/tracker/VXD04_geo.cpp b/Detector/DetCEPCv4/src/tracker/VXD04_geo.cpp
index ae2d4d83c77c14e4552d00c9e0f03bb03c8826f5..6af6456fd2462f4505b91d5ebfef0e5776ee3880 100644
--- a/Detector/DetCEPCv4/src/tracker/VXD04_geo.cpp
+++ b/Detector/DetCEPCv4/src/tracker/VXD04_geo.cpp
@@ -74,7 +74,13 @@ static Ref_t create_element(Detector& theDetector, xml_h e, SensitiveDetector se
 
   //-----------------------------------------------------------------------------------
 
-  sens.setType("tracker");
+  if (x_det.hasAttr(_U(sensitive))) {
+    xml_dim_t sd_typ = x_det.child(_U(sensitive));
+    sens.setType(sd_typ.typeStr());
+  }
+  else {
+    sens.setType("tracker");
+  }
 
   // --- create assembly and DetElement for support and service volumes 
 
diff --git a/Detector/DetCRD/src/Tracker/SiTrackerSkewRing_v01_geo.cpp b/Detector/DetCRD/src/Tracker/SiTrackerSkewRing_v01_geo.cpp
index 2b16111eb51440d7c702633a557c45ae724fe224..949ca19be3ce74467fbeaa3b24fddaa1f59abbd1 100644
--- a/Detector/DetCRD/src/Tracker/SiTrackerSkewRing_v01_geo.cpp
+++ b/Detector/DetCRD/src/Tracker/SiTrackerSkewRing_v01_geo.cpp
@@ -66,7 +66,13 @@ static dd4hep::Ref_t create_detector(Detector& description, xml_h e, SensitiveDe
   if(description.buildType()==dd4hep::BUILD_ENVELOPE) return tracker;
   envelope.setVisAttributes(description.visAttributes("SeeThrough"));
 
-  sens.setType("tracker");
+  if (x_det.hasAttr(_U(sensitive))) {
+    xml_dim_t sd_typ = x_det.child(_U(sensitive));
+    sens.setType(sd_typ.typeStr());
+  }
+  else {
+    sens.setType("tracker");
+  }
   std::cout << " ** building SiTrackerEndcapRing_v01 ..." << std::endl ;
 
   dd4hep::xml::Component recPar = x_det.child(_Unicode(reconstruction));
diff --git a/Detector/DetCRD/src/Tracker/TPC_ModularEndcap_o1_v01.cpp b/Detector/DetCRD/src/Tracker/TPC_ModularEndcap_o1_v01.cpp
index 616c7e1accb60baa67112164d64444a1a0c41423..be43764ce9a296872420ff18f17cd1811b51d8a9 100644
--- a/Detector/DetCRD/src/Tracker/TPC_ModularEndcap_o1_v01.cpp
+++ b/Detector/DetCRD/src/Tracker/TPC_ModularEndcap_o1_v01.cpp
@@ -72,7 +72,13 @@ static Ref_t create_element(Detector& theDetector, xml_h e, SensitiveDetector se
 
     PlacedVolume pv;  
 
-    sens.setType("tracker");
+    if (x_det.hasAttr(_U(sensitive))) {
+      xml_dim_t sd_typ = x_det.child(_U(sensitive));
+      sens.setType(sd_typ.typeStr());
+    }
+    else {
+      sens.setType("tracker");
+    }
 
     std::cout << " **Lan Lan building TPC_ModularEndcap_TDR_o1_v01 construction" << std::endl ;
 
diff --git a/Detector/DetCRD/src/Tracker/TPC_Simple_o1_v01.cpp b/Detector/DetCRD/src/Tracker/TPC_Simple_o1_v01.cpp
index 8dd22ac704176667ccd23f655bc93ecca2c37300..ddbcad4b24996ae831874f6ab4708796806ecaf6 100644
--- a/Detector/DetCRD/src/Tracker/TPC_Simple_o1_v01.cpp
+++ b/Detector/DetCRD/src/Tracker/TPC_Simple_o1_v01.cpp
@@ -71,7 +71,13 @@ static Ref_t create_element(Detector& theDetector, xml_h e, SensitiveDetector se
 
     PlacedVolume pv;  
 
-    sens.setType("tracker");
+    if (x_det.hasAttr(_U(sensitive))) {
+      xml_dim_t sd_typ = x_det.child(_U(sensitive));
+      sens.setType(sd_typ.typeStr());
+    }
+    else {
+      sens.setType("tracker");
+    }
 
     std::cout << " **Lan Lan building TPC_Simple_TDR_o1_v01 construction" << std::endl ;