diff --git a/compact/definitions.xml b/compact/definitions.xml
index 77909ff0f4060ea93d32ab942e6762e897f62156..2b70bbe77401932f5b5f22ed19d6fa14f23b5c54 100644
--- a/compact/definitions.xml
+++ b/compact/definitions.xml
@@ -373,15 +373,15 @@
     </comment>
     <constant name="VertexTrackerBarrel_rmin"   value="Beampipe_rmax+5.0*mm"/>
     <constant name="VertexTrackerBarrel_rmax"   value="150.0*mm"/>
-    <constant name="VertexTrackerBarrel_length" value="400.0*mm"/>
+    <constant name="VertexTrackerBarrel_length" value="300.0*mm"/>
     <constant name="VertexTrackerBarrel_zmax"   value="VertexTrackerBarrel_length/2.0"/>
 
     <constant name="VertexTrackerEndcapP_rmax"  value="VertexTrackerBarrel_rmax"/>
     <constant name="VertexTrackerEndcapN_rmax"  value="VertexTrackerBarrel_rmax"/>
     <constant name="VertexTrackerEndcapP_rmin"  value="VertexTrackerBarrel_rmin"/>
     <constant name="VertexTrackerEndcapN_rmin"  value="VertexTrackerBarrel_rmin"/>
-    <constant name="VertexTrackerEndcapP_zmax"  value="600.0*mm"/>
-    <constant name="VertexTrackerEndcapN_zmax"  value="600.0*mm"/>
+    <constant name="VertexTrackerEndcapP_zmax"  value="500.0*mm/2.0"/>
+    <constant name="VertexTrackerEndcapN_zmax"  value="500.0*mm/2.0"/>
 
     <comment>
       Vertex Tracking Region
diff --git a/compact/vertex_tracker.xml b/compact/vertex_tracker.xml
index 5258b5a4aa86a7e81af30d891a752d77309eaed6..e068d2e8d235765429b3cdf2bc7abb2332ab1a02 100644
--- a/compact/vertex_tracker.xml
+++ b/compact/vertex_tracker.xml
@@ -2,16 +2,16 @@
 <lccdd>
   <define>
 
-    <constant name="ITS3Thickness"                  value="0.03*mm"/>
-    <constant name="VertexBarrel_rmin1"             value="3.3*cm"/>
-    <constant name="VertexBarrel_rmin2"             value="5.7*cm"/>
+    <constant name="ITS3Thickness"                   value="0.03*mm"/>
+    <constant name="VertexBarrel_rmin1"              value="3.3*cm"/>
+    <constant name="VertexBarrel_rmin2"              value="5.7*cm"/>
     <constant name="VertexBarrelModule_maxThickness" value="VertexBarrel_rmin2 - VertexBarrel_rmin1"/>
-    <constant name="VertexBarrel_length"            value="30*cm"/>
-    <constant name="VertexBarrel_thickness"         value="0.05/100*9.37*cm"/>
-    <constant name="VertexBarrelService_thickness"  value="VertexBarrel_thickness-ITS3Thickness"/>
-    <constant name="VertexBarrel_rmin"              value="VertexBarrel_rmin1"/>
-    <constant name="VertexBarrel_rmax"              value="VertexBarrel_rmin2+VertexBarrelModule_maxThickness"/>
-    <constant name="VertexBarrelLayer_rOffset"      value="4.0*mm"/>
+    <constant name="VertexBarrel_length"             value="VertexTrackerBarrel_length"/>
+    <constant name="VertexBarrel_thickness"          value="0.05/100*9.37*cm"/>
+    <constant name="VertexBarrelService_thickness"   value="VertexBarrel_thickness-ITS3Thickness"/>
+    <constant name="VertexBarrel_rmin"               value="VertexBarrel_rmin1"/>
+    <constant name="VertexBarrel_rmax"               value="VertexBarrel_rmin2+VertexBarrelModule_maxThickness"/>
+    <constant name="VertexBarrelLayer_rOffset"       value="4.0*mm"/>
 
     <comment> TODO: These should be computed </comment>
     <constant name="VertexBarrel_NModules1" value="14"/>
