diff --git a/athena.xml b/athena.xml
index fc0a1cddb37e1b558d54d404bb516c2ecbe07754..501f13a08867d91454fbc1349931e036bd028435 100644
--- a/athena.xml
+++ b/athena.xml
@@ -120,7 +120,7 @@
   <include ref="compact/ecal.xml"/>
   <include ref="compact/hcal.xml"/>
   <!--include ref="compact/ce_GEM.xml"/-->
-  <!--include ref="compact/gem_tracker_endcap.xml"/-->
+  <include ref="compact/gem_tracker_endcap.xml"/>
   <include ref="compact/ce_mrich.xml"/>
   <include ref="compact/tof_endcap.xml"/>
   <include ref="compact/forward_trd.xml"/>
diff --git a/compact/definitions.xml b/compact/definitions.xml
index 2d20bc8c98d8334b259cecb3000a23598df0dd68..06194a03274c2fc5c3798a8aebc9a9b5f6e1b8f7 100644
--- a/compact/definitions.xml
+++ b/compact/definitions.xml
@@ -428,6 +428,7 @@
     </comment>
     <constant name="BarrelTracking_length"       value="TrackerBarrelOuter_length"/>
     <constant name="BarrelTracking_rmax"         value="TrackerBarrel_rmax"/>
+    <constant name="BarrelTracking_zmax"         value="BarrelTracking_length/2.0"/>
 
     <constant name="BarrelTrackingAndPID_length" value="BarrelTracking_length "/>
     <constant name="BarrelTrackingAndPID_rmax"   value="BarrelTracking_rmax   + BarrelExtraPIDThickness"/>
diff --git a/compact/display.xml b/compact/display.xml
index 6275257860080700eff41f434cbd316c6daeb38b..d2a703955ee2eab5774d4dd3e7d2c11e0c7189fb 100644
--- a/compact/display.xml
+++ b/compact/display.xml
@@ -26,6 +26,8 @@
     <vis name="SiVertexVis" alpha="0.9" r="1" g="0" b="1" showDaughters="true" />
     <vis name="SiTrackerBarrelVis" alpha="0.5" r="0.0" g="0.0" b="1.0" showDaughters="true" visible="true"/>
     <vis name="SiTrackerVis" alpha="0.9" r="1.0" g="0.0" b="0.0" showDaughters="true" lineStyle="solid"  drawingStyle="solid" />
+
+    <vis name="TrackerSupportVis" alpha="1.0" r="1.0" g="0.0" b="0.0" visible="true"  showDaughters="false" />
     <vis name="TrackerLayerVis" alpha="0.9" r="0.0" g="1.0" b="0.0" visible="true"  showDaughters="true" />
 
     <vis name="SiTrackerBarrelVis1" alpha="0.8" r="0.0" g="0.9" b="0.9" showDaughters="true" />
diff --git a/compact/gem_tracker_endcap.xml b/compact/gem_tracker_endcap.xml
index 224e20ae4ba653cfe1b240c9a41eb22e7030d599..45c8a91ca94314fa4023715f86f47c8c99ffb1c7 100644
--- a/compact/gem_tracker_endcap.xml
+++ b/compact/gem_tracker_endcap.xml
@@ -3,9 +3,15 @@
   <comment> Endcap Tracker  </comment>        
 
   <define>
-    <constant name="GEMTrackerEndcap_zmin"            value="BarrelTracking_length/2.0"/>
+    <constant name="GEMTrackerEndcap_zmin"            value="BarrelTracking_zmax"/>
     <constant name="GEMTrackerEndcap_NLayers"         value="1"/>
     <constant name="GEMTrackerEndcapFoilOpeningAngle" value="30.1*degree"/>
+    <comment>
+      ____X2____ 
+      \        /
+       \      /    Y (=z for the trd)
+        \_X1_/ 
+    </comment>
     <constant name="GEMTrackerEndcapFoilX1"           value="43.0 * mm"/>
 
     <constant name="GEMTrackerEndcapLayer_thickness"  value="ForwardTrackingGEMLength/GEMTrackerEndcap_NLayers"/>
