diff --git a/config/gdml_hierarchy.py b/config/gdml_hierarchy.py
new file mode 100644
index 0000000..8058e0d
--- /dev/null
+++ b/config/gdml_hierarchy.py
@@ -0,0 +1,155 @@
+#!/usr/bin/env python3
+"""
+Script to extract and print the mother hierarchy of a geometry from a GDML file.
+Usage: python3 gdml_hierarchy.py <gdml_file> <volume_name>
+"""
+
+import xml.etree.ElementTree as ET
+import sys
+from collections import defaultdict
+
+def build_hierarchy(gdml_file):
+    """
+    Parse GDML file and build a mapping of:
+    - volume -> list of children (physvols inside it)
+    - volume -> mother (parent)
+    """
+    tree = ET.parse(gdml_file)
+    root = tree.getroot()
+    
+    # Dictionary to store children of each volume
+    children_map = defaultdict(list)
+    # Dictionary to store mother of each volume
+    mother_map = {}
+    # Dictionary to store volume info
+    volume_info = {}
+    
+    # Find structure section
+    structure = root.find('.//structure')
+    if structure is None:
+        print("Error: No structure section found in GDML")
+        return None, None, None
+    
+    # First pass: collect all volumes and physvols
+    for volume in structure.findall('volume'):
+        vol_name = volume.get('name')
+        volume_info[vol_name] = volume
+        
+        # Find all physical volumes inside this volume
+        for physvol in volume.findall('physvol'):
+            physvol_name = physvol.get('name')
+            volumeref = physvol.find('volumeref')
+            if volumeref is not None:
+                ref_vol = volumeref.get('ref')
+                children_map[vol_name].append((physvol_name, ref_vol))
+                mother_map[ref_vol] = vol_name
+    
+    return children_map, mother_map, volume_info
+
+def print_parents(volume_name, mother_map, indent=0):
+    """
+    Print the mother hierarchy (all parents up to root) of a volume.
+    """
+    prefix = "  " * indent
+    print(f"{prefix}{volume_name}")
+    
+    if volume_name in mother_map:
+        print_parents(mother_map[volume_name], mother_map, indent + 1)
+
+def print_children(volume_name, children_map, indent=0, max_depth=10):
+    """
+    Print the children hierarchy (all daughters) of a volume.
+    """
+    if indent > max_depth:
+        return
+    
+    prefix = "  " * indent
+    print(f"{prefix}{volume_name}")
+    
+    if volume_name in children_map:
+        for physvol_name, ref_vol in children_map[volume_name]:
+            print(f"{prefix}  └─ {physvol_name} (volume: {ref_vol})")
+            print_children(ref_vol, children_map, indent + 2, max_depth)
+
+def search_volume(query, volume_info):
+    """
+    Search for volumes matching a query (case-insensitive substring match).
+    """
+    matches = []
+    query_lower = query.lower()
+    for vol_name in volume_info.keys():
+        if query_lower in vol_name.lower():
+            matches.append(vol_name)
+    return sorted(matches)
+
+def main():
+    if len(sys.argv) < 2:
+        print("Usage: python3 gdml_hierarchy.py <gdml_file> [volume_name] [--children|--parents|--search]")
+        print("")
+        print("Options:")
+        print("  --children    Print all children (daughters) of the volume (default)")
+        print("  --parents     Print all parents (mothers) up to root")
+        print("  --search      Search for volumes matching the name pattern")
+        sys.exit(1)
+    
+    gdml_file = sys.argv[1]
+    
+    try:
+        children_map, mother_map, volume_info = build_hierarchy(gdml_file)
+    except FileNotFoundError:
+        print(f"Error: File not found: {gdml_file}")
+        sys.exit(1)
+    except ET.ParseError as e:
+        print(f"Error parsing GDML file: {e}")
+        sys.exit(1)
+    
+    if children_map is None:
+        sys.exit(1)
+    
+    # Parse arguments
+    if len(sys.argv) < 3:
+        print("Available volumes (first 20):")
+        for i, vol in enumerate(sorted(volume_info.keys())[:20]):
+            print(f"  {vol}")
+        print(f"  ... and {len(volume_info) - 20} more")
+        return
+    
+    volume_name = sys.argv[2]
+    mode = "children"
+    
+    if len(sys.argv) > 3:
+        if sys.argv[3] == "--parents":
+            mode = "parents"
+        elif sys.argv[3] == "--children":
+            mode = "children"
+        elif sys.argv[3] == "--search":
+            mode = "search"
+    
+    # Check if volume exists or search for it
+    if mode == "search" or volume_name not in volume_info:
+        matches = search_volume(volume_name, volume_info)
+        if not matches:
+            print(f"No volumes found matching: {volume_name}")
+            sys.exit(1)
+        
+        if len(matches) > 1:
+            print(f"Found {len(matches)} matching volumes:")
+            for match in matches[:20]:
+                print(f"  {match}")
+            if len(matches) > 20:
+                print(f"  ... and {len(matches) - 20} more")
+            return
+        
+        volume_name = matches[0]
+    
+    print(f"\nVolume: {volume_name}\n")
+    
+    if mode == "parents":
+        print("Mother hierarchy (up to root):")
+        print_parents(volume_name, mother_map)
+    else:  # children
+        print("Children hierarchy (daughters):")
+        print_children(volume_name, children_map, max_depth=6)
+
+if __name__ == "__main__":
+    main()
diff --git a/examples/extracted_MDC2020.fcl b/examples/extracted_MDC2020.fcl
index d1c6023..2c0177e 100644
--- a/examples/extracted_MDC2020.fcl
+++ b/examples/extracted_MDC2020.fcl
@@ -3,15 +3,48 @@
 #include "Offline/fcl/minimalMessageService.fcl"
 #include "Offline/fcl/standardProducers.fcl"
 #include "Offline/fcl/standardServices.fcl"