@@ -30,7 +30,7 @@
     <constant name="VertexTrackerEndcapN_zmin" value="VertexTrackerBarrel_zmax"/>
     <constant name="VertexTrackerEndcapP_zmin" value="VertexTrackerBarrel_zmax"/>
 
-    <constant name="VertexEndcap_NLayers" value="5"/>
+    <constant name="VertexEndcap_NLayers" value="2"/>
     <constant name="VertexTrackerEndcap_delta" value="(VertexTrackerEndcapP_zmax - VertexTrackerEndcapP_zmin)/VertexEndcap_NLayers"/>
 
   
@@ -47,8 +47,8 @@
       name="VertexSubAssembly" 
       type="DD4hep_SubdetectorAssembly" 
       vis="TrackerSubAssemblyVis">
-      <composite name="VertexTrackerEndcapN"/>
-      <composite name="VertexTrackerEndcapP"/> 
+      <composite name="VertexEndcapN"/>
+      <composite name="VertexEndcapP"/> 
       <composite name="VertexBarrel"/>
     </detector>
 
@@ -59,17 +59,19 @@
       type="athena_VertexBarrel"
       readout="VertexBarrelHits"
       insideTrackingVolume="true">
-      <dimensions rmin="VertexBarrel_rmin-VertexBarrelLayer_rOffset" rmax="VertexBarrel_rmax-VertexBarrelLayer_rOffset" length="VertexBarrel_length"/>
-
+      <dimensions 
+        rmin="VertexBarrel_rmin-VertexBarrelLayer_rOffset" 
+        rmax="VertexBarrel_rmax-VertexBarrelLayer_rOffset" 
+        length="VertexBarrel_length"/>
       <comment> Define available modules </comment>
       <module name="Module1" vis="PurpleVis">
-        <frame width="15*mm"  height="10.0*mm" length="VertexBarrel_length" thickness="0.1 * mm" material="CarbonFiber_25percent" vis="BlueGreenVis" />
+        <frame width="15*mm"  height="10.0*mm" 
+          length="VertexBarrel_length" thickness="0.1 * mm" material="CarbonFiber_25percent" vis="BlueGreenVis" />
         <module_component name="silicon" 
           width="14.0*mm" length="VertexBarrel_length-0.1*mm" thickness="0.05*mm" material="Silicon" sensitive="true">
           <position z="-0.025*mm" y="0*mm"/>
         </module_component>
       </module>
-
       <module name="Module2">
         <frame width="15*mm"  height="10.0*mm" length="VertexBarrel_length" thickness="0.1 * mm" material="CarbonFiber_25percent" vis="BlueGreenVis" />
         <module_component name="silicon" 
@@ -77,7 +79,6 @@
           <position z="-0.025*mm" y="0*mm"/>
         </module_component>
       </module>
-
       <comment> Layers composed of many arrayed modules  </comment>
       <layer module="Module1" id="1" vis="VertexVis">
         <barrel_envelope 
@@ -95,12 +96,13 @@
         <rphi_layout phi_tilt="10.0*degree" nphi="VertexBarrel_NModules2" phi0="0.0" rc="VertexBarrel_rmin2" dr="0.0 * mm"/>
         <z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/>
       </layer>
-
     </detector>
 
-    <!--
-    <detector id="VertexEndcapP_ID" name="VertexTrackerEndcapP" type="ref_DiskTracker"
-      insideTrackingVolume="true" reflect="false" vis="AnlRed">
+    <detector id="VertexEndcapP_ID" 
+      name="VertexEndcapP" 
+      type="athena_SimpleDiskTracker"
+      insideTrackingVolume="true" 
+      reflect="false" vis="AnlRed">
       <position x="0" y="0" z="0"/>
       <layer id="1" vis="AnlOrange"
         inner_z="VertexTrackerEndcapP_zmin + 0*VertexTrackerEndcap_delta" 