@@ -17,10 +23,9 @@
 
       // Frame parameters accoring to Kondo's sbsCrossSection.pdf file),
     <constant name="GEMTrackerEndcapFrame_thickness"     value="18.0 * mm"/>
-    <constant name="GEMTrackerEndcapFrameBotEdge_width"  value="30.0 * mm"/>
-    <constant name="GEMTrackerEndcapFrameTopEdge_width"  value="30.0 * mm"/>
+    <constant name="GEMTrackerEndcapFrameBotEdge_width"  value="10.0 * mm"/>
+    <constant name="GEMTrackerEndcapFrameTopEdge_width"  value="10.0 * mm"/>
     <constant name="GEMTrackerEndcapFrameSideEdge_width" value=" 8.0 * mm"/>
-
     <comment>
       From https://github.com/eic/EicToyModel/blob/master/source/eicroot/GemGeoParData.cxx
 
@@ -74,6 +79,16 @@
       reflect="false">
       <module name="GEMModule1" vis="AnlProcess_Blue">
         <trd x1="GEMTrackerEndcapFoilX1/2.0" x2="GEMTrackerEndcapFoilX2/2.0" z="GEMTrackerEndcapFoilY/2"/>
+        <frame material="G10" thickness="GEMTrackerEndcapFrame_thickness" vis="TrackerSupportVis">
+          <position x="0"  y="0" z="0" />
+          <trd x1="GEMTrackerEndcapFoilX1/2.0 - GEMTrackerEndcapFrameSideEdge_width/cos(GEMTrackerEndcapFoilOpeningAngle) 
+                                              + GEMTrackerEndcapFrameBotEdge_width*tan(GEMTrackerEndcapFoilOpeningAngle)"
+               x2="GEMTrackerEndcapFoilX2/2.0 - GEMTrackerEndcapFrameSideEdge_width/cos(GEMTrackerEndcapFoilOpeningAngle)
+                                              - GEMTrackerEndcapFrameTopEdge_width*tan(GEMTrackerEndcapFoilOpeningAngle)"
+            z="GEMTrackerEndcapFoilY/2    - (GEMTrackerEndcapFrameBotEdge_width +GEMTrackerEndcapFrameTopEdge_width)/2.0 ">
+            <position x="0" y="0" z="0" />
+          </trd>
+        </frame>
         <comment> Going from HV side to readout side</comment>
         <module_component thickness="0.127 * mm" material="Mylar"/>
         <module_component thickness="50.0*um" material="Kapton" name="entrance_window"/>
@@ -96,22 +111,37 @@
         <module_component thickness="200.0*um" material="Epoxy" sensitive="true" vis="AnlProcess_Blue"/>
       </module>
       <module name="GEMSupportModule1" vis="AnlProcess_Blue">
-        <trd x1="GEMTrackerEndcapFoilX2/2.0" x2="GEMTrackerEndcapFoilX1/2.0" z="GEMTrackerEndcapFrameBotEdge_width"/>
-        <module_component thickness="GEMTrackerEndcapFrame_thickness" material="Mylar"/>
+        <trd x1="GEMTrackerEndcapFoilX1/2.0" x2="GEMTrackerEndcapFoilX2/2.0" z="GEMTrackerEndcapFoilY/2"/>
+        <frame material="G10" thickness="GEMTrackerEndcapFrame_thickness" vis="TrackerSupportVis">
+          <position x="0"  y="0" z="0" />
+          <trd x1="GEMTrackerEndcapFoilX1/2.0 - GEMTrackerEndcapFrameSideEdge_width/cos(GEMTrackerEndcapFoilOpeningAngle) 
+                                              + GEMTrackerEndcapFrameBotEdge_width*tan(GEMTrackerEndcapFoilOpeningAngle)"
+               x2="GEMTrackerEndcapFoilX2/2.0 - GEMTrackerEndcapFrameSideEdge_width/cos(GEMTrackerEndcapFoilOpeningAngle)
+                                              - GEMTrackerEndcapFrameTopEdge_width*tan(GEMTrackerEndcapFoilOpeningAngle)"
+            z="GEMTrackerEndcapFoilY/2    - (GEMTrackerEndcapFrameBotEdge_width +GEMTrackerEndcapFrameTopEdge_width)/2.0 ">
+            <position x="0" y="0" z="0" />
+          </trd>
+        </frame>
       </module>
       <module name="GEMSupportModule2" vis="AnlProcess_Blue">
         <trd x1="GEMTrackerEndcapFrameSideEdge_width" x2="GEMTrackerEndcapFrameSideEdge_width" z="GEMTrackerEndcapFoilY/2"/>
         <module_component thickness="4.0*mm" material="Mylar"/>
       </module>
       <layer id="1" >
