diff --git a/.gitignore b/.gitignore
index da6391316808d8e158a2094110a104522dfff3c8..21b41f3cb84630ce6cf7704f4fa3afae3a2fd63e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,26 @@
+!*.png
+
+*.prim
+*/*.eps
+*/*/*.eps
+*/*/*.png
+*/*/*.pdf
+*.root
 build/*
+.DAWN*
+*/*.pyc
+**.pyc
+
+images/*
+doc/*
+
+accelerator
+eic
+
+*.swp
+
+fieldmaps
 
+manifest.txt
+acts.txt
+acts2.txt
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ae9ae6616773957efaab97669091efc590761334..7d01eb7974054b686cf138e0ced1b6bfcfdf1e89 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -114,7 +114,7 @@ dump_geometry:
    - echo "dumping geometry"
    - mkdir -p geo
    - dd_web_display --output geo/detector_geo_full.root eic_ip6.xml
-   - echo "Geometry viewer at https://eic.phy.anl.gov/geoviewer/index.htm?file=https://eicweb.phy.anl.gov/EIC/detectors/ip6/-/jobs/${CI_JOB_ID}/artifacts/raw/geo/detector_geo_full.root?job=dump_geometry&item=default;1&opt=clipxyz;transp30;zoom75;ROTY290;ROTZ350;trz0;trr0;ctrl;all&"
+   - echo "Geometry viewer at https://eic.phy.anl.gov/geoviewer/index.htm?file=https://eicweb.phy.anl.gov/EIC/detectors/ip6/-/jobs/${CI_JOB_ID}/artifacts/raw/geo/detector_geo_full.root?job=dump_geometry&item=default;1&opt=transp30;zoom75;ROTY290;ROTZ350;trz0;trr0;ctrl;all&"
 
 xmllint:
   stage: test
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a5e639ed7fe451dbe7b92a3973526d985e5363d4..83cdee5db2b2452993934c7a785a4176d86fae41 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -17,6 +17,7 @@ dd4hep_configure_output()
 
 dd4hep_add_plugin(${a_lib_name} 
   SOURCES 
+  src/CylindricalDipoleMagnet_geo.cpp
   src/B0Tracker_geo.cpp
   src/B0Preshower_geo.cpp
   src/DD4hep_GdmlDetector.cpp
diff --git a/detector_geometry.root b/detector_geometry.root
deleted file mode 100644
index 4d855d89bef624a76442d6a4a0692583635bd092..0000000000000000000000000000000000000000
Binary files a/detector_geometry.root and /dev/null differ
diff --git a/eic_ip6.xml b/eic_ip6.xml
index c3af6d9cd00a5818fe346991c801393846cc26f2..d7105ea7560bf7999a90af588021bf6b341b9fac 100644
--- a/eic_ip6.xml
+++ b/eic_ip6.xml
@@ -69,6 +69,7 @@
   </includes>
 
   <display>
+  <include ref="ip6/ip6_colors.xml" />
   <include ref="ip6/ip6_display.xml" />
   </display>
 
@@ -80,10 +81,16 @@
   <include ref="ip6/far_forward_offM_tracker.xml"/>
   <include ref="ip6/far_forward_detectors.xml"/>
   <include ref="ip6/roman_pots_eRD24_design.xml"/>
-  <!--<include ref="ip6/beam_orbit_tracker.xml"/>-->
+  <!--
+    Old BOM not used
+  <include ref="ip6/beam_orbit_tracker.xml"/>
+  -->
   <include ref="ip6/inner_vacuum_FF_magnets.xml"/>
 
-  <!--include ref="ip6/magnets.xml" /-->
+  <!--
+    Magnet file not used for some reason
+  <include ref="ip6/magnets.xml" />
+  -->
   <fields>
     <field name="B0PF_Magnet" type="MultipoleMagnet">
       <position x="B0PF_XPosition" y="0" z="B0PF_CenterPosition"/>
@@ -141,50 +148,6 @@
       <coefficient coefficient="B2PF_Bmax" skew="0.0*tesla"/>
       <coefficient coefficient="B2PF_GradientMax" skew="0.0*tesla/cm"/>
     </field>
-    <!--
-    <field name="QPFC1_Magnet" type="MultipoleMagnet">
-      <position x="QPFC1_XPosition" y="0" z="QPFC1_CenterPosition"/>
-      <rotation x="0" y="QPFC1_RotationAngle" z="pi/2.0"/>
-      <shape type="Tube" rmin="0.0" rmax="QPFC1_InnerRadius" dz="QPFC1_Length*0.5"/>
-      <coefficient coefficient="QPFC1_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="QPFC1_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="QPFC2_Magnet" type="MultipoleMagnet">
-      <position x="QPFC2_XPosition" y="0" z="QPFC2_CenterPosition"/>
-      <rotation x="0" y="QPFC2_RotationAngle" z="pi/2.0"/>
-      <shape type="Tube" rmin="0.0" rmax="QPFC2_InnerRadius" dz="QPFC2_Length*0.5"/>
-      <coefficient coefficient="QPFC2_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="QPFC2_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="QPFC3_Magnet" type="MultipoleMagnet">
-      <position x="QPFC3_XPosition" y="0" z="QPFC3_CenterPosition"/>
-      <rotation x="0" y="QPFC3_RotationAngle" z="pi/2.0"/>
-      <shape type="Tube" rmin="0.0" rmax="QPFC3_InnerRadius" dz="QPFC3_Length*0.5"/>
-      <coefficient coefficient="QPFC3_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="QPFC3_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="QPFC4_Magnet" type="MultipoleMagnet">
-      <position x="QPFC4_XPosition" y="0" z="QPFC4_CenterPosition"/>
-      <rotation x="0" y="QPFC4_RotationAngle" z="pi/2.0"/>
-      <shape type="Tube" rmin="0.0" rmax="QPFC4_InnerRadius" dz="QPFC4_Length*0.5"/>
-      <coefficient coefficient="QPFC4_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="QPFC4_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="QPFR1_Magnet" type="MultipoleMagnet">
-      <position x="QPFR1_XPosition" y="0" z="QPFR1_CenterPosition"/>
-      <rotation x="0" y="QPFR1_RotationAngle" z="pi/2.0"/>
-      <shape type="Tube" rmin="0.0" rmax="QPFR1_InnerRadius" dz="QPFR1_Length*0.5"/>
-      <coefficient coefficient="QPFR1_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="QPFR1_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="BPFR1_Magnet" type="MultipoleMagnet">
-      <position x="BPFR1_XPosition" y="0" z="BPFR1_CenterPosition"/>
-      <rotation x="0" y="BPFR1_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="BPFR1_InnerRadius" dz="BPFR1_Length*0.5"/>
-      <coefficient coefficient="BPFR1_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="BPFR1_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    -->
   </fields>
 
 </lccdd>
diff --git a/ip6/B0_preshower.xml b/ip6/B0_preshower.xml
index c21691b68293014a301f93f809658343e13fa43e..80cbb368e2e74ed7741d392e163d9b0446466f2f 100644
--- a/ip6/B0_preshower.xml
+++ b/ip6/B0_preshower.xml
@@ -17,9 +17,9 @@
     <comment>
       This angle is the angle subtended in phi for each trap segment.
     </comment>
-    <constant name="B0PreshowerModOpeningAngle"         value="30.0*degree"/>
-    <constant name="B0PreshowerLayer_nModules"          value="12"/>
-    <constant name="B0PreshowerLayerSmallMod_nModules"  value="2"/>
+    <constant name="B0PreshowerLayer_nModules"          value="36"/>
+    <constant name="B0PreshowerLayerSmallMod_nModules"  value="B0PreshowerLayer_nModules/6"/>
+    <constant name="B0PreshowerModOpeningAngle"         value="360.0*degree/B0PreshowerLayer_nModules"/>
     <constant name="B0PreshowerLayerBigMod_nModules"    value="B0PreshowerLayer_nModules - B0PreshowerLayerSmallMod_nModules"/>
     <constant name="B0PreshowerLayerBigMod_phi0"        value="(B0PreshowerLayerSmallMod_nModules/2.0 + 0.5)*B0PreshowerModOpeningAngle + Pi"/>
     <constant name="B0PreshowerLayerSmallMod_phi0"        value="(B0PreshowerLayerSmallMod_nModules/2.0 - 0.5)*B0PreshowerModOpeningAngle + Pi"/>
@@ -43,64 +43,32 @@
       name="B0Preshower"
       type="ip6_B0Preshower"
       readout="B0PreshowerHits"
-      vis="AnlRed"
+      vis="FFPreVis"
       reflect="false">
       <position x="B0PreshowerCenter_xpos" y="0" z="B0PreshowerCenter_zpos"/>
       <rotation x="0*rad" y="B0Preshower_rotation" z="0*rad"/>
-      <module name="Module1" vis="AnlProcess_Blue">
+      <module name="Module1" vis="FFPreModuleVis">
+        <comment>The module is constructed back-to-front</comment>
         <trd x1="B0PreshowerMod1_x1/2.0" x2="B0PreshowerMod1_x2/2.0" z="B0PreshowerMod1_y/2"/>
-        <module_component material="PbWO4"        thickness="1.0*cm" vis="AnlYellow"/>
-        <module_component material="SiliconOxide" thickness="0.3*mm" sensitive="true"/>
+        <module_component material="SiliconOxide" thickness="0.3*mm" vis="FFPreReadoutVis" sensitive="true"/>
+        <module_component material="Lead"         thickness="1.0*cm" vis="FFPreRadiatorVis"/>
       </module>
-      <module name="SmallModule1" vis="AnlProcess_Blue">
+      <module name="SmallModule1" vis="FFPreModuleVis">
         <trd x1="B0PreshowerMod1_x1/2.0" x2="B0PreshowerMod1Small_x2/2.0" z="B0PreshowerMod1Small_y/2"/>
-        <module_component material="PbWO4"        thickness="1.0*cm" vis="AnlYellow"/>
-        <module_component material="SiliconOxide" thickness="0.3*mm" sensitive="true"/>
+        <module_component material="SiliconOxide" thickness="0.3*mm" vis="FFPreReadoutVis" sensitive="true"/>
+        <module_component material="Lead"         thickness="1.0*cm" vis="FFPreRadiatorVis"/>
       </module>
       <layer id="1">
-        <envelope  vis="AnlRed" rmin="B0PreshowerMod1Inner_r" rmax="B0PreshowerMod1Outer_r" length="1.0*cm" 
+        <envelope  vis="FFPreLayerVis" rmin="B0PreshowerMod1Inner_r" rmax="B0PreshowerMod1Outer_r" length="1.0*cm" 
           zstart="-B0Preshower_length/2.0" />
-        <ring vis="AnlRed" phi0="B0PreshowerLayerBigMod_phi0" dphi="B0PreshowerModOpeningAngle" 
+        <ring phi0="B0PreshowerLayerBigMod_phi0" dphi="B0PreshowerModOpeningAngle" 
           r="B0PreshowerMod1Inner_r+B0PreshowerMod1_y/2.0" zstart="0.0*mm" 
-          nmodules="10" dz="0 * mm" module="Module1" />
-        <ring vis="AnlRed" phi0="-B0PreshowerLayerSmallMod_phi0" dphi="B0PreshowerModOpeningAngle"
+          nmodules="B0PreshowerLayerBigMod_nModules" dz="0 * mm" module="Module1" />
+        <ring phi0="-B0PreshowerLayerSmallMod_phi0" dphi="B0PreshowerModOpeningAngle"
           r="B0PreshowerMod1Inner_r+B0PreshowerMod1Small_y/2.0" zstart="0.0*mm" 
           nmodules="B0PreshowerLayerSmallMod_nModules" dz="0 * mm" module="SmallModule1" />
       </layer>
     </detector>
-  <!--
-    <detector 
-      id="B0Preshower_Station_1_ID"
-      name="B0Preshower_Station_1"
-      readout="B0PreshowerHits" 
-      type="ip6_B0Preshower"
-      insideTrackingVolume="true"
-      reflect="false"
-      vis="AnlRed">
-      <position x="B0Preshower_Station_1_xpos" y="0" z="B0Preshower_Station_1_zpos"/>
-      <rotation x="0*rad" y="B0Tracker_rotation" z="0*rad"/>
-      <layer id="1" vis="AnlBlue"
-        inner_z="1.0*cm"
-        inner_r="3.5*cm" 
-        outer_r="15.0*cm"
-        phi1="0.2*Pi*rad"
-        phi2="-0.2*Pi*rad">
-      <slice material="PbWO4"        thickness="1.0*cm" vis="AnlYellow"/>
-      <slice material="SiliconOxide" thickness="0.3*mm" vis="AnlYellow" sensitive="true" />
-      </layer>
-		
-      <layer id="2"
-        vis="AnlBlue"
-        inner_z="1.0*cm"
-        inner_r="3.5*cm"
-        outer_r="12.0*cm"
-        phi1="-0.2*Pi*rad"
-        phi2="0.2*Pi*rad">
-      <slice material="PbWO4"        thickness="1.0*cm" vis="AnlYellow"/>
-      <slice material="SiliconOxide" thickness="0.3*mm" vis="AnlYellow" sensitive="true" />
-      </layer>      
-    </detector>
-    -->
   </detectors>
 
   <readouts>
diff --git a/ip6/B0_tracker.xml b/ip6/B0_tracker.xml
index f429eb860d9919d42729414714f411a658d1dd2b..467677f5c8908767cbe027ff544ded14b9986783 100644
--- a/ip6/B0_tracker.xml
+++ b/ip6/B0_tracker.xml
@@ -14,7 +14,6 @@
     <constant name="B0Tracker_zoffset"     value="10.0*cm"/>
     <constant name="B0TrackerCenter_zpos"  value="6.2*m"/>
     <constant name="B0TrackerCenter_xpos"  value="-0.16000052*m" />
-    <!--constant name="B0Tracker_zpos"        value="B0PF_CenterPosition + B0PF_Length/2.0 - B0Tracker_length/2.0 + B0Tracker_zoffset"/-->
     <constant name="B0Tracker_zmin"        value="B0TrackerCenter_zpos - B0Tracker_length/2.0 "/>
     <constant name="B0Tracker_rotation"    value="ionCrossingAngle"/>
     <comment>
@@ -24,34 +23,12 @@
     <constant name="B0Tracker_nlayers"   value="4"/>
     <constant name="B0Tracker_dz"        value="B0Tracker_length/(B0Tracker_nlayers-1)"/>
 
-    <comment>
-      How are the positions below computed?  -Whit
-    </comment>
-    <!--
-    <constant name="B0Tracker_Station_1_xpos" value="-0.1375013*m" />
-    <constant name="B0Tracker_Station_1_zpos" value="5.4*m" />
-    <constant name="B0Tracker_Station_2_xpos" value="-0.14250078*m" />
-    <constant name="B0Tracker_Station_2_zpos" value="5.6*m" />
-    <constant name="B0Tracker_Station_3_xpos" value="-0.14750026*m" />
-    <constant name="B0Tracker_Station_3_zpos" value="5.8*m" />
-    <constant name="B0Tracker_Station_4_xpos" value="-0.15249974*m" />
-    <constant name="B0Tracker_Station_4_zpos" value="6.0*m" />
-    -->
-
-    <!--
-    <constant name="B0Tracker_big_disc_phi1" value="0.2*Pi*rad" />
-    <constant name="B0Tracker_big_disc_phi2" value="-0.2*Pi*rad" />
-
-    <constant name="B0Tracker_small_disc_phi1" value="-0.2*Pi*rad" />
-    <constant name="B0Tracker_small_disc_phi2" value="0.2*Pi*rad" />
-    -->
-
     <comment>
       This angle is the angle subtended in phi for each trap segment.
     </comment>
-    <constant name="B0TrackerModOpeningAngle"         value="30.0*degree"/>
-    <constant name="B0TrackerLayer_nModules"          value="12"/>
-    <constant name="B0TrackerLayerSmallMod_nModules"  value="2"/>
+    <constant name="B0TrackerLayer_nModules"          value="36"/>
+    <constant name="B0TrackerLayerSmallMod_nModules"  value="B0TrackerLayer_nModules/6"/>
+    <constant name="B0TrackerModOpeningAngle"         value="360.0*degree/B0TrackerLayer_nModules"/>
     <constant name="B0TrackerLayerBigMod_nModules"    value="B0TrackerLayer_nModules - B0TrackerLayerSmallMod_nModules"/>
     <constant name="B0TrackerLayerBigMod_phi0"        value="(B0TrackerLayerSmallMod_nModules/2.0 + 0.5)*B0TrackerModOpeningAngle + Pi"/>
     <constant name="B0TrackerLayerSmallMod_phi0"        value="(B0TrackerLayerSmallMod_nModules/2.0 - 0.5)*B0TrackerModOpeningAngle + Pi"/>
@@ -88,66 +65,72 @@
       name="B0Tracker"
       type="ip6_B0Tracker"
       readout="B0TrackerHits"
-      vis="AnlRed">
+      vis="FFTrackerVis">
       <position x="B0TrackerCenter_xpos" y="0" z="B0TrackerCenter_zpos"/>
       <rotation x="0*rad" y="B0Tracker_rotation" z="0*rad"/>
-      <module name="Module1" vis="AnlProcess_Blue">
+      <module name="Module1" vis="TrackerModuleVis"> <!-- AnlProcess_Blue-->
         <trd x1="B0TrackerMod1_x1/2.0" x2="B0TrackerMod1_x2/2.0" z="B0TrackerMod1_y/2"/>
-        <module_component thickness="0.3*mm" material="SiliconOxide" sensitive="true"/>
+        <comment> Back-to-front </comment>
+        <module_component thickness="0.12*mm" material="CarbonFiber" vis="FFTrackerSupportVis" />
+        <module_component thickness="0.3*mm" material="SiliconOxide" vis="FFTrackerSurfaceVis" sensitive="true"/>
       </module>
-      <module name="SmallModule1" vis="AnlProcess_Blue">
+      <module name="SmallModule1" vis="FFTrackerModuleVis">
         <trd x1="B0TrackerMod1_x1/2.0" x2="B0TrackerMod1Small_x2/2.0" z="B0TrackerMod1Small_y/2"/>
-        <module_component thickness="0.3*mm" material="SiliconOxide" sensitive="true"/>
+        <module_component thickness="0.12*mm" material="CarbonFiber" vis="FFTrackerSupportVis" />
+        <module_component thickness="0.3*mm" material="SiliconOxide" vis="FFTrackerSurfaceVis" sensitive="true"/>
       </module>
-      <module name="SmallModule2" vis="AnlProcess_Blue">
+      <module name="SmallModule2" vis="FFTrackerModuleVis">
         <trd x1="B0TrackerMod1_x1/2.0" x2="B0TrackerMod2Small_x2/2.0" z="B0TrackerMod2Small_y/2"/>
-        <module_component thickness="0.3*mm" material="SiliconOxide" sensitive="true"/>
+        <module_component thickness="0.12*mm" material="CarbonFiber" vis="FFTrackerSupportVis" />
+        <module_component thickness="0.3*mm" material="SiliconOxide" vis="FFTrackerSurfaceVis" sensitive="true"/>
       </module>
-      <module name="SmallModule3" vis="AnlProcess_Blue">
+      <module name="SmallModule3" vis="FFTrackerModuleVis">
         <trd x1="B0TrackerMod1_x1/2.0" x2="B0TrackerMod3Small_x2/2.0" z="B0TrackerMod3Small_y/2"/>
-        <module_component thickness="0.3*mm" material="SiliconOxide" sensitive="true"/>
+        <module_component thickness="0.12*mm" material="CarbonFiber" vis="FFTrackerSupportVis" />
+        <module_component thickness="0.3*mm" material="SiliconOxide" vis="FFTrackerSurfaceVis" sensitive="true"/>
       </module>
-      <module name="SmallModule4" vis="AnlProcess_Blue">
+      <module name="SmallModule4" vis="FFTrackerModuleVis">
         <trd x1="B0TrackerMod1_x1/2.0" x2="B0TrackerMod4Small_x2/2.0" z="B0TrackerMod4Small_y/2"/>
-        <module_component thickness="0.3*mm" material="SiliconOxide" sensitive="true"/>
+        <module_component thickness="0.12*mm" material="CarbonFiber" vis="FFTrackerSupportVis" />
+        <module_component thickness="0.3*mm" material="SiliconOxide" vis="FFTrackerSurfaceVis" sensitive="true"/>
       </module>
       <layer id="1">
-        <envelope  vis="AnlRed" rmin="B0TrackerMod1Inner_r" rmax="B0TrackerMod1Outer_r" length="1.0*cm" 
+        <envelope  vis="FFTrackerLayerVis" rmin="B0TrackerMod1Inner_r" rmax="B0TrackerMod1Outer_r" length="1.0*cm" 
           zstart="-B0Tracker_length/2.0" />
-        <ring vis="AnlRed" phi0="B0TrackerLayerBigMod_phi0" dphi="B0TrackerModOpeningAngle" 
+        <ring phi0="B0TrackerLayerBigMod_phi0" dphi="B0TrackerModOpeningAngle" 
           r="B0TrackerMod1Inner_r+B0TrackerMod1_y/2.0" zstart="0.0*mm" 
-          nmodules="10" dz="0 * mm" module="Module1" />
-        <ring vis="AnlRed" phi0="-B0TrackerLayerSmallMod_phi0" dphi="B0TrackerModOpeningAngle"
+          nmodules="B0TrackerLayerBigMod_nModules" dz="0 * mm" module="Module1" />
+        <ring phi0="-B0TrackerLayerSmallMod_phi0" dphi="B0TrackerModOpeningAngle"
           r="B0TrackerMod1Inner_r+B0TrackerMod1Small_y/2.0" zstart="0.0*mm" 
           nmodules="B0TrackerLayerSmallMod_nModules" dz="0 * mm" module="SmallModule1" />
       </layer>
-      <layer id="2">
-        <envelope  vis="AnlRed" rmin="B0TrackerMod1Inner_r" rmax="B0TrackerMod1Outer_r" length="1.0*cm" 
+      <layer id="2" >
+        <envelope vis="FFTrackerLayerVis" rmin="B0TrackerMod1Inner_r" rmax="B0TrackerMod1Outer_r" length="1.0*cm" 
           zstart="-B0Tracker_length/2.0 + 1.0*B0Tracker_dz" />
-        <ring vis="AnlRed" phi0="B0TrackerLayerBigMod_phi0" dphi="B0TrackerModOpeningAngle" 
+        <ring phi0="B0TrackerLayerBigMod_phi0" dphi="B0TrackerModOpeningAngle" 
           r="B0TrackerMod1Inner_r+B0TrackerMod1_y/2.0" zstart="0.0*mm" 
-          nmodules="10" dz="0 * mm" module="Module1" />
-        <ring vis="AnlRed" phi0="-B0TrackerLayerSmallMod_phi0" dphi="B0TrackerModOpeningAngle"
+          nmodules="B0TrackerLayerBigMod_nModules" dz="0 * mm" module="Module1" />
+        <ring phi0="-B0TrackerLayerSmallMod_phi0" dphi="B0TrackerModOpeningAngle"
           r="B0TrackerMod1Inner_r+B0TrackerMod2Small_y/2.0" zstart="0.0*mm" 
           nmodules="B0TrackerLayerSmallMod_nModules" dz="0 * mm" module="SmallModule2" />
       </layer>
-      <layer id="3">
-        <envelope  vis="AnlRed" rmin="B0TrackerMod1Inner_r" rmax="B0TrackerMod1Outer_r" length="1.0*cm" 
+      <layer id="3" >
+        <envelope vis="FFTrackerLayerVis" rmin="B0TrackerMod1Inner_r" rmax="B0TrackerMod1Outer_r" length="1.0*cm" 
           zstart="-B0Tracker_length/2.0 +  2.0*B0Tracker_dz" />
-        <ring vis="AnlRed" phi0="B0TrackerLayerBigMod_phi0" dphi="B0TrackerModOpeningAngle" 
+        <ring phi0="B0TrackerLayerBigMod_phi0" dphi="B0TrackerModOpeningAngle" 
           r="B0TrackerMod1Inner_r+B0TrackerMod1_y/2.0" zstart="0.0*mm" 
-          nmodules="10" dz="0 * mm" module="Module1" />
-        <ring vis="AnlRed" phi0="-B0TrackerLayerSmallMod_phi0" dphi="B0TrackerModOpeningAngle"
+          nmodules="B0TrackerLayerBigMod_nModules" dz="0 * mm" module="Module1" />
+        <ring phi0="-B0TrackerLayerSmallMod_phi0" dphi="B0TrackerModOpeningAngle"
           r="B0TrackerMod1Inner_r+B0TrackerMod3Small_y/2.0" zstart="0.0*mm" 
           nmodules="B0TrackerLayerSmallMod_nModules" dz="0 * mm" module="SmallModule3" />
       </layer>
-      <layer id="4">
-        <envelope  vis="AnlRed" rmin="B0TrackerMod1Inner_r" rmax="B0TrackerMod1Outer_r" length="1.0*cm" 
+      <layer id="4" >
+        <envelope vis="FFTrackerLayerVis" rmin="B0TrackerMod1Inner_r" rmax="B0TrackerMod1Outer_r" length="1.0*cm" 
           zstart="-B0Tracker_length/2.0 + 3.0*B0Tracker_dz" />
-        <ring vis="AnlRed" phi0="B0TrackerLayerBigMod_phi0" dphi="B0TrackerModOpeningAngle" 
+        <ring phi0="B0TrackerLayerBigMod_phi0" dphi="B0TrackerModOpeningAngle" 
           r="B0TrackerMod1Inner_r+B0TrackerMod1_y/2.0" zstart="0.0*mm" 
-          nmodules="10" dz="0 * mm" module="Module1" />
-        <ring vis="AnlRed" phi0="-B0TrackerLayerSmallMod_phi0" dphi="B0TrackerModOpeningAngle"
+          nmodules="B0TrackerLayerBigMod_nModules" dz="0 * mm" module="Module1" />
+        <ring phi0="-B0TrackerLayerSmallMod_phi0" dphi="B0TrackerModOpeningAngle"
           r="B0TrackerMod1Inner_r+B0TrackerMod4Small_y/2.0" zstart="0.0*mm" 
           nmodules="B0TrackerLayerSmallMod_nModules" dz="0 * mm" module="SmallModule4" />
       </layer>
diff --git a/ip6/far_forward_offM_tracker.xml b/ip6/far_forward_offM_tracker.xml
index 2daa822ea0bc206c58f0dd6231c88ac91b653931..4db93aaf4e6cfe2b0997315464520caed10b84cf 100644
--- a/ip6/far_forward_offM_tracker.xml
+++ b/ip6/far_forward_offM_tracker.xml
@@ -26,21 +26,22 @@
       name="ForwardOffMTracker_station_1"
       type="ip6_OffMomentumTracker"
       readout="ForwardOffMTrackerHits"
-      vis="AnlRed"
+      vis="FFTrackerVis"
       reflect="false">
       <position x="-780.0*mm" y="0" z="22500*mm"/>
       <rotation x="0*rad" y="-0.047*rad" z="0*rad"/>
-      <module name="Module1" vis="AnlProcess_Blue">
+      <module name="Module1" vis="FFTrackerShieldedModuleVis">
         <shape x="10.0*cm" y="20.0*cm"/>
-        <module_component material="Aluminum"     vis="GrayVis"              thickness="ForwardOffMTracker_RFShieldThickness"/>
-        <module_component material="Vacuum"       vis="InvisibleNoDaughters" thickness="ForwardOffMTracker_ShieldingAirLayerThickness"/>
-        <module_component material="SiliconOxide" vis="OrangeVis"            thickness="ForwardOffMTracker_LGADThickness" sensitive="true"/>
-        <module_component material="SiliconOxide" vis="GreenVis"             thickness="ForwardOffMTracker_ASICThickness"  />
-        <module_component material="Copper"       vis="BlueVis"              thickness="ForwardOffMTracker_ThermalStripThickness" />
-        <module_component material="Aluminum"     vis="GrayVis"              thickness="ForwardOffMTracker_RFShieldThickness"/>
+        <comment> back-to-front </comment>
+        <module_component material="Aluminum"     vis="FFTrackerShieldingVis" thickness="ForwardOffMTracker_RFShieldThickness"/>
+        <module_component material="Copper"       vis="FFTrackerServiceVis"   thickness="ForwardOffMTracker_ThermalStripThickness" />
+        <module_component material="SiliconOxide" vis="FFTrackerServiceVis"   thickness="ForwardOffMTracker_ASICThickness"  />
+        <module_component material="SiliconOxide" vis="FFTrackerSurfaceVis"   thickness="ForwardOffMTracker_LGADThickness" sensitive="true"/>
+        <module_component material="Vacuum"       vis="InvisibleNoDaughters"  thickness="ForwardOffMTracker_ShieldingAirLayerThickness"/>
+        <module_component material="Aluminum"     vis="FFTrackerShieldingVis" thickness="ForwardOffMTracker_RFShieldThickness"/>
       </module>
       <layer id="1" module="Module1">
-        <envelope  vis="AnlRed" x="10.0*cm" y="20.0*cm" length="1.0*cm" 
+        <envelope vis="FFTrackerLayerVis" x="10.0*cm" y="20.0*cm" length="1.0*cm" 
           zstart="0.0/2.0" />
       </layer>
     </detector>
@@ -54,18 +55,17 @@
       reflect="false">
       <position x="-780.0*mm" y="0" z="22520*mm"/>
       <rotation x="0*rad" y="-0.047*rad" z="0*rad"/>
-      <module name="Module1" vis="AnlProcess_Blue">
+      <module name="Module1" vis="FFTrackerShieldedModuleVis">
         <shape x="10.0*cm" y="20.0*cm"/>
-        <module_component material="Aluminum"     vis="GrayVis"              thickness="ForwardOffMTracker_RFShieldThickness"/>
-        <module_component material="Vacuum"       vis="InvisibleNoDaughters" thickness="ForwardOffMTracker_ShieldingAirLayerThickness"/>
-        <module_component material="SiliconOxide" vis="OrangeVis"            thickness="ForwardOffMTracker_LGADThickness" sensitive="true"/>
-        <module_component material="SiliconOxide" vis="GreenVis"             thickness="ForwardOffMTracker_ASICThickness"  />
-        <module_component material="Copper"       vis="BlueVis"              thickness="ForwardOffMTracker_ThermalStripThickness" />
-        <module_component material="Aluminum"     vis="GrayVis"              thickness="ForwardOffMTracker_RFShieldThickness"/>
+        <module_component material="Aluminum"     vis="FFTrackerShieldingVis" thickness="ForwardOffMTracker_RFShieldThickness"/>
+        <module_component material="Copper"       vis="FFTrackerServiceVis"   thickness="ForwardOffMTracker_ThermalStripThickness" />
+        <module_component material="SiliconOxide" vis="FFTrackerServiceVis"   thickness="ForwardOffMTracker_ASICThickness"  />
+        <module_component material="SiliconOxide" vis="FFTrackerSurfaceVis"   thickness="ForwardOffMTracker_LGADThickness" sensitive="true"/>
+        <module_component material="Vacuum"       vis="InvisibleNoDaughters"  thickness="ForwardOffMTracker_ShieldingAirLayerThickness"/>
+        <module_component material="Aluminum"     vis="FFTrackerShieldingVis" thickness="ForwardOffMTracker_RFShieldThickness"/>
       </module>
-      
       <layer id="1" module="Module1">
-         <envelope  vis="AnlRed" x="10.0*cm" y="20.0*cm" length="3.2*mm" 
+         <envelope vis="FFTrackerLayerVis" x="10.0*cm" y="20.0*cm" length="3.2*mm" 
            zstart="0.0/2.0" />
       </layer>
       
@@ -76,22 +76,21 @@
       name="ForwardOffMTracker_station_3"
       type="ip6_OffMomentumTracker"
       readout="ForwardOffMTrackerHits"
-      vis="AnlRed"
+      vis="FFTrackerVis"
       reflect="false">
       <position x="-870.0*mm" y="0" z="24500*mm"/>
       <rotation x="0*rad" y="-0.047*rad" z="0*rad"/>
-      <module name="Module1" vis="AnlProcess_Blue">
+      <module name="Module1" vis="FFTrackerShieldedModuleVis">
         <shape x="10.0*cm" y="20.0*cm"/>
-        <module_component material="Aluminum"     vis="GrayVis"              thickness="ForwardOffMTracker_RFShieldThickness"/>
-        <module_component material="Vacuum"       vis="InvisibleNoDaughters" thickness="ForwardOffMTracker_ShieldingAirLayerThickness"/>
-        <module_component material="SiliconOxide" vis="OrangeVis"            thickness="ForwardOffMTracker_LGADThickness" sensitive="true"/>
-        <module_component material="SiliconOxide" vis="GreenVis"             thickness="ForwardOffMTracker_ASICThickness"  />
-        <module_component material="Copper"       vis="BlueVis"              thickness="ForwardOffMTracker_ThermalStripThickness" />
-        <module_component material="Aluminum"     vis="GrayVis"              thickness="ForwardOffMTracker_RFShieldThickness"/>
+        <module_component material="Aluminum"     vis="FFTrackerShieldingVis" thickness="ForwardOffMTracker_RFShieldThickness"/>
+        <module_component material="Copper"       vis="FFTrackerServiceVis"   thickness="ForwardOffMTracker_ThermalStripThickness" />
+        <module_component material="SiliconOxide" vis="FFTrackerServiceVis"   thickness="ForwardOffMTracker_ASICThickness"  />
+        <module_component material="SiliconOxide" vis="FFTrackerSurfaceVis"   thickness="ForwardOffMTracker_LGADThickness" sensitive="true"/>
+        <module_component material="Vacuum"       vis="InvisibleNoDaughters"  thickness="ForwardOffMTracker_ShieldingAirLayerThickness"/>
+        <module_component material="Aluminum"     vis="FFTrackerShieldingVis" thickness="ForwardOffMTracker_RFShieldThickness"/>
       </module>
-      
       <layer id="1" module="Module1">
-         <envelope  vis="AnlRed" x="10.0*cm" y="20.0*cm" length="3.2*mm" 
+         <envelope vis="FFTrackerLayerVis" x="10.0*cm" y="20.0*cm" length="3.2*mm" 
           zstart="0.0/2.0" />
       </layer>
       
@@ -102,22 +101,21 @@
       name="ForwardOffMTracker_station_4"
       type="ip6_OffMomentumTracker"
       readout="ForwardOffMTrackerHits"
-      vis="AnlRed"
+      vis="FFTrackerVis"
       reflect="false">
       <position x="-870.0*mm" y="0" z="24520*mm"/>
       <rotation x="0*rad" y="-0.047*rad" z="0*rad"/>
-      <module name="Module1" vis="AnlProcess_Blue">
+      <module name="Module1" vis="FFTrackerShieldedModuleVis">
         <shape x="10.0*cm" y="20.0*cm"/>
-        <module_component material="Aluminum"     vis="GrayVis"              thickness="ForwardOffMTracker_RFShieldThickness"/>
-        <module_component material="Vacuum"       vis="InvisibleNoDaughters" thickness="ForwardOffMTracker_ShieldingAirLayerThickness"/>
-        <module_component material="SiliconOxide" vis="OrangeVis"            thickness="ForwardOffMTracker_LGADThickness" sensitive="true"/>
-        <module_component material="SiliconOxide" vis="GreenVis"             thickness="ForwardOffMTracker_ASICThickness"  />
-        <module_component material="Copper"       vis="BlueVis"              thickness="ForwardOffMTracker_ThermalStripThickness" />
-        <module_component material="Aluminum"     vis="GrayVis"              thickness="ForwardOffMTracker_RFShieldThickness"/>
+        <module_component material="Aluminum"     vis="FFTrackerShieldingVis" thickness="ForwardOffMTracker_RFShieldThickness"/>
+        <module_component material="Copper"       vis="FFTrackerServiceVis"   thickness="ForwardOffMTracker_ThermalStripThickness" />
+        <module_component material="SiliconOxide" vis="FFTrackerServiceVis"   thickness="ForwardOffMTracker_ASICThickness"  />
+        <module_component material="SiliconOxide" vis="FFTrackerSurfaceVis"   thickness="ForwardOffMTracker_LGADThickness" sensitive="true"/>
+        <module_component material="Vacuum"       vis="InvisibleNoDaughters"  thickness="ForwardOffMTracker_ShieldingAirLayerThickness"/>
+        <module_component material="Aluminum"     vis="FFTrackerShieldingVis" thickness="ForwardOffMTracker_RFShieldThickness"/>
       </module>
-      
       <layer id="1" module="Module1">
-         <envelope  vis="AnlRed" x="10.0*cm" y="20.0*cm" length="3.2*mm" 
+         <envelope vis="FFTrackerLayerVis" x="10.0*cm" y="20.0*cm" length="3.2*mm" 
           zstart="0.0/2.0" />
       </layer>
       
diff --git a/ip6/forward_ion_beamline.xml b/ip6/forward_ion_beamline.xml
index a1e793f218b060c1197540041bdbca2d16010421..c68f8c50c6cf5868bf35ef5de6b3d8086b9574ed 100644
--- a/ip6/forward_ion_beamline.xml
+++ b/ip6/forward_ion_beamline.xml
@@ -19,65 +19,65 @@
       =====================================
   </comment>
   <detectors>
-    <detector id="170" name="B0PF_BeamlineMagnet" type="CylindricalDipoleMagnet">
+    <detector id="170" name="B0PF_BeamlineMagnet" vis="FFMagnetVis" type="ip6_CylindricalDipoleMagnet">
       <placement x="B0PF_XPosition" y="0*m" z="B0PF_CenterPosition" theta="B0PF_RotationAngle" />
       <dimensions x="B0PF_InnerRadius*4" y="B0PF_InnerRadius*4" z="B0PF_Length" r="B0PF_InnerRadius*2.0" />
       <apperture x="B0PF_InnerRadius" y="B0PF_InnerRadius" r="B0PF_InnerRadius" />
-      <coil dx="2*cm" dy="1.5*cm" />
+      <coil vis="FFMagnetCoilVis" dx="2*cm" dy="1.5*cm" />
     </detector>
-	<detector id="171" name="B0APF_BeamlineMagnet" vis="RedVis" type="CylindricalDipoleMagnet">
+	<detector id="171" name="B0APF_BeamlineMagnet" vis="FFMagnetVis" type="ip6_CylindricalDipoleMagnet">
       <placement x="B0APF_XPosition" y="0*m" z="B0APF_CenterPosition" theta="B0APF_RotationAngle" />
       <dimensions x="B0APF_InnerRadius*4" y="B0APF_InnerRadius*4" z="B0APF_Length" r="B0APF_InnerRadius*2.0" />
       <apperture x="B0APF_InnerRadius" y="B0APF_InnerRadius" r="B0APF_InnerRadius" />
-      <coil dx="2*cm" dy="1.5*cm" />
+      <coil vis="FFMagnetCoilVis" dx="2*cm" dy="1.5*cm" />
     </detector>
-	<detector id="172" name="Q1APF_BeamlineMagnet" vis="RedVis" type="CylindricalDipoleMagnet">
+	<detector id="172" name="Q1APF_BeamlineMagnet" vis="FFMagnetVis" type="ip6_CylindricalDipoleMagnet">
       <placement x="Q1APF_XPosition" y="0*m" z="Q1APF_CenterPosition" theta="Q1APF_RotationAngle" />
       <dimensions x="Q1APF_InnerRadius*4" y="Q1APF_InnerRadius*4" z="Q1APF_Length" r="2.0*Q1APF_InnerRadius"/>
       <apperture x="Q1APF_InnerRadius*2" y="Q1APF_InnerRadius*2"  r="Q1APF_InnerRadius"/>
-      <coil dx="2*cm" dy="1.5*cm" />
+      <coil vis="FFMagnetCoilVis" dx="2*cm" dy="1.5*cm" />
     </detector>
-    <detector id="173" name="Q1BPF_BeamlineMagnet" vis="RedVis" type="CylindricalDipoleMagnet">
+    <detector id="173" name="Q1BPF_BeamlineMagnet" vis="FFMagnetVis" type="ip6_CylindricalDipoleMagnet">
       <placement x="Q1BPF_XPosition" y="0*m" z="Q1BPF_CenterPosition" theta="Q1BPF_RotationAngle" />
       <dimensions x="Q1BPF_InnerRadius*4" y="Q1BPF_InnerRadius*4" z="Q1BPF_Length"  r="2.0*Q1BPF_InnerRadius"/>
       <apperture x="Q1BPF_InnerRadius*2" y="Q1BPF_InnerRadius*2"  r="Q1BPF_InnerRadius"/>
-      <coil dx="1*cm" dy="0.5*cm" />
+      <coil vis="FFMagnetCoilVis" dx="1*cm" dy="0.5*cm" />
     </detector>
-    <detector id="174" name="Q2PF_BeamlineMagnet" vis="RedVis" type="CylindricalDipoleMagnet">
+    <detector id="174" name="Q2PF_BeamlineMagnet" vis="FFMagnetVis" type="ip6_CylindricalDipoleMagnet">
       <placement x="Q2PF_XPosition" y="0*m" z="Q2PF_CenterPosition" theta="Q2PF_RotationAngle" />
       <dimensions x="Q2PF_InnerRadius*4" y="Q2PF_InnerRadius*4" z="Q2PF_Length" r="2.0*Q2PF_InnerRadius" />
       <apperture x="Q2PF_InnerRadius*2" y="Q2PF_InnerRadius*2"  r="Q2PF_InnerRadius"/>
-      <coil dx="1*cm" dy="0.5*cm" />
+      <coil vis="FFMagnetCoilVis" dx="1*cm" dy="0.5*cm" />
     </detector>
-    <detector id="175" name="B1PF_BeamlineMagnet" vis="RedVis" type="CylindricalDipoleMagnet">
+    <detector id="175" name="B1PF_BeamlineMagnet" vis="FFMagnetVis" type="ip6_CylindricalDipoleMagnet">
       <placement x="B1PF_XPosition" y="0*m" z="B1PF_CenterPosition" theta="B1PF_RotationAngle" />
       <dimensions x="B1PF_InnerRadius*4" y="B1PF_InnerRadius*4" z="B1PF_Length" r="2.0*B1PF_InnerRadius"  />
       <apperture x="B1PF_InnerRadius*2" y="B1PF_InnerRadius*2"  r="B1PF_InnerRadius" />
-      <coil dx="1*cm" dy="0.5*cm" />
+      <coil vis="FFMagnetCoilVis" dx="1*cm" dy="0.5*cm" />
     </detector>
-    <detector id="176" name="B1APF_BeamlineMagnet" vis="RedVis" type="CylindricalDipoleMagnet">
+    <detector id="176" name="B1APF_BeamlineMagnet" vis="FFMagnetVis" type="ip6_CylindricalDipoleMagnet">
       <placement x="B1APF_XPosition" y="0*m" z="B1APF_CenterPosition" theta="B1APF_RotationAngle" />
       <dimensions x="B1APF_InnerRadius*4" y="B1APF_InnerRadius*4" z="B1APF_Length" r="2.0*B1APF_InnerRadius" />
       <apperture x="B1APF_InnerRadius*2" y="B1APF_InnerRadius*2"  r="B1APF_InnerRadius"/>
-      <coil dx="1*cm" dy="0.5*cm" />
+      <coil vis="FFMagnetCoilVis" dx="1*cm" dy="0.5*cm" />
     </detector>
-    <detector id="177" name="B2PF_BeamlineMagnet" vis="RedVis" type="CylindricalDipoleMagnet">
+    <detector id="177" name="B2PF_BeamlineMagnet" vis="FFMagnetVis" type="ip6_CylindricalDipoleMagnet">
       <placement x="B2PF_XPosition" y="0*m" z="B2PF_CenterPosition" theta="B2PF_RotationAngle" />
       <dimensions x="B2PF_InnerRadius*4" y="B2PF_InnerRadius*4" z="B2PF_Length" r="2.0*B2PF_InnerRadius" />
       <apperture x="B2PF_InnerRadius*2" y="B2PF_InnerRadius*2"  r="B2PF_InnerRadius"/>
-      <coil dx="1*cm" dy="0.5*cm" />
+      <coil vis="FFMagnetCoilVis" dx="1*cm" dy="0.5*cm" />
     </detector>
-	<detector id="180" name="Q0EF_BeamlineMagnet" vis="RedVis" type="CylindricalDipoleMagnet">
+	<detector id="180" name="Q0EF_BeamlineMagnet" vis="FFMagnetVis" type="ip6_CylindricalDipoleMagnet">
       <placement x="Q0EF_XPosition" y="0*m" z="Q0EF_CenterPosition" theta="Q0EF_RotationAngle" />
       <dimensions x="5.0*cm" y="5.0*cm" z="Q0EF_Length" r="2.5*cm" />
       <apperture x="Q0EF_InnerRadius*2" y="Q0EF_InnerRadius*2"  r="Q0EF_InnerRadius"/>
-      <coil dx="0.4*cm" dy="0.2*cm" />
+      <coil vis="FFMagnetCoilVis" dx="0.4*cm" dy="0.2*cm" />
     </detector>
-	<detector id="181" name="Q1EF_BeamlineMagnet" vis="RedVis" type="CylindricalDipoleMagnet">
+	<detector id="181" name="Q1EF_BeamlineMagnet" vis="FFMagnetVis" type="ip6_CylindricalDipoleMagnet">
       <placement x="Q1EF_XPosition" y="0*m" z="Q1EF_CenterPosition" theta="Q1EF_RotationAngle" />
       <dimensions x="6.0*cm" y="6.0*cm" z="Q1EF_Length" r="3.0*cm" />
       <apperture x="Q1EF_InnerRadius*2" y="Q1EF_InnerRadius*2"  r="Q1EF_InnerRadius"/>
-      <coil dx="0.4*cm" dy="0.2*cm" />
+      <coil vis="FFMagnetCoilVis" dx="0.4*cm" dy="0.2*cm" />
     </detector>
 
 </detectors>
diff --git a/ip6/inner_vacuum_FF_magnets.xml b/ip6/inner_vacuum_FF_magnets.xml
index 2d160d6fceb3f6fd169b0d2cdd0b2e4a9e06d402..1678fff87ceadf8833596367fa6803e1f0040e4d 100644
--- a/ip6/inner_vacuum_FF_magnets.xml
+++ b/ip6/inner_vacuum_FF_magnets.xml
@@ -8,7 +8,7 @@
 
   <detectors>
 
-    <detector id="VacuumMagnetElement_1_ID" name="VacuumMagnetElement" type="magnetElementInnerVacuum" vis="visBlue" visible="false"> 
+    <detector id="VacuumMagnetElement_1_ID" name="VacuumMagnetElement" type="magnetElementInnerVacuum" vis="InvisibleNoDaughters"> 
       <position x="0.0" y="0.0" z="0.0" />
       <rotation x="0*rad" y="0*rad" z="0*rad" />
     </detector>
diff --git a/ip6/ip6_colors.xml b/ip6/ip6_colors.xml
new file mode 100644
index 0000000000000000000000000000000000000000..867f3db94d07fd6f07dd3e22b9a6452d3054c563
--- /dev/null
+++ b/ip6/ip6_colors.xml
@@ -0,0 +1,26 @@
+<display>
+
+  <comment> 
+    Colors tweaked to be displayable by geoViewer
+  </comment>
+  <vis name="AnlGreen"        alpha="1" r="100/256" g="200/256" b="0/256"/>
+  <vis name="AnlViolet"       alpha="1" r="100/256" g="0/256"   b="150/256"/>
+  <vis name="AnlProcess_Blue" alpha="1" r="0/256"   g="100/256" b="202/256"/>
+  <vis name="AnlOrange"       alpha="1" r="255/256" g="121/256" b="0"/>
+  <vis name="AnlRed"          alpha="1" r="205/256" g="45/256 " b="45/256"/>
+  <vis name="AnlGold"         alpha="1" r="248/256" g="188/256" b="0/256"/>
+  <vis name="AnlBlue"         alpha="1" r="0/256"   g="96/256"  b="156/256"/>
+  <vis name="AnlTeal"         alpha="1" r="0/256"   g="161/256" b="156/256"/>
+  <vis name="AnlGray"         alpha="1" r="102/256" g="102/256" b="102/256"/>
+  <vis name="AnlLight_Gray"   alpha="1" r="209/256" g="209/256" b="209/256"/>
+  <vis name="AnlLightGray"    ref="AnlLight_Gray" />
+  <!-- off-white (or white) don't work! -->
+  <!--vis name="AnlOff_White"    alpha="1" r="242/256" g="242/256" b="242/256"/-->
+  <vis name="AnlDarkRed"      alpha="1" r="161/256" g="45/256"  b="45/256"/>
+  <vis name="AnlDarkGreen"    alpha="1" r="0"       g="110/256" b="50/256"/>
+  <vis name="AnlDarkBlue"     alpha="1" r="45/256"   g="45/256"  b="110/256"/>
+  <vis name="AnlDelta_Red"    ref="AnlDarkRed"/>
+  <vis name="AnlDelta_Green"    ref="AnlDarkGreen"/>
+  <vis name="AnlDelta_Blue"    ref="AnlDarkBlue"/>
+
+</display>
diff --git a/ip6/ip6_display.xml b/ip6/ip6_display.xml
index 28c80cb47accd3860a10f18aa7765915f8c30054..813f4a82eedae163c3147af8b00f7d9194daeb21 100644
--- a/ip6/ip6_display.xml
+++ b/ip6/ip6_display.xml
@@ -1,71 +1,58 @@
   <display>
 
-    <vis name="AnlGreen"        alpha="1" r="119/255" g="179/255" b="0"/>
-    <vis name="AnlViolet"       alpha="1" r="91/256" g="0" b="145/256"/>
-    <vis name="AnlProcess_Blue" alpha="1" r="0/256" g="130/256" b="202/256"/>
-    <vis name="AnlOrange"       alpha="1" r="255/256" g="121/256" b="0"/>
-    <vis name="AnlRed"          alpha="1" r="205/256" g="32/256" b="44/256"/>
-    <vis name="AnlGold"         alpha="1" r="248/256" g="178/256" b="0/256"/>
-    <vis name="AnlBlue"         alpha="1" r="0/256" g="96/256" b="156/256"/>
-    <vis name="AnlTeal"         alpha="1" r="0/256" g="161/256" b="156/256"/>
-    <vis name="AnlGray"         alpha="1" r="102/256" g="102/256" b="102/256"/>
-    <vis name="AnlLight_Gray"   alpha="1" r="209/256" g="209/256" b="209/256"/>
-    <vis name="AnlOff_White"    alpha="1" r="242/256" g="242/256" b="242/256"/>
-    <vis name="AnlDelta_Red"    alpha="1" r="161/256" g="43/256" b="47/256"/>
-    <vis name="AnlDelta_Green"  alpha="1" r="0" g="120/256" b="54/256"/>
-    <vis name="AnlDelta_Blue"   alpha="1" r="11/256" g="31/256" b="143/256"/>
-
-    <vis name="AnlRed_1"        alpha="0.5" r="205/256" g="32/256" b="44/256"/>
-
-    <comment>Tracker_Layer_Vis is AnlGold</comment>
-    <vis name="Tracker_Layer_Vis"  alpha="0.5" r="248/256" g="178/256" b="0/256" showDaughters="true" />
-
+    <comment>
+      See compact/ip6_colors.xml for list of colors.
+    </comment>
     <vis name="InvisibleNoDaughters"      showDaughters="false" visible="false"/>
     <vis name="InvisibleWithDaughters"    showDaughters="true" visible="false"/>
 
-    <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" />
+    <comment>
+      Tracker visualizations
+    </comment>
+    <vis name="TrackerVis"          ref="AnlRed" />
+    <vis name="TrackerSupportVis"   ref="AnlBlue"             visible="true"  showDaughters="false" />
+    <vis name="TrackerServiceVis"   ref="AnlGold"             showDaughters="false" />
+    <vis name="FFTrackerVis"        ref="AnlRed" />
+    <vis name="FFTrackerSupportVis" ref="AnlBlue"             visible="true"  showDaughters="false" />
+    <vis name="FFTrackerShieldingVis" ref="AnlGray"           visible="true"  showDaughters="false" />
+    <vis name="FFTrackerServiceVis" ref="AnlGold"             visible="true"  showDaughters="false" />
+    <vis name="FFTrackerLayerVis"   ref="TrackerVis"          visible="true"  showDaughters="true" />
+    <vis name="FFTrackerModuleVis"  ref="FFTrackerLayerVis"   visible="true"  showDaughters="true" />
+    <vis name="FFTrackerSurfaceVis" ref="FFTrackerLayerVis"   visible="true"  showDaughters="true" />
+    <comment> For shielded modules by default just display to module instead of 6 layers </comment>
+    <vis name="FFTrackerShieldedModuleVis" ref="FFTrackerModuleVis"   visible="true"  showDaughters="false" />
 
-    <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" />
+    <comment>
+      Calorimeter visualization
+    </comment>
 
-    <vis name="SiTrackerBarrelVis1" alpha="0.8" r="0.0" g="0.9" b="0.9" showDaughters="true" />
-    <vis name="SiTrackerBarrelVis2" alpha="0.8" r="0.1" g="0.9" b="0.0" showDaughters="true" visible="true"/>
-    <vis name="SiTrackerEndcapVis1" alpha="0.8" r="1.0" g="0.0" b="1.0" showDaughters="true" visible="true"/>
-    <vis name="SiTrackerEndcapVis2" alpha="0.8" r="1.0" g="0.45" b="0.0" showDaughters="false" visible="true"/>
-    <vis name="SiTrackerSubAssemblyVis" alpha="1" r="0.0" g="0.99" b="0.0" showDaughters="true" visible="true"/>
-    <vis name="SiTrackerLayerVis" alpha="1" r="0.0" g="1" b="0.0" showDaughters="true" visible="true"  lineStyle="solid"  drawingStyle="solid" />
+    <comment>
+      ECal Vis
+    </comment>
+    <vis name="FFPreVis"            ref="AnlGold"             showDaughters="true" visible="true"/>
+    <vis name="FFPreLayerVis"       ref="FFPreVis"            showDaughters="true" visible="true"/>
+    <vis name="FFPreModuleVis"      ref="FFPreLayerVis"       showDaughters="true" visible="true"/>
+    <vis name="FFPreRadiatorVis"    ref="FFPreModuleVis"      showDaughters="true" visible="true"/>
+    <vis name="FFPreReadoutVis"     ref="FFTrackerSurfaceVis" showDaughters="true" visible="true"/>
+      
+    <comment>
+      Magnet/beamline visualization
+    </comment>
+    <vis name="FFMagnetVis"         ref="AnlGreen"            showDaughters="true" visible="true"/>
+    <vis name="FFMagnetCoilVis"     ref="AnlRed"              showDaughters="true" visible="true"/>
+    <vis name="BeamPipeVis"         ref="AnlLight_Gray"       showDaughters="true" visible="true"/>
 
-    <vis name="EcalVis" alpha="0.1" r="0.0" g="0.75" b="0.1" showDaughters="false"/>
-    <vis name="EcalEndcapVis" alpha="1.0" r="0.0" g="0.99" b="0.0" showDaughters="false" visible="true" />
-    <vis name="EcalBarrelVis" alpha="1.0" r="0.0" g="0.99" b="0.0" showDaughters="false" visible="true" />
-   
-   
-    
 
-    <vis name="SolenoidCoilVis" alpha="1.0" r="0.55" g="0.55" b="0.7" showDaughters="true" visible="true" lineStyle="solid" drawingStyle="solid" />
-    <vis name="SolenoidCryostatVis" alpha="0.4" r="0.55" g="0.55" b="0.7" showDaughters="true" visible="true" lineStyle="solid" drawingStyle="solid" />
-    <vis name="SolenoidYokeVis" alpha="0.2" r="0.8" g="0.1" b="0.1" showDaughters="false" visible="true" lineStyle="solid"  drawingStyle="solid" />
-    <vis name="RICHVis" alpha="0.5" r="1" g="0" b="1" showDaughters="true"/>
-    <vis name="BeamPipeVis"    alpha="1"  r= "0.75" g="0.75" b="0.75" showDaughters="true" visible="true"/>
+    <comment>
+      Old visualization code that should be integrated in the new color scheme
+    </comment>
 
-    <vis name="cb_SolenoidVis"          alpha="0.4"  r= "0.1"  g="0.0"  b="0.1"  showDaughters="true" visible="true"/>
     <vis name="ffi_ZDC_ECAL_Vis"        alpha="0.1"  r= "0.1"  g="0.0"  b="1.0"  showDaughters="true" visible="true"/>
     <vis name="ffi_ZDC_ECAL_module_Vis" alpha="1.0"  r= "0.1"  g="1.0"  b="0.9"  showDaughters="true" visible="true"/>
     <vis name="ffi_ZDC_HCAL_Vis"        alpha="0.1"  r= "0.1"  g="0.0"  b="1.0"  showDaughters="true" visible="true"/>
-    <vis name="cb_CTDVis"               alpha="0.1"  r= "0.1"  g="0.0"  b="1.0"  showDaughters="true" visible="true"/>
-    <vis name="cb_CTD_Si_layerVis"      alpha="1.0"  r= "0.9"  g="1.0"  b="0.1"  showDaughters="true" visible="true"/>
-    <vis name="ce_GEMVis"               alpha="0.1"  r= "0.1"  g="0.0"  b="1.0"  showDaughters="true" visible="true"/>
-    <vis name="cb_GEM_layerVis"         alpha="0.8"  r= "0.8"  g="0.4"  b="0.3"  showDaughters="true" visible="true"/>
-    <vis name="cb_VTX_BarrelVis"        alpha="0.1"  r= "0.1"  g="0.0"  b="1.0"  showDaughters="true" visible="true"/>
-    <vis name="cb_VTX_Barrel_layerVis"  alpha="2.0"  r= "0.0"  g="0.2"  b="0.8"  showDaughters="true" visible="true"/>
-
-    <vis name="ci_GEMVis"  r= "0.8"  g="0.4"  b="0.3" alpha="0.8" showDaughters="true" visible="true"/>
-    <vis name="ci_HCALVis"  r= "0.6"  g="0"  b="0.6" alpha="1.0" showDaughters="true" visible="true"/>
 
     <comment>
-      Deprecated colors.
+      Deprecated color scheme
     </comment>
     <vis name="GreenVis"       alpha="1.0"  r= "0.0" g="1.0" b="0.0" showDaughters="true" visible="true"/>
     <vis name="RedVis"         alpha="0.2"  r= "1.0" g="0.0" b="0.0" showDaughters="true" visible="true"/>
diff --git a/ip6/roman_pots_eRD24_design.xml b/ip6/roman_pots_eRD24_design.xml
index 629bb846ad5aff4ac5329440841cc2310c7ef6fa..5e6b8fc52134c1567b79bb24b0461d583f2c9466 100644
--- a/ip6/roman_pots_eRD24_design.xml
+++ b/ip6/roman_pots_eRD24_design.xml
@@ -84,16 +84,16 @@
       readout="ForwardRomanPotHits" 
       type="ip6_ForwardRomanPot"
       insideTrackingVolume="true"
-      reflect="false" vis="AnlRed">
+      reflect="false" vis="FFTrackerVis">
     <position x="ForwardRomanPotStation1_xpos" y="0" z="ForwardRomanPotStation1_zpos" />
     <rotation x="0" y="ForwardRomanPotStation1_rotation" z="0" />
-    <module name="Module1" vis="AnlYellow" nx="2" ny="2" width="ForwardRomanPot_ModuleWidth" height="ForwardRomanPot_ModuleHeight">
-      <module_component material="Aluminum"     vis="GrayVis"              thickness="ForwardRomanPot_RFShieldThickness"/>
-      <module_component material="Vacuum"       vis="InvisibleNoDaughters" thickness="ForwardRomanPot_ShieldingAirLayerThickness"/>
-	  <module_component material="SiliconOxide" vis="OrangeVis"            thickness="ForwardRomanPot_LGADThickness" sensitive="true"/>
-      <module_component material="SiliconOxide" vis="GreenVis"             thickness="ForwardRomanPot_ASICThickness"  />
-      <module_component material="Copper"       vis="BlueVis"              thickness="ForwardRomanPot_ThermalStripThickness" />
-	  <module_component material="Aluminum"     vis="GrayVis"              thickness="ForwardRomanPot_RFShieldThickness"/>
+    <module name="Module1" vis="FFTrackerShieldedModuleVis" nx="2" ny="2" width="ForwardRomanPot_ModuleWidth" height="ForwardRomanPot_ModuleHeight">
+        <module_component material="Aluminum"     vis="FFTrackerShieldingVis" thickness="ForwardRomanPot_RFShieldThickness"/>
+        <module_component material="Copper"       vis="FFTrackerServiceVis"   thickness="ForwardRomanPot_ThermalStripThickness" />
+        <module_component material="SiliconOxide" vis="FFTrackerServiceVis"   thickness="ForwardRomanPot_ASICThickness"  />
+        <module_component material="SiliconOxide" vis="FFTrackerSurfaceVis"   thickness="ForwardRomanPot_LGADThickness" sensitive="true"/>
+        <module_component material="Vacuum"       vis="InvisibleNoDaughters"  thickness="ForwardRomanPot_ShieldingAirLayerThickness"/>
+        <module_component material="Aluminum"     vis="FFTrackerShieldingVis" thickness="ForwardRomanPot_RFShieldThickness"/>
       <!--<module_component material="Vacuum"       thickness="ForwardRomanPot_LayerSeparationThickness"/>	-->
     </module>
     <module_assembly name="Station1Top">
@@ -131,7 +131,7 @@
       </array>
     </module_assembly>
 
-    <layer id="1">
+    <layer id="1" vis="FFTrackerLayerVis">
       <position x="0" y="0" z="0.0*cm"/>
       <component assembly="Station1Top">
         <position x="0" y="0" z="0.0*cm"/>
@@ -140,7 +140,7 @@
         <position x="0" y="0" z="0.0*cm"/>
       </component>
     </layer>
-    <layer id="2">
+    <layer id="2" vis="FFTrackerLayerVis">
       <position x="0" y="0" z="0.0*cm"/>
       <component assembly="Station1Top">
         <position x="0" y="0" z="20.0*mm"/>
@@ -159,16 +159,16 @@
       type="ip6_ForwardRomanPot"
       insideTrackingVolume="true"
       reflect="false"
-      vis="AnlRed">
+      vis="FFTrackerVis">
       <position x="ForwardRomanPotStation2_xpos" y="0" z="ForwardRomanPotStation2_zpos" />
     <rotation x="0" y="ForwardRomanPotStation1_rotation" z="0" />
-    <module name="Module1" vis="AnlYellow" nx="2" ny="2" width="ForwardRomanPot_ModuleWidth" height="ForwardRomanPot_ModuleHeight">
-     <module_component material="Aluminum"     vis="GrayVis"              thickness="ForwardRomanPot_RFShieldThickness"/>
-      <module_component material="Vacuum"       vis="InvisibleNoDaughters" thickness="ForwardRomanPot_ShieldingAirLayerThickness"/>
-      <module_component material="SiliconOxide" vis="OrangeVis"            thickness="ForwardRomanPot_LGADThickness" sensitive="true"/>
-      <module_component material="SiliconOxide" vis="GreenVis"             thickness="ForwardRomanPot_ASICThickness"  />
-      <module_component material="Copper"       vis="BlueVis"              thickness="ForwardRomanPot_ThermalStripThickness" />
-      <module_component material="Aluminum"     vis="GrayVis"              thickness="ForwardRomanPot_RFShieldThickness"/>
+    <module name="Module1" vis="FFTrackerShieldedModuleVis" nx="2" ny="2" width="ForwardRomanPot_ModuleWidth" height="ForwardRomanPot_ModuleHeight">
+      <module_component material="Aluminum"     vis="FFTrackerShieldingVis" thickness="ForwardRomanPot_RFShieldThickness"/>
+      <module_component material="Copper"       vis="FFTrackerServiceVis"   thickness="ForwardRomanPot_ThermalStripThickness" />
+      <module_component material="SiliconOxide" vis="FFTrackerServiceVis"   thickness="ForwardRomanPot_ASICThickness"  />
+      <module_component material="SiliconOxide" vis="FFTrackerSurfaceVis"   thickness="ForwardRomanPot_LGADThickness" sensitive="true"/>
+      <module_component material="Vacuum"       vis="InvisibleNoDaughters"  thickness="ForwardRomanPot_ShieldingAirLayerThickness"/>
+      <module_component material="Aluminum"     vis="FFTrackerShieldingVis" thickness="ForwardRomanPot_RFShieldThickness"/>
     </module>
 	<module_assembly name="Station2Top">
 		<array nx="2" ny="2" module="Module1" width="2*ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
@@ -206,7 +206,7 @@
     </module_assembly>
 
 
-    <layer id="1">
+    <layer id="1" vis="FFTrackerLayerVis">
       <position x="0" y="0" z="0.0*cm"/>
       <component assembly="Station2Top">
         <position x="0" y="0" z="0.0*cm"/>
@@ -215,7 +215,7 @@
         <position x="0" y="0" z="0.0*cm"/>
       </component>
     </layer>
-    <layer id="2">
+    <layer id="2" vis="FFTrackerLayerVis">
       <position x="0" y="0" z="0.0*cm"/>
       <component assembly="Station2Top">
         <position x="0" y="0" z="20.0*mm"/>
diff --git a/src/B0Tracker_geo.cpp b/src/B0Tracker_geo.cpp
index e5371f2a78e20ffb427621425efb647a47bc7316..f59b4404c52e9caf766e123e2082c0b95e09fe1c 100644
--- a/src/B0Tracker_geo.cpp
+++ b/src/B0Tracker_geo.cpp
@@ -50,7 +50,7 @@ static Ref_t create_B0Tracker(Detector& description, xml_h e, SensitiveDetector
   detWorldExt->addType("endcap", "detector");
   sdet.addExtension<Acts::ActsExtension>(detWorldExt);
 
-  assembly.setVisAttributes(description.invisible());
+  //assembly.setVisAttributes(description.invisible());
   sens.setType("tracker");
 
   for (xml_coll_t mi(x_det, _U(module)); mi; ++mi, ++m_id) {
@@ -90,7 +90,7 @@ static Ref_t create_B0Tracker(Detector& description, xml_h e, SensitiveDetector
 
       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()));
+      //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()));
@@ -174,7 +174,8 @@ static Ref_t create_B0Tracker(Detector& description, xml_h e, SensitiveDetector
     //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_vol.setVisAttributes(description.visAttributes(layer_vis));
+    //layer_vol.setVisAttributes(description.visAttributes(layer_vis));
+    //layer_vol.setVisAttributes(description.visAttributes(x_layer.visStr()));
 
     PlacedVolume layer_pv;
     //if (reflect) {
diff --git a/src/CylindricalDipoleMagnet_geo.cpp b/src/CylindricalDipoleMagnet_geo.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9b41bae4e63d1fe12174c00d2430774ca71efffd
--- /dev/null
+++ b/src/CylindricalDipoleMagnet_geo.cpp
@@ -0,0 +1,99 @@
+#include "DD4hep/DetFactoryHelper.h"
+#include "DD4hep/Printout.h"
+#include "DD4hep/Shapes.h"
+#include "TMath.h"
+#include "DDRec/Surface.h"
+#include "DDRec/DetectorData.h"
+#include "XML/Layering.h"
+
+using namespace std;
+using namespace dd4hep;
+using namespace dd4hep::rec;
+using namespace ROOT::Math;
+
+static Ref_t build_magnet(Detector& dtor, xml_h e, SensitiveDetector sens) {
+    xml_det_t x_det     = e;
+    int       det_id    = x_det.id();
+    string    det_name  = x_det.nameStr();
+    xml_dim_t pos       = x_det.child(_U(placement));
+    double    pos_x     = pos.x();
+    double    pos_y     = pos.y();
+    double    pos_z     = pos.z();
+    double    pos_theta = pos.attr<double>(_U(theta));
+    xml_dim_t dims      = x_det.dimensions();
+    double    dim_r     = dims.r();
+    double    dim_z     = dims.z();
+    xml_dim_t apperture = x_det.child(_Unicode(apperture));
+    double    app_r     = apperture.r();
+    xml_dim_t coil      = x_det.child(_Unicode(coil));
+    double    coil_x    = coil.dx();
+    double    coil_y    = coil.dy();
+    Material  iron      = dtor.material("Vacuum");
+    Material  niobium   = dtor.material("Vacuum");
+
+    //std::cout << det_name << " positioned at z=" << pos.z() << ", x=" << pos.x() << "\n"; 
+
+    DetElement sdet(det_name, det_id);
+    Assembly   assembly(det_name + "_assembly");
+
+    const string module_name = "Quad_magnet";
+
+    const string yoke_vis = dd4hep::getAttrOrDefault(x_det, _Unicode(vis), "GreenVis");
+    const string coil_vis = dd4hep::getAttrOrDefault(coil, _Unicode(vis), "RedVis");
+
+    sdet.setAttributes(dtor, assembly, x_det.regionStr(), x_det.limitsStr(), yoke_vis);
+
+    // -- yoke
+    Tube yoke_tube(app_r + coil_y, dim_r, 0.5*dim_z);
+    Volume yoke_vol("yoke_vol", yoke_tube, iron);
+    auto yoke_pv = assembly.placeVolume(yoke_vol);
+    yoke_pv.addPhysVolID("element", 1);
+    DetElement yoke_de(sdet, "yoke_de", 1);
+    yoke_de.setPlacement(yoke_pv);
+    yoke_de.setAttributes(dtor, yoke_vol, x_det.regionStr(), x_det.limitsStr(), yoke_vis);
+
+    // -- coils
+    double offset = 1.5 * coil_x;
+    double appc_r = app_r + 0.5 * coil_y;
+    double offset_angle = atan(offset / appc_r);
+
+    Tube longrod(app_r, app_r + coil_y, 0.5*dim_z, atan(coil_x / app_r));
+    Tube connector(app_r, app_r + coil_y , coil_y, 0.5*M_PI - offset_angle);
+
+    UnionSolid coil1(longrod, longrod, Transform3D(RotationZ(-offset_angle)));
+    UnionSolid coil2(coil1, longrod, Transform3D(RotationZ(0.5*M_PI)));
+    UnionSolid coil3(coil2, longrod, Transform3D(RotationZ(M_PI)));
+    UnionSolid coil4(coil3, longrod, Transform3D(RotationZ(1.5*M_PI)));
+
+    UnionSolid coil5(coil4, longrod, Transform3D(RotationZ(0.5*M_PI - offset_angle)));
+    UnionSolid coil6(coil5, longrod, Transform3D(RotationZ(M_PI - offset_angle)));
+    UnionSolid coil7(coil6, longrod, Transform3D(RotationZ(1.5*M_PI - offset_angle)));
+
+    UnionSolid coil8(coil7, connector, Transform3D(Translation3D(0.0, 0.0, -0.5*dim_z + coil_y)));
+    UnionSolid coil9(coil8, connector, Transform3D(Translation3D(0.0, 0.0, -0.5*dim_z + coil_y) * RotationZ(0.5*M_PI)));
+    UnionSolid coil10(coil9, connector, Transform3D(Translation3D(0.0, 0.0, -0.5*dim_z + coil_y) * RotationZ(M_PI)));
+    UnionSolid coil11(coil10, connector, Transform3D(Translation3D(0.0, 0.0, -0.5*dim_z + coil_y) * RotationZ(1.5*M_PI)));
+    UnionSolid coil12(coil11, connector, Transform3D(Translation3D(0.0, 0.0, 0.5*dim_z - coil_y)));
+    UnionSolid coil13(coil12, connector, Transform3D(Translation3D(0.0, 0.0, 0.5*dim_z - coil_y) * RotationZ(0.5*M_PI)));
+    UnionSolid coil14(coil13, connector, Transform3D(Translation3D(0.0, 0.0, 0.5*dim_z - coil_y) * RotationZ(M_PI)));
+    UnionSolid coil15(coil14, connector, Transform3D(Translation3D(0.0, 0.0, 0.5*dim_z - coil_y) * RotationZ(1.5*M_PI)));
+
+    Volume coil_vol("coil_vol", coil14, niobium);
+
+    auto coil_pos = Transform3D(RotationZ(0.5*M_PI - offset_angle));
+    auto coil_pv = assembly.placeVolume(coil_vol, coil_pos);
+    DetElement coil_de(sdet, "coil_de", 2);
+    coil_de.setAttributes(dtor, coil_vol, x_det.regionStr(), x_det.limitsStr(), coil_vis);
+    coil_de.setPlacement(coil_pv);
+
+    // -- finishing steps
+    auto final_pos = Transform3D(Translation3D(pos_x, pos_y, pos_z) * RotationY(pos_theta));
+    auto pv = dtor.pickMotherVolume(sdet).placeVolume(assembly, final_pos);
+    pv.addPhysVolID("system", det_id);
+    sdet.setPlacement(pv);
+
+    assembly->GetShape()->ComputeBBox();
+    return sdet;
+}
+
+DECLARE_DETELEMENT(ip6_CylindricalDipoleMagnet, build_magnet)