@@ -114,27 +116,11 @@
         outer_r="VertexTrackerEndcapP_rmax">
         <slice material="Air" thickness="1.0*mm" vis="AnlOrange" />
       </layer>
-      <layer id="3" vis="AnlOrange"
-        inner_z="VertexTrackerEndcapP_zmin + 2*VertexTrackerEndcap_delta" 
-        inner_r="VertexTrackerEndcapP_rmin" 
-        outer_r="VertexTrackerEndcapP_rmax">
-        <slice material="Air" thickness="1.0*mm" vis="AnlOrange" />
-      </layer>
-      <layer id="4" vis="AnlOrange"
-        inner_z="VertexTrackerEndcapP_zmin + 3*VertexTrackerEndcap_delta" 
-        inner_r="VertexTrackerEndcapP_rmin" 
-        outer_r="VertexTrackerEndcapP_rmax">
-        <slice material="Air" thickness="1.0*mm" vis="AnlOrange" />
-      </layer>
-      <layer id="5" vis="AnlOrange"
-        inner_z="VertexTrackerEndcapP_zmin + 4*VertexTrackerEndcap_delta" 
-        inner_r="VertexTrackerEndcapP_rmin" 
-        outer_r="VertexTrackerEndcapP_rmax">
-        <slice material="Air" thickness="1.0*mm" vis="AnlOrange" />
-      </layer>
     </detector>
 
-    <detector id="VertexEndcapN_ID" name="VertexTrackerEndcapN" type="ref_DiskTracker"
+    <detector id="VertexEndcapN_ID" 
+      name="VertexEndcapN" 
+      type="ref_DiskTracker"
       insideTrackingVolume="true" reflect="true" vis="AnlRed">
       <position x="0" y="0" z="0"/>
       <layer id="1" vis="AnlOrange"
@@ -149,26 +135,7 @@
         outer_r="VertexTrackerEndcapN_rmax">
         <slice material="Air" thickness="1.0*mm" vis="AnlOrange" />
       </layer>
-      <layer id="3" vis="AnlOrange"
-        inner_z="VertexTrackerEndcapN_zmin + 2*VertexTrackerEndcap_delta" 
-        inner_r="VertexTrackerEndcapN_rmin" 
-        outer_r="VertexTrackerEndcapN_rmax">
-        <slice material="Air" thickness="1.0*mm" vis="AnlOrange" />
-      </layer>
-      <layer id="4" vis="AnlOrange"
-        inner_z="VertexTrackerEndcapN_zmin + 3*VertexTrackerEndcap_delta" 
-        inner_r="VertexTrackerEndcapN_rmin" 
-        outer_r="VertexTrackerEndcapN_rmax">
-        <slice material="Air" thickness="1.0*mm" vis="AnlOrange" />
-      </layer>
-      <layer id="5" vis="AnlOrange"
-        inner_z="VertexTrackerEndcapN_zmin + 4*VertexTrackerEndcap_delta" 
-        inner_r="VertexTrackerEndcapN_rmin" 
-        outer_r="VertexTrackerEndcapN_rmax">
-        <slice material="Air" thickness="1.0*mm" vis="AnlOrange" />
-      </layer>
     </detector>
-    -->
 
   </detectors>
 
diff --git a/src/SimpleDiskTracker_geo.cpp b/src/SimpleDiskTracker_geo.cpp
index 4431e881bc80625719582b7ce5cc8acd4a60c23b..54a9ea93d190250ee01d62a5b76941c4cd132369 100644
--- a/src/SimpleDiskTracker_geo.cpp
+++ b/src/SimpleDiskTracker_geo.cpp
@@ -15,6 +15,8 @@
 //
 //==========================================================================
 #include "DD4hep/DetFactoryHelper.h"
+#include "Acts/Plugins/DD4hep/ActsExtension.hpp"
+#include "Acts/Plugins/DD4hep/ConvertDD4hepMaterial.hpp"
 
 using namespace std;
 using namespace dd4hep;