+#include "EventDisplay/fcl/prolog.fcl"
 #include "EventDisplay/fcl/extracted.fcl"
 
 
-physics.analyzers.Mu2eEventDisplay.gdmlname :"Offline/gen/gdml/mu2e_extracted_MDC2020.gdml"
-services.TFileService.fileName: "/dev/null"
-services.GeometryService.inputFile: "Offline/Mu2eG4/geom/geom_common_extracted_MDC2020.txt"
-physics.analyzers.Mu2eEventDisplay.geometry : "extracted_2020"
+services : @local::Services.Reco
+
+process_name : Nominal
 
+source : { module_type : RootInput }
+
+physics :
+{
+  analyzers : { @table::REveDis.analyzers}
+  producers : { @table::REveDis.producers }
+  filters : { @table::REveDis.filters }
+}
+
+# print statements
+physics.analyzers.Mu2eEventDisplay.diagLevel : 10
+
+# the path
 physics.EndPath  : [ @sequence::REveDis.seqBase]
 physics.REvePath : @local::REvePath
 physics.trigger_paths :  ["REvePath" ]
 physics.analyzers.Mu2eEventDisplay.SelectEvents : ["REvePath" ]
+
+
+source.inputCommands: ["keep *",
+    "drop mu2e::CaloClusters_CaloClusterFast_*_*"
+    ]
+
+# useless file name
+services.TFileService.fileName: "/dev/null"
+
+physics.analyzers.Mu2eEventDisplay.gdmlname :"Offline/gen/gdml/mu2e_extracted_MDC2020.gdml"
+services.TFileService.fileName: "/dev/null"
+services.GeometryService.inputFile: "Offline/Mu2eG4/geom/geom_common_extracted_MDC2020.txt"
+physics.analyzers.Mu2eEventDisplay.filler.addCrvClusters : true
+physics.analyzers.Mu2eEventDisplay.filler.addCrvRecoPulse : false
+physics.analyzers.Mu2eEventDisplay.filler.addCaloDigis : false
+physics.analyzers.Mu2eEventDisplay.filler.addClusters : false
+physics.analyzers.Mu2eEventDisplay.filler.addKalSeeds : true
+physics.analyzers.Mu2eEventDisplay.extracted : true
+physics.analyzers.Mu2eEventDisplay.specifyTag : false
+
diff --git a/examples/extracted_MDC2025.fcl b/examples/extracted_MDC2025.fcl
index 58f1115..f0f30e4 100644
--- a/examples/extracted_MDC2025.fcl
+++ b/examples/extracted_MDC2025.fcl
@@ -38,12 +38,14 @@ source.inputCommands: ["keep *",
 services.TFileService.fileName: "/dev/null"
 
 physics.analyzers.Mu2eEventDisplay.gdmlname :"Offline/gen/gdml/mu2e_extracted.gdml"
-physics.analyzers.Mu2eEventDisplay.geometry : "extracted_2025"
-physics.analyzers.Mu2eEventDisplay.filler.addCrvClusters : false
-physics.analyzers.Mu2eEventDisplay.filler.addCrvRecoPulse : true
-physics.analyzers.Mu2eEventDisplay.filler.addCaloDigis : true
-physics.analyzers.Mu2eEventDisplay.filler.addClusters : false
-physics.analyzers.Mu2eEventDisplay.filler.addKalSeeds : false
-physics.analyzers.Mu2eEventDisplay.extracted : true
 services.TFileService.fileName: "/dev/null"
 services.GeometryService.inputFile: "Offline/Mu2eG4/geom/geom_common_extracted.txt"
+physics.analyzers.Mu2eEventDisplay.filler.addCrvClusters : true
+physics.analyzers.Mu2eEventDisplay.filler.addCrvRecoPulse : false
+physics.analyzers.Mu2eEventDisplay.filler.addCaloDigis : false
+physics.analyzers.Mu2eEventDisplay.filler.addClusters : false
+physics.analyzers.Mu2eEventDisplay.filler.addKalSeeds : true
+physics.analyzers.Mu2eEventDisplay.extracted : true
+physics.analyzers.Mu2eEventDisplay.specifyTag : false
+
+
diff --git a/examples/nominal_MDC2020.fcl b/examples/nominal_MDC2020.fcl
index 154b329..5c1faf1 100644
--- a/examples/nominal_MDC2020.fcl
+++ b/examples/nominal_MDC2020.fcl
@@ -21,7 +21,6 @@ physics :
 
 # print statements
 physics.analyzers.Mu2eEventDisplay.diagLevel : 10
-physics.analyzers.Mu2eEventDisplay.geometry : "nominal_2020"
 
 # the path
 physics.EndPath  : [ @sequence::REveDis.seqBase]
diff --git a/examples/nominal_MDC2025.fcl b/examples/nominal_MDC2025.fcl
index dfbaa1a..1201081 100644
--- a/examples/nominal_MDC2025.fcl
+++ b/examples/nominal_MDC2025.fcl
@@ -21,7 +21,6 @@ physics :
 
 # print statements
 physics.analyzers.Mu2eEventDisplay.diagLevel : 10
-physics.analyzers.Mu2eEventDisplay.geometry : "nominal_2025"
 physics.analyzers.Mu2eEventDisplay.filler.addCrvClusters : true
 physics.analyzers.Mu2eEventDisplay.filler.addCrvRecoPulse : true
 physics.analyzers.Mu2eEventDisplay.filler.addSimParts : true
diff --git a/src/DataInterface.cc b/src/DataInterface.cc
index 2fd96ce..6c01d31 100644
--- a/src/DataInterface.cc
+++ b/src/DataInterface.cc
@@ -15,6 +15,17 @@ namespace REX = ROOT::Experimental;
 std::string drawfilename("EventDisplay/config/drawutils.txt");
 SimpleConfig drawconfig(drawfilename);
 
+// Load tracker geometry for CRV Z-shift calculation
+std::string trackerfilename("Offline/Mu2eG4/geom/tracker_v7.txt");
+SimpleConfig trackerconfig(trackerfilename);
+
+// Get CRV Z-shift for extracted geometry alignment
+double GetCrvExtractedZShift() {
+    // Tracker envelope half-length in mm, converted to cm
+    double tracker_half_length_cm = trackerconfig.getDouble("tracker.mother.halfLength")/10.0;
+    return tracker_half_length_cm;
+}
+
 
 /*
  * Adds reconstructed CaloDigi data products to the REve visualization scene.
@@ -717,6 +728,10 @@ void DataInterface::AddCrvInfo(REX::REveManager *&eveMng, bool firstLoop_,
                     double X_cm = pointmmTocm(pointInMu2e.x());
                     double Y_cm = pointmmTocm(pointInMu2e.y());
                     double Z_cm = pointmmTocm(pointInMu2e.z());
+                    // For extracted geometry, apply Z-shift to align bars with display coordinate frame
+                    if(extracted) {
+                        Z_cm += GetCrvExtractedZShift();
+                    }
                     
                     // Handle geometry errors that cause Seg Faults
                     try {
@@ -816,7 +831,12 @@ void DataInterface::AddCrvInfo(REX::REveManager *&eveMng, bool firstLoop_,
                 
                 // B. Add individual Reco Pulse Point with its own label
                 auto ps1 = new REX::REvePointSet(pulsetitle_c, pulsetitle_c, 1);
-                ps1->SetNextPoint(pointmmTocm(pointInMu2e.x()), pointmmTocm(pointInMu2e.y()), pointmmTocm(pointInMu2e.z()));
+                // For extracted geometry, apply Z-shift to align CRV data with geometry display
+                double hit_z = pointmmTocm(pointInMu2e.z());
+                if(extracted) {
+                    hit_z += GetCrvExtractedZShift();
+                }
+                ps1->SetNextPoint(pointmmTocm(pointInMu2e.x()), pointmmTocm(pointInMu2e.y()), hit_z);
                 ps1->SetMarkerColor(hit_color); 
                 ps1->SetMarkerStyle(DataInterface::mstyle);
                 ps1->SetMarkerSize(DataInterface::msize);
@@ -913,7 +933,12 @@ void DataInterface::AddCrvClusters(REX::REveManager *&eveMng, bool firstLoop_,
             auto ps1 = new REX::REvePointSet(crvtitle.c_str(), crvtitle.c_str(), 0);
             
             CLHEP::Hep3Vector pointInMu2e = det->toDetector(crvclu.GetAvgHitPos());
-            ps1->SetNextPoint(pointmmTocm(pointInMu2e.x()), pointmmTocm(pointInMu2e.y()) , pointmmTocm(pointInMu2e.z()));
+            // For extracted geometry, apply Z-shift to align CRV cluster points with geometry display
+            double cluster_z = pointmmTocm(pointInMu2e.z());
+            if(extracted) {
+                cluster_z += GetCrvExtractedZShift();
+            }
+            ps1->SetNextPoint(pointmmTocm(pointInMu2e.x()), pointmmTocm(pointInMu2e.y()) , cluster_z);
             
             std::set<mu2e::CRSScintillatorBarIndex> drawn_bars; 
 
@@ -949,11 +974,15 @@ void DataInterface::AddCrvClusters(REX::REveManager *&eveMng, bool firstLoop_,
                     double X_cm = pointmmTocm(bar_center_mu2e.x());
                     double Y_cm = pointmmTocm(bar_center_mu2e.y());
                     double Z_cm = pointmmTocm(bar_center_mu2e.z());
+                    // For extracted geometry, apply Z-shift to align bars with display coordinate frame
+                    if(extracted) {
+                        Z_cm += GetCrvExtractedZShift();
+                    }
 
                     double length = pointmmTocm(crvCounter.getHalfLength());
                     double width = pointmmTocm(crvCounter.getHalfWidth());
                     double height = pointmmTocm(crvCounter.getHalfThickness());
-
+  
                     std::string pulsetitle = " Crv Bar Hit for tag : "
                                             + names[i] +  '\n'
                                             + "Bar ID: " + std::to_string(crvBarIndex.asInt()) +  '\n'
diff --git a/src/MainWindow.cc b/src/MainWindow.cc
index cd45163..48a779a 100644
--- a/src/MainWindow.cc
+++ b/src/MainWindow.cc
@@ -1,5 +1,8 @@
 #include "Offline/ConfigTools/inc/SimpleConfig.hh"
 #include "EventDisplay/inc/MainWindow.hh"
+#include "Offline/GeometryService/inc/GeomHandle.hh"
+#include "Offline/GeometryService/inc/DetectorSystem.hh"
+#include "Offline/CosmicRayShieldGeom/inc/CosmicRayShield.hh"
 
 namespace REX = ROOT::Experimental;
 using namespace std;
@@ -18,6 +21,8 @@ double FrontTracker_gdmltag;
 std::string drawoptfilename("EventDisplay/config/drawutils.txt");
 SimpleConfig drawconfigf(drawoptfilename);
 
+
+
 void MainWindow::makeEveGeoShape(TGeoNode* n, REX::REveTrans& trans, REX::REveElement* holder, int val, bool crystal1, bool crystal2, std::string name, int color)
 {
   bool isMother = name.find("ProductionTargetMother") != string::npos;
@@ -189,6 +194,9 @@ void MainWindow::getOffsets(TGeoNode* n,const std::string& str, REX::REveTrans&
 }
 
 void MainWindow::GeomDrawerSol(TGeoNode* node, REX::REveTrans& trans, REX::REveElement* beamlineholder, int maxlevel, int level, GeomOptions geomOpt, std::vector<std::pair<std::string, std::vector<float>>>& offsets) {
+  // Note: Solenoid component positions (PS, TS1, TS5, DS3, DS2) still obtained from offsets
+  // as they require hierarchical transformations from the geometry tree.
+  // CRV coordinates could use GeometryService if needed for display alignment.
   double x_ps = 0; double y_ps=0; double z_ps=0;
   double x_ts1 = 0; double y_ts1=0; double z_ts1=0;
   double x_ts5 = 0; double y_ts5=0; double z_ts5=0;
@@ -398,7 +406,7 @@ void MainWindow::GeomDrawerNominal(TGeoNode* node, REX::REveTrans& trans, REX::R
     double x_hall = 0;double x_world = 0;
     double y_hall = 0;double y_world = 0;
     double z_hall = 0;double z_world = 0;
-    double x_crv = 0 ; double y_crv = 0 ; double z_crv = 0; // double z_crv_u = 0;  double z_crv_d = 0;
+    double x_crv = 0 ; double y_crv = 0 ; double z_crv = 0;
     x_trk = 0;y_trk = 0;z_trk = 0;
     double x_fp0 = 0; double y_fp0 = 0; double z_fp0 = 0;
     double x_fp1 = 0; double y_fp1 = 0; double z_fp1 = 0;
@@ -551,13 +559,22 @@ void MainWindow::GeomDrawerNominal(TGeoNode* node, REX::REveTrans& trans, REX::R
 }
 
 void MainWindow::GeomDrawerExtracted(TGeoNode* node, REX::REveTrans& trans, REX::REveElement* beamlineholder, REX::REveElement* trackerholder, REX::REveElement* caloholder, REX::REveElement* crystalsholder, REX::REveElement* crvholder, REX::REveElement* targetholder, int maxlevel, int level, GeomOptions geomOpt, std::vector<std::pair<std::string, std::vector<float>>>& offsets){
-    
-    //positions of components for DS component offsets
-    double x_hall = 0;double x_world = 0;
-    double y_hall = 0;double y_world = 0;
-    double z_hall = 0;double z_world = 0;
-    double x_crvex = 0; double y_crvex = 0;  double z_crvex = 0; double x_crvt1 = 0; double y_crvt1 = 0;  double z_crvt1 = 0;     
+    // Load tracker geometry for CRV Z-shift calculation in extracted mode
+    std::string trackerfilename("Offline/Mu2eG4/geom/tracker_v7.txt");
+    SimpleConfig trackerconfig(trackerfilename);
+
+    // Get CRV Z-shift for extracted geometry alignment
+    double tracker_half_length_cm = trackerconfig.getDouble("tracker.mother.halfLength")/10.0;
+    double x_world = 0;
+    double y_world = 0;
+    double z_world = 0;
+    double x_hall = 0;
+    double y_hall = 0;
+    double z_hall = 0;
+    double x_crvex = 0; double y_crvex = 0;  double z_crvex = 0; 
+    double x_crvt1 = 0; double y_crvt1 = 0;  double z_crvt1 = 0;     
     double x_crvt2 = 0; double y_crvt2 = 0;  double z_crvt2 = 0;
+    // Note: cannot use GeomService due to positionining of this in separate thread and initialization order of geometry. Instead, get positions from offsets and apply appropriate shifts to align for display.
     for(unsigned int i = 0; i < offsets.size(); i++){
       if(offsets[i].first.find("World") != string::npos){
         x_world = offsets[i].second[0];
@@ -570,6 +587,26 @@ void MainWindow::GeomDrawerExtracted(TGeoNode* node, REX::REveTrans& trans, REX:
         y_hall = y_world + offsets[i].second[1];
         z_hall = z_world + offsets[i].second[2];
       }
+      if(offsets[i].first.find("CRSmother_CRV_EX") != string::npos)       {
+          x_crvex = x_hall + offsets[i].second[0];
+          y_crvex = y_hall + offsets[i].second[1];
+          z_crvex = z_hall + offsets[i].second[2];
+      }
+      if(offsets[i].first.find("CRSmother_CRV_T1") != string::npos)       {
+          x_crvt1 = x_hall + offsets[i].second[0];
+          y_crvt1 = y_hall + offsets[i].second[1];
+          z_crvt1 = z_hall + offsets[i].second[2];
+      }
+      if(offsets[i].first.find("CRSmother_CRV_T2") != string::npos)       {
+          x_crvt2 = x_hall + offsets[i].second[0];
+          y_crvt2 = y_hall + offsets[i].second[1];
+          z_crvt2 = z_hall + offsets[i].second[2];
+      }
+    }
+    
+    // Get detector positions from offsets
+    double x_ds3 = 0;
+    for(unsigned int i = 0; i < offsets.size(); i++){
       if(offsets[i].first.find("garageFakeDS3Vacuum") != string::npos)      {
         x_ds3 = x_hall + offsets[i].second[0];
         y_ds3 = y_hall + offsets[i].second[1];
@@ -595,21 +632,6 @@ void MainWindow::GeomDrawerExtracted(TGeoNode* node, REX::REveTrans& trans, REX:
         y_d1 = y_cal + offsets[i].second[1];
         z_d1 = z_cal + offsets[i].second[2];
       }
-      if(offsets[i].first.find("CRSmother_CRV_EX") != string::npos)       {
-          x_crvex = offsets[i].second[0]  + x_hall ;
-          y_crvex =  offsets[i].second[1] + y_hall;
-          z_crvex = offsets[i].second[2]  + z_hall ;
-      }
-      if(offsets[i].first.find("CRSmother_CRV_T1") != string::npos)       {
-          x_crvt1 = offsets[i].second[0] + x_hall ;
-          y_crvt1 = offsets[i].second[1] + y_hall ;
-          z_crvt1 = offsets[i].second[2] + z_hall ;
-      }
-      if(offsets[i].first.find("CRSmother_CRV_T2") != string::npos)       {
-          x_crvt2 = offsets[i].second[0] + x_hall ;
-          y_crvt2 = offsets[i].second[1] + y_hall ;
-          z_crvt2 = offsets[i].second[2] + z_hall ;
-        }
     }
     std::vector<double> shift;
 
@@ -633,7 +655,7 @@ void MainWindow::GeomDrawerExtracted(TGeoNode* node, REX::REveTrans& trans, REX:
         for(auto& i: substrings_disk){
           shift.at(0) = x_cal - x_trk;
           shift.at(1) = y_cal - y_trk;
-          shift.at(2) = z_cal - z_trk;
+          shift.at(2) = z_cal - z_trk ;
           showNodesByName(node,i,kFALSE, 0, trans, caloholder, maxlevel, level, true, false, shift, false, false, drawconfigf.getInt("CALColor") );
         }
       if(geomOpt.showCaloCrystals){
@@ -641,7 +663,7 @@ void MainWindow::GeomDrawerExtracted(TGeoNode* node, REX::REveTrans& trans, REX:
         for(auto& i: substrings_crystals){
           shift.at(0) = x_cal - x_trk;
           shift.at(1) = y_cal - y_trk;
-          shift.at(2) = z_cal - z_trk;
+          shift.at(2) = z_cal - z_trk  ;
           showNodesByName(node,i,kFALSE, 0, trans, crystalsholder, maxlevel, level, true, true, shift, false, false, drawconfigf.getInt("CALColor"));
         }
       }
@@ -649,9 +671,9 @@ void MainWindow::GeomDrawerExtracted(TGeoNode* node, REX::REveTrans& trans, REX:
   if(geomOpt.showCrv and geomOpt.extracted){
 
     static std::vector <std::string> substrings_ex {"CRSmotherLayer_CRV_EX"};
-    shift.at(0) = x_crvex - x_trk;
+    shift.at(0) = x_crvex - x_trk  ;
     shift.at(1) = y_crvex - y_trk;
-    shift.at(2) = z_crvex - z_trk;
+    shift.at(2) = z_crvex - z_trk + tracker_half_length_cm;
 
     for(auto& i: substrings_ex){
       showNodesByName(node,i,kFALSE, 0, trans, crvholder, maxlevel, level,  false, false, shift, false, true, drawconfigf.getInt("CrvColor"));
@@ -660,7 +682,7 @@ void MainWindow::GeomDrawerExtracted(TGeoNode* node, REX::REveTrans& trans, REX:
     static std::vector <std::string> substrings_t1  {"CRSmotherLayer_CRV_T1"};
     shift.at(0) = x_crvt1 - x_trk;
     shift.at(1) = y_crvt1 - y_trk;
-    shift.at(2) = z_crvt1 - z_trk;
+    shift.at(2) = z_crvt1 - z_trk + tracker_half_length_cm;
 
     for(auto& i: substrings_t1){
       showNodesByName(node,i,kFALSE, 0, trans, crvholder, maxlevel, level,  false, false, shift, false, true, drawconfigf.getInt("CrvColor"));
@@ -669,7 +691,7 @@ void MainWindow::GeomDrawerExtracted(TGeoNode* node, REX::REveTrans& trans, REX:
     static std::vector <std::string> substrings_t2  {"CRSmotherLayer_CRV_T2"};
     shift.at(0) = x_crvt2 - x_trk;
     shift.at(1) = y_crvt2 - y_trk;
-    shift.at(2) = z_crvt2 - z_trk;
+    shift.at(2) = z_crvt2 - z_trk + tracker_half_length_cm;
 
     for(auto& i: substrings_t2){
       showNodesByName(node,i,kFALSE, 0, trans, crvholder, maxlevel, level,  false, false, shift, false, true, drawconfigf.getInt("CrvColor"));