-        <ring vis="AnlRed"
+        <ring vis="AnlRed" module="GEMModule1"
           r="GEMTrackerEndcapFoil_rmin+GEMTrackerEndcapFoilY/2.0"
           zstart="GEMTrackerEndcap_zmin + 0.5*GEMTrackerEndcapLayer_thickness"
-          nmodules="12" dz="10 * mm" module="GEMModule1" />
-        <ring vis="AnlBlue" phi0="15.0*degree"
+          nmodules="12" dz="10 * mm" />
+        <!--
+        <ring vis="AnlRed" module="GEMSupportModule1" 
           r="GEMTrackerEndcapFoil_rmin+GEMTrackerEndcapFoilY/2.0"
           zstart="GEMTrackerEndcap_zmin + 0.5*GEMTrackerEndcapLayer_thickness"
-          nmodules="12" dz="0 * mm" module="GEMSupportModule2" />
+          nmodules="12" dz="10 * mm"/>
+        -->
+        <ring vis="AnlBlue" phi0="15.0*degree"  module="GEMSupportModule2"
+          r="GEMTrackerEndcapFoil_rmin+GEMTrackerEndcapFoilY/2.0"
+          zstart="GEMTrackerEndcap_zmin + 0.5*GEMTrackerEndcapLayer_thickness"
+          nmodules="12" dz="0 * mm" />
       </layer>
     </detector>
 
diff --git a/src/BarrelCalorimeter_geo.cpp b/src/BarrelCalorimeter_geo.cpp
index d640f01f3a2006911e4a4fe77510f2e9347b99f9..250178490e2e4a9c47cf589183efe92a5f8a64cf 100644
--- a/src/BarrelCalorimeter_geo.cpp
+++ b/src/BarrelCalorimeter_geo.cpp
@@ -12,7 +12,7 @@
 //==========================================================================
 //
 // Specialized generic detector constructor
-// 
+//
 //==========================================================================
 #include "DD4hep/DetFactoryHelper.h"
 #include "XML/Layering.h"
@@ -50,14 +50,14 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
 
   DetElement    stave_det("stave0",det_id);
   double dx = 0.0; //mod_z / std::sin(dphi); // dx per layer
-    
+
   // Compute the top and bottom face measurements.
   double trd_x2 = (2 * std::tan(hphi) * outer_r - dx)/2 - tolerance;
   double trd_x1 = (2 * std::tan(hphi) * inner_r + dx)/2 - tolerance;
   double trd_y1 = x_dim.z()/2 - tolerance;
   double trd_y2 = trd_y1;
   double trd_z  = mod_z/2 - tolerance;
-		
+
   // Create the trapezoid for the stave.
   Trapezoid trd(trd_x1, // Outer side, i.e. the "short" X side.
                 trd_x2, // Inner side, i.e. the "long"  X side.
@@ -112,10 +112,10 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
           slice.setPlacement(slice_phv);
           // Increment Z position of slice.
           s_pos_z += s_thick;
-                                        
+
           // Increment slice number.
           ++s_num;
-        }        
+        }
 
         // Set region, limitset, and vis of layer.
         layer.setAttributes(description,l_vol,x_layer.regionStr(),x_layer.limitsStr(),x_layer.visStr());