@@ -32,6 +34,10 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
   int            l_num = 0;
   xml::Component pos   = x_det.position();
 
+  Acts::ActsExtension* detWorldExt = new Acts::ActsExtension();
+  detWorldExt->addType("endcap", "detector");
+  sdet.addExtension<Acts::ActsExtension>(detWorldExt);
+
   for (xml_coll_t i(x_det, _U(layer)); i; ++i, ++l_num) {
     xml_comp_t x_layer    = i;
     string     l_nam      = det_name + _toString(l_num, "_layer%d");
@@ -49,37 +55,52 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
     Tube   l_tub(rmin, rmax, layerWidth/2.0, 2 * M_PI);
     Volume l_vol(l_nam, l_tub, air);
     l_vol.setVisAttributes(description, x_layer.visStr());
+    DetElement layer;
+    if (!reflect) {
+      layer = DetElement(sdet, l_nam + "_pos", l_num);
+      pv = assembly.placeVolume(l_vol, Position(0, 0, zmin + layerWidth / 2.));
+      pv.addPhysVolID("layer", l_num);
+      pv.addPhysVolID("barrel", 3);
+      layer.setPlacement(pv);
+    } else {
+      layer = DetElement(sdet, l_nam + "_neg", l_num);
+      (sdet, l_nam + "_pos", l_num);
+      pv = assembly.placeVolume(l_vol, Transform3D(RotationY(M_PI), Position(0, 0, -zmin - layerWidth / 2)));
+      pv.addPhysVolID("layer", l_num);
+      pv.addPhysVolID("barrel", 2);
+      layer.setPlacement(pv);
+      // DetElement layerR = layer.clone(l_nam+"_neg");
+      // sdet.add(layerR.setPlacement(pv));
+    }
+    Acts::ActsExtension* layerExtension = new Acts::ActsExtension();
+    layerExtension->addType("layer", "layer");
+    //layerExtension->addType("axes", "definitions", "XZY");
+    layer.addExtension<Acts::ActsExtension>(layerExtension);
+
     for (xml_coll_t j(x_layer, _U(slice)); j; ++j, ++s_num) {
       xml_comp_t x_slice = j;
       double     thick   = x_slice.thickness();
       Material   mat     = description.material(x_slice.materialStr());
       string     s_nam   = l_nam + _toString(s_num, "_slice%d");
       Volume     s_vol(s_nam, Tube(rmin, rmax, thick/2.0), mat);
-
+      if(!reflect){
+        s_nam += "_pos";
+      } else {
+        s_nam += "_neg";
+      }
+      DetElement slice_de(layer, s_nam , s_num);
       if (x_slice.isSensitive()) {
         sens.setType("tracker");
         s_vol.setSensitiveDetector(sens);
+        Acts::ActsExtension* moduleExtension = new Acts::ActsExtension("XZY");
+        slice_de.addExtension<Acts::ActsExtension>(moduleExtension);
       }
       s_vol.setAttributes(description, x_slice.regionStr(), x_slice.limitsStr(), x_slice.visStr());
       pv = l_vol.placeVolume(s_vol, Position(0, 0, z - zmin - layerWidth / 2 + thick / 2));
       pv.addPhysVolID("slice", s_num);
+      slice_de.setPlacement(pv);
     }
 
-    if (!reflect) {
-      DetElement layer(sdet, l_nam + "_pos", l_num);
-      pv = assembly.placeVolume(l_vol, Position(0, 0, zmin + layerWidth / 2.));
-      pv.addPhysVolID("layer", l_num);
-      pv.addPhysVolID("barrel", 1);
-      layer.setPlacement(pv);
-    } else {
-      DetElement layer(sdet, l_nam + "_neg", l_num);
-      pv = assembly.placeVolume(l_vol, Transform3D(RotationY(M_PI), Position(0, 0, -zmin - layerWidth / 2)));
-      pv.addPhysVolID("layer", l_num);
-      pv.addPhysVolID("barrel", 1);
-      layer.setPlacement(pv);
-      // DetElement layerR = layer.clone(l_nam+"_neg");
-      // sdet.add(layerR.setPlacement(pv));
-    }
   }
   if (x_det.hasAttr(_U(combineHits))) {
     sdet.setCombineHits(x_det.attr<bool>(_U(combineHits)), sens);
@@ -90,5 +111,6 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
   return sdet;
 }
 
+DECLARE_DETELEMENT(athena_SimpleDiskTracker, create_detector)
 DECLARE_DETELEMENT(ref_DiskTracker, create_detector)
 DECLARE_DETELEMENT(ref_SolenoidEndcap, create_detector)
diff --git a/src/TrapEndcapTracker_geo.cpp b/src/TrapEndcapTracker_geo.cpp
index 30251db0fba60c0b87b6d004185269027b129be9..16f2e7138605743b4eefd98750dbc6baa3966f6a 100644
--- a/src/TrapEndcapTracker_geo.cpp
+++ b/src/TrapEndcapTracker_geo.cpp
@@ -16,127 +16,170 @@
 //==========================================================================
 #include <map>
 #include "DD4hep/DetFactoryHelper.h"
+#include "Acts/Plugins/DD4hep/ActsExtension.hpp"
+#include "Acts/Definitions/Units.hpp"
 
 using namespace std;
 using namespace dd4hep;
 using namespace dd4hep::detail;
 
-static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector sens) {
-    typedef vector<PlacedVolume> Placements;
-    xml_det_t x_det = e;
-    Material vacuum = description.vacuum();
-    int det_id = x_det.id();
-    string det_name = x_det.nameStr();
-    bool reflect = x_det.reflect(false);
-    DetElement sdet(det_name, det_id);
-    Assembly assembly(det_name);
-    // Volume      assembly    (det_name,Box(10000,10000,10000),vacuum);
-    Volume motherVol = description.pickMotherVolume(sdet);
-    int m_id = 0, c_id = 0, n_sensor = 0;
-    map<string, Volume> modules;
-    map<string, Placements> sensitives;
-    PlacedVolume pv;
-
-    assembly.setVisAttributes(description.invisible());
-    sens.setType("tracker");
-
-    for (xml_coll_t mi(x_det, _U(module)); mi; ++mi, ++m_id) {
-        xml_comp_t x_mod = mi;
-        string m_nam = x_mod.nameStr();
-        xml_comp_t trd = x_mod.trd();
-        double posY;
-        double x1 = trd.x1();
-        double x2 = trd.x2();
-        double z = trd.z();
-        double y1, y2, total_thickness = 0.;
-        xml_coll_t ci(x_mod, _U(module_component));
-        for (ci.reset(), total_thickness = 0.0; ci; ++ci) total_thickness += xml_comp_t(ci).thickness();
-
-        y1 = y2 = total_thickness / 2;
-        Volume m_volume(m_nam, Trapezoid(x1, x2, y1, y2, z), vacuum);
-        m_volume.setVisAttributes(description.visAttributes(x_mod.visStr()));
-
-        for (ci.reset(), n_sensor = 1, c_id = 0, posY = -y1; ci; ++ci, ++c_id) {
-            xml_comp_t c = ci;
-            double c_thick = c.thickness();
-            auto comp_x1   = getAttrOrDefault(c, _Unicode(x1), x1);
-            auto comp_x2   = getAttrOrDefault(c, _Unicode(x2), x2);
-            auto comp_height   = getAttrOrDefault(c, _Unicode(height), z);
-
-            Material c_mat = description.material(c.materialStr());
-            string c_name = _toString(c_id, "component%d");
-            Volume c_vol(c_name, Trapezoid(comp_x1, comp_x2, c_thick / 2e0, c_thick / 2e0, comp_height), c_mat);
-
-            c_vol.setVisAttributes(description.visAttributes(c.visStr()));
-            pv = m_volume.placeVolume(c_vol, Position(0, posY + c_thick / 2, 0));
-            if (c.isSensitive()) {
-                sdet.check(n_sensor > 2,
-                           "SiTrackerEndcap2::fromCompact: " + c_name + " Max of 2 modules allowed!");
-                pv.addPhysVolID("sensor", n_sensor);
-                c_vol.setSensitiveDetector(sens);
-                sensitives[m_nam].push_back(pv);
-                ++n_sensor;
-            }
-            posY += c_thick;
-        }
-        modules[m_nam] = m_volume;
+static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector sens)
+{
+  typedef vector<PlacedVolume> Placements;
+  xml_det_t                    x_det    = e;
+  Material                     vacuum   = description.vacuum();
+  int                          det_id   = x_det.id();
+  string                       det_name = x_det.nameStr();
+  bool                         reflect  = x_det.reflect(false);
+  DetElement                   sdet(det_name, det_id);
+  Assembly                     assembly(det_name);
+  // Volume      assembly    (det_name,Box(10000,10000,10000),vacuum);
+  Volume                  motherVol = description.pickMotherVolume(sdet);
+  int                     m_id = 0, c_id = 0, n_sensor = 0;
+  map<string, Volume>     modules;
+  map<string, Placements> sensitives;
+  PlacedVolume            pv;
+
+  Acts::ActsExtension* detWorldExt = new Acts::ActsExtension();
+  detWorldExt->addType("endcap", "detector");
+  sdet.addExtension<Acts::ActsExtension>(detWorldExt);
+
+  assembly.setVisAttributes(description.invisible());
+  sens.setType("tracker");
+
+  for (xml_coll_t mi(x_det, _U(module)); mi; ++mi, ++m_id) {
+    xml_comp_t x_mod = mi;
+    string     m_nam = x_mod.nameStr();
+    xml_comp_t trd   = x_mod.trd();
+    double     posY;
+    double     x1 = trd.x1();
+    double     x2 = trd.x2();
+    double     z  = trd.z();
+    double     y1, y2, total_thickness = 0.;
+    xml_coll_t ci(x_mod, _U(module_component));
+    for (ci.reset(), total_thickness = 0.0; ci; ++ci)
+      total_thickness += xml_comp_t(ci).thickness();
+
+    y1 = y2 = total_thickness / 2;
+    Volume m_volume(m_nam, Trapezoid(x1, x2, y1, y2, z), vacuum);
+    m_volume.setVisAttributes(description.visAttributes(x_mod.visStr()));
+
+    for (ci.reset(), n_sensor = 1, c_id = 0, posY = -y1; ci; ++ci, ++c_id) {
+      xml_comp_t c           = ci;
+      double     c_thick     = c.thickness();
+      auto       comp_x1     = getAttrOrDefault(c, _Unicode(x1), x1);
+      auto       comp_x2     = getAttrOrDefault(c, _Unicode(x2), x2);
+      auto       comp_height = getAttrOrDefault(c, _Unicode(height), z);
+
+      Material c_mat  = description.material(c.materialStr());
+      string   c_name = _toString(c_id, "component%d");
+      Volume   c_vol(c_name, Trapezoid(comp_x1, comp_x2, c_thick / 2e0, c_thick / 2e0, comp_height), c_mat);
+
+      c_vol.setVisAttributes(description.visAttributes(c.visStr()));
+      pv = m_volume.placeVolume(c_vol, Position(0, posY + c_thick / 2, 0));
+      if (c.isSensitive()) {
+        sdet.check(n_sensor > 2, "SiTrackerEndcap2::fromCompact: " + c_name + " Max of 2 modules allowed!");
+        pv.addPhysVolID("sensor", n_sensor);
+        c_vol.setSensitiveDetector(sens);
+        sensitives[m_nam].push_back(pv);
+        ++n_sensor;
+      }
+      posY += c_thick;
     }
+    modules[m_nam] = m_volume;
+  }
+
+  for (xml_coll_t li(x_det, _U(layer)); li; ++li) {
+    xml_comp_t x_layer(li);
+    int        l_id    = x_layer.id();
+    int        mod_num = 1;
+
+    //xml_comp_t l_env      = x_layer.child(_U(envelope));
+    string     layer_name = det_name + std::string("_layer") + std::to_string(l_id);
+
+    //std::string layer_vis    = l_env.attr<std::string>(_Unicode(vis));
+    //double      layer_rmin   = l_env.attr<double>(_Unicode(rmin));
+    //double      layer_rmax   = l_env.attr<double>(_Unicode(rmax));
+    //double      layer_length = l_env.attr<double>(_Unicode(length));
+    //double      layer_zstart = l_env.attr<double>(_Unicode(zstart));
+    //printout(INFO,"ROOTGDMLParse","+++ Read geometry from GDML file file:%s",input.c_str());
+    //std::cout << "SiTracker Endcap layer " << l_id << " zstart = " << layer_zstart/dd4hep::mm << "mm ( " << layer_length/dd4hep::mm << " mm thick )\n";
+
+    Assembly    layer_assembly(layer_name);
+    //assembly.placeVolume(layer_assembly);
+    //Tube       layer_tub(layer_rmin, layer_rmax, layer_length / 2);
+    //Volume     layer_vol(layer_name, layer_tub, air); // Create the layer envelope volume.
+    //layer_assembly.setVisAttributes(description.visAttributes(layer_vis));
+
+    PlacedVolume layer_pv;
+    if (reflect) {
+      layer_pv = assembly.placeVolume(layer_assembly, Position(0,0,-1.0e-9));//-layer_zstart-layer_length/2));
+      layer_pv.addPhysVolID("barrel", 3).addPhysVolID("layer", l_id);
+      layer_name += "_N";
+    } else {
+      layer_pv = assembly.placeVolume(layer_assembly);//, Position(0, 0, +layer_zstart + layer_length / 2));
+      layer_pv.addPhysVolID("barrel", 2).addPhysVolID("layer", l_id);
+      layer_name += "_P";
+    }
+    DetElement layer_element(sdet, layer_name, l_id);
+    layer_element.setPlacement(layer_pv);
+    Acts::ActsExtension* layerExtension = new Acts::ActsExtension();
+    layerExtension->addType("layer", "layer");
+    //layerExtension->addType("axes", "definitions", "XZY");
+    layer_element.addExtension<Acts::ActsExtension>(layerExtension);
+
+    for (xml_coll_t ri(x_layer, _U(ring)); ri; ++ri) {
+      xml_comp_t  x_ring   = ri;
+      double      r        = x_ring.r();
+      double      phi0     = x_ring.phi0(0);
+      double      zstart   = x_ring.zstart();
+      double      dz       = x_ring.dz(0);
+      int         nmodules = x_ring.nmodules();
+      string      m_nam    = x_ring.moduleStr();
+      Volume      m_vol    = modules[m_nam];
+      double      iphi     = 2 * M_PI / nmodules;
+      double      phi      = phi0;
+      Placements& sensVols = sensitives[m_nam];
+
+      for (int k = 0; k < nmodules; ++k) {
+        string     m_base = _toString(l_id, "layer%d") + _toString(mod_num, "_module%d");
+        double     x      = -r * std::cos(phi);
+        double     y      = -r * std::sin(phi);
+        DetElement module(sdet, m_base + "_pos", det_id);
+        pv = assembly.placeVolume(m_vol,
+                                  Transform3D(RotationZYX(0, -M_PI / 2 - phi, -M_PI / 2), Position(x, y, zstart + dz)));
+        pv.addPhysVolID("barrel", 1).addPhysVolID("layer", l_id).addPhysVolID("module", mod_num);
+        module.setPlacement(pv);
+        for (size_t ic = 0; ic < sensVols.size(); ++ic) {
+          PlacedVolume sens_pv = sensVols[ic];
+          DetElement   comp_elt(module, sens_pv.volume().name(), mod_num);
+          comp_elt.setPlacement(sens_pv);
+        }
 
-    for (xml_coll_t li(x_det, _U(layer)); li; ++li) {
-        xml_comp_t x_layer(li);
-        int l_id = x_layer.id();
-        int mod_num = 1;
-        for (xml_coll_t ri(x_layer, _U(ring)); ri; ++ri) {
-            xml_comp_t x_ring = ri;
-            double r = x_ring.r();
-            double phi0 = x_ring.phi0(0);
-            double zstart = x_ring.zstart();
-            double dz = x_ring.dz(0);
-            int nmodules = x_ring.nmodules();
-            string m_nam = x_ring.moduleStr();
-            Volume m_vol = modules[m_nam];
-            double iphi = 2 * M_PI / nmodules;
-            double phi = phi0;
-            Placements& sensVols = sensitives[m_nam];
-
-            for (int k = 0; k < nmodules; ++k) {
-                string m_base = _toString(l_id, "layer%d") + _toString(mod_num, "_module%d");
-                double x = -r * std::cos(phi);
-                double y = -r * std::sin(phi);
-                DetElement module(sdet, m_base + "_pos", det_id);
-                pv = assembly.placeVolume(m_vol, Transform3D(RotationZYX(0, -M_PI / 2 - phi, -M_PI / 2),
-                                                             Position(x, y, zstart + dz)));
-                pv.addPhysVolID("barrel", 1).addPhysVolID("layer", l_id).addPhysVolID("module", mod_num);
-                module.setPlacement(pv);
-                for (size_t ic = 0; ic < sensVols.size(); ++ic) {
-                    PlacedVolume sens_pv = sensVols[ic];
-                    DetElement comp_elt(module, sens_pv.volume().name(), mod_num);
-                    comp_elt.setPlacement(sens_pv);
-                }
-
-                if (reflect) {
-                    pv =
-                        assembly.placeVolume(m_vol, Transform3D(RotationZYX(M_PI, -M_PI / 2 - phi, -M_PI / 2),
-                                                                Position(x, y, -zstart - dz)));
-                    pv.addPhysVolID("barrel", 2).addPhysVolID("layer", l_id).addPhysVolID("module", mod_num);
-                    DetElement r_module(sdet, m_base + "_neg", det_id);
-                    r_module.setPlacement(pv);
-                    for (size_t ic = 0; ic < sensVols.size(); ++ic) {
-                        PlacedVolume sens_pv = sensVols[ic];
-                        DetElement comp_elt(r_module, sens_pv.volume().name(), mod_num);
-                        comp_elt.setPlacement(sens_pv);
-                    }
-                }
-                dz = -dz;
-                phi += iphi;
-                ++mod_num;
-            }
+        if (reflect) {
+          pv = assembly.placeVolume(
+              m_vol, Transform3D(RotationZYX(M_PI, -M_PI / 2 - phi, -M_PI / 2), Position(x, y, -zstart - dz)));
+          pv.addPhysVolID("barrel", 2).addPhysVolID("layer", l_id).addPhysVolID("module", mod_num);
+          DetElement r_module(sdet, m_base + "_neg", det_id);
+          r_module.setPlacement(pv);
+          for (size_t ic = 0; ic < sensVols.size(); ++ic) {
+            PlacedVolume sens_pv = sensVols[ic];
+            DetElement   comp_elt(r_module, sens_pv.volume().name(), mod_num);
+            comp_elt.setPlacement(sens_pv);
+            Acts::ActsExtension* moduleExtension = new Acts::ActsExtension("XZY");
+            comp_elt.addExtension<Acts::ActsExtension>(moduleExtension);
+          }
         }
+        dz = -dz;
+        phi += iphi;
+        ++mod_num;
+      }
     }
-    pv = motherVol.placeVolume(assembly);
-    pv.addPhysVolID("system", det_id);
-    sdet.setPlacement(pv);
-    return sdet;
+  }
+  pv = motherVol.placeVolume(assembly);
+  pv.addPhysVolID("system", det_id);
+  sdet.setPlacement(pv);
+  return sdet;
 }
 
 // clang-format off