@@ -126,7 +126,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
         // Increment to next layer Z position.
         double xcut = l_thickness * tan_hphi;
         l_dim_x += xcut;
-        l_pos_z += l_thickness;          
+        l_pos_z += l_thickness;
         ++l_num;
       }
     }
diff --git a/src/TrapEndcapTracker_geo.cpp b/src/TrapEndcapTracker_geo.cpp
index 16f2e7138605743b4eefd98750dbc6baa3966f6a..dafc0c2e6ecabc59bdf089890dbf50db0e661b62 100644
--- a/src/TrapEndcapTracker_geo.cpp
+++ b/src/TrapEndcapTracker_geo.cpp
@@ -40,6 +40,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
   map<string, Placements> sensitives;
   PlacedVolume            pv;
 
+
   Acts::ActsExtension* detWorldExt = new Acts::ActsExtension();
   detWorldExt->addType("endcap", "detector");
   sdet.addExtension<Acts::ActsExtension>(detWorldExt);
@@ -51,6 +52,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
     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();
@@ -61,9 +63,41 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
       total_thickness += xml_comp_t(ci).thickness();
 
     y1 = y2 = total_thickness / 2;
-    Volume m_volume(m_nam, Trapezoid(x1, x2, y1, y2, z), vacuum);
+    Trapezoid m_solid(x1, x2, y1, y2, z);
+    Volume m_volume(m_nam, m_solid, vacuum);
     m_volume.setVisAttributes(description.visAttributes(x_mod.visStr()));
 
+    Solid  frame_s;
+    if(x_mod.hasChild("frame")){
+      // build frame from trd (assumed to be smaller)
+      xml_comp_t m_frame         = x_mod.child(_U(frame));
+      xml_comp_t f_pos           = m_frame.child(_U(position));
+      xml_comp_t frame_trd       = m_frame.trd();
+      double     frame_thickness = getAttrOrDefault(m_frame, _U(thickness), total_thickness);
+      double     frame_x1        = frame_trd.x1();
+      double     frame_x2        = frame_trd.x2();
+      double     frame_z         = frame_trd.z();
+      std::cout <<  "      x1  = " <<       x1 << "\n";
+      std::cout <<  "      x2  = " <<       x2 << "\n";
+      std::cout <<  "      z   = " <<       z << "\n";
+      std::cout <<  "frame_x1  = " << frame_x1 << "\n";
+      std::cout <<  "frame_x2  = " << frame_x2 << "\n";
+      std::cout <<  "frame_z   = " << frame_z << "\n";
+      // make the frame match the total thickness if thickness attribute is not given
+      Trapezoid        f_solid1(x1, x2,frame_thickness / 2.0, frame_thickness / 2.0, z);
+      Trapezoid        f_solid(frame_x1, frame_x2, frame_thickness / 2.0, frame_thickness / 2.0, frame_z) ;
+      SubtractionSolid frame_shape(f_solid1, f_solid);
+      frame_s = frame_shape;
+
+      Material f_mat  = description.material(m_frame.materialStr());
+      Volume f_vol(m_nam + "_frame", frame_shape, f_mat);
+      f_vol.setVisAttributes(description.visAttributes(m_frame.visStr()));
+
+      // figure out how to best place
+      pv = m_volume.placeVolume(f_vol, Position(f_pos.x(), f_pos.y(),  f_pos.z()));
+      std::cout << "Frame thickness : " << frame_thickness << "\n";
+    }
+
     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();
@@ -73,7 +107,13 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
 
       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);
+
+      Trapezoid comp_s1(comp_x1, comp_x2, c_thick / 2e0, c_thick / 2e0, comp_height);
+      Solid  comp_shape = comp_s1;
+      if(frame_s.isValid()) {
+        comp_shape = SubtractionSolid( comp_s1, frame_s); 
+      }
+      Volume   c_vol(c_name, comp_shape, c_mat);
 
       c_vol.setVisAttributes(description.visAttributes(c.visStr()));
       pv = m_volume.placeVolume(c_vol, Position(0, posY + c_thick / 2, 0));