diff --git a/Detector/DetCRD/CMakeLists.txt b/Detector/DetCRD/CMakeLists.txt
index 62ac77358c1a99766a4be025bb0717082693b99b..a2a26a56b925bb76a5b5f5917d9c69abadc29c08 100644
--- a/Detector/DetCRD/CMakeLists.txt
+++ b/Detector/DetCRD/CMakeLists.txt
@@ -11,8 +11,8 @@ gaudi_add_module(DetCRD
                          src/Calorimeter/Lumical_v01_geo.cpp
                          src/Other/Lumical_v01_geo_beampipe.cpp
                          src/Other/CRDBeamPipe_v01_geo.cpp
-                         src/Muon/Muon_Barrel_v01.cpp
-                         src/Muon/Muon_Endcap_v01.cpp
+                         src/Muon/Muon_Barrel_v01_01.cpp
+                         src/Muon/Muon_Endcap_v01_01.cpp
                          src/Tracker/SiTrackerSkewRing_v01_geo.cpp
                          src/Tracker/SiTrackerStaggeredLadder_v01_geo.cpp
                          src/Tracker/TPC_Simple_o1_v01.cpp
diff --git a/Detector/DetCRD/compact/CRD_common_v01/Muon_Barrel_v01.xml b/Detector/DetCRD/compact/CRD_common_v01/Muon_Barrel_v01.xml
deleted file mode 100644
index d392b47abecfd0df1e66f3e995a11b3cd972b2f8..0000000000000000000000000000000000000000
--- a/Detector/DetCRD/compact/CRD_common_v01/Muon_Barrel_v01.xml
+++ /dev/null
@@ -1,110 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<lccdd>
- 
-  <info name="Muon_Barrel"
-	title="Test with A Single Muon Barrel"
-	author="Zibing Bai"
-	url="http://cepcgit.ihep.ac.cn"
-	status="development"
-	version="v01">
-    <comment>Test with A Single Muon Barrel</comment>        
-  </info>
-  <define>
-    <constant name="env_num" value="2"/>
-    <constant name="Fe_num" value="12"/>
-    <constant name="superlayer_num" value="6"/>
-    <constant name="strip_num_0" value="40"/>
-    <constant name="strip_num_1" value="48"/>
-    <constant name="strip_num_2" value="62"/>
-    <constant name="strip_num_3" value="74"/>
-    <constant name="strip_num_4" value="84"/>
-    <constant name="strip_num_5" value="96"/>
-    <constant name="strip_num" value="100"/>
-
-    <constant name="Fe_y" value="strip_z+2*surf+Fe_gap"/>
-    <constant name="Fe_z" value="Fe_x1"/>
-    <constant name="Fe_posx" value="-1*Fe_x1"/>
-
-    <constant name="env_y" value="Fe_y"/>
-    <constant name="env_posy" value="0.5*env_y"/>
-
-    <constant name="layer_init" value="-21.5*cm"/>
-    <constant name="layer_gap" value="12.5*cm"/>
-    <constant name="superlayer_air" value="0.1*cm"/>
-    <constant name="superlayer_Al" value="0.5*superlayer_air"/>
-
-    <constant name="superlayer_y" value="2*strip_y+2*superlayer_air"/>
-    <constant name="superlayer_z" value="strip_z+2*surf+2*superlayer_air"/>
-
-    <constant name="Al_posx" value="0"/>
-    <constant name="Al_posy" value="0"/>
-    <constant name="Al_posz" value="0"/>
-
-  </define>
-
-  <detectors>
-    <detector id="0" name="Muon_Barrel_v01" type="Muon_Barrel_v01" readout="MuonBarrelCollection" vis="VisibleBlank_Muon" material="Air">
-      <material name="Air"/>
-      <position x="0" y="0" z="0"/>
-      <dimensions dx="0.5*world_x" dy="0.5*world_y" dz="0.5*world_z"/>
-      <module id="Fe_num" name="env" type="env" vis="InvisibleWithChildren_Muon" material="Air">
-        <position x="0" y="env_posy" z="0"/>
-        <dimensions dy="0.5*env_y"/>
-        <module id="0" name="Fe" type="Fe" vis="VisibleMental_Muon" material="Iron">
-          <material name="Iron"/>
-          <position x="Fe_posx" y="0"/>
-          <dimensions x1="0.5*Fe_x1" y1="0.5*Fe_y" y2="0.5*Fe_y" dz="0.5*Fe_z"/>
-          <module id="superlayer_num" name="Superlayer" type="Superlayer" vis="VisibleBlank_Muon" material="Air">
-            <module id="0" name="Layer_Al" type="Layer_Al" vis="VisibleMental_Muon" material="Aluminum">
-              <material name="Aluminum"/>
-              <position x="0" y="0" z="0"/>
-              <module id="0" name="Stripe" type="Stripe" vis="VisibleBlank_Muon" material="Air">
-                <material name="Air"/>
-                <dimensions dx="0.5*strip_x"  dy="0.5*strip_y"  dz="0.5*strip_z+SiPM_z"/>
-                <module id="0" type="surface" name="surface" vis="VisibleGreen_Muon" material="BC420">
-                  <position x="0" y="0" z="0"/>
-                  <dimensions dx="0.5*surface_x" dy="0.5*surface_y" dz="0.5*surface_z"/>
-                  <section name="cut1" vis="VisibleBlank_Muon" material="Air">
-                    <position x="cut1_posx" y="cut1_posy" z="cut1_posz"/>
-                    <dimensions dx="0.5*cut1_x" dy="0.5*cut1_y" dz="0.5*cut1_z"/>
-                  </section>
-                </module>
-                <module id="1" type="BC420" name="BC420" vis="VisibleGreen_Muon" material="BC420">
-                  <position x="0" y="0" z="0"/>
-                  <dimensions dx="0.5*BC420_x" dy="0.5*BC420_y" dz="0.5*BC420_z"/>
-                  <section name="cut3" vis="VisibleBlank_Muon" material="Air">
-                    <position x="cut3_posx" y="cut3_posy" z="cut3_posz"/>
-                    <dimensions rmin="0" rmax="cut3_rmax" dz="0.5*cut3_z"/>
-                    <section name="cut2" vis="VisibleBlank_Muon" material="Air">
-                      <position x="cut2_posx" y="cut2_posy" z="cut2_posz"/>
-                      <dimensions dx="0.5*cut2_x" dy="0.5*cut2_y" dz="0.5*cut2_z"/>
-                    </section>
-                  </section>
-                </module>
-                <section id="0" type="cladding" name="cladding" vis="VisibleBlue_Muon" material="Pethylene1">
-                  <position x="0" y="0" z="0"/>
-                  <dimensions rmin="cladding_rmin" rmax="cladding_rmax" dz="0.5*cladding_z"/>
-                </section>
-                <section id="1" type="core" name="core" vis="VisibleRed_Muon" material="Pethylene2">
-                  <position x="0" y="0" z="0"/>
-                  <dimensions rmin="0" rmax="core_rmax" dz="0.5*core_z"/>
-                </section>
-                <module id="2" type="SiPM" name="SiPM" vis="VisibleBlue_Muon" material="Air">
-                  <position x="SiPM_posx" y="SiPM_posy" z="SiPM_posz"/>
-                  <dimensions dx="0.5*SiPM_x" dy="0.5*SiPM_y" dz="0.5*SiPM_z"/>
-                </module>
-              </module>
-            </module>
-          </module>
-        </module>
-      </module>
-    </detector>
-  </detectors>
-
-  <readouts>
-    <readout name="MuonBarrelCollection">
-      <id>Env:2,Fe:2,Superlayer:2,Layer:2,Stripe:10:3,SiPM:2</id>
-    </readout>
-  </readouts>
-
-</lccdd>
diff --git a/Detector/DetCRD/compact/CRD_common_v01/Muon_Barrel_v01_01.xml b/Detector/DetCRD/compact/CRD_common_v01/Muon_Barrel_v01_01.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3c262fa2cdbdc96a6def2633cbf0f8e2ffc2ecd1
--- /dev/null
+++ b/Detector/DetCRD/compact/CRD_common_v01/Muon_Barrel_v01_01.xml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<lccdd>
+ 
+  <info name="Muon_Barrel"
+	title="Test with A Single Muon Barrel"
+	author="Zibing Bai"
+	url="http://cepcgit.ihep.ac.cn"
+	status="development"
+	version="v01">
+    <comment>Test with A Single Muon Barrel</comment>        
+  </info>
+
+  <define>
+    <!--Muon Barrel-->
+    <constant name="Muon_barrel_superlayer_num" value="6"/>
+    <constant name="Muon_barrel_strip_num_0" value="40"/>
+    <constant name="Muon_barrel_strip_num_1" value="48"/>
+    <constant name="Muon_barrel_strip_num_2" value="62"/>
+    <constant name="Muon_barrel_strip_num_3" value="74"/>
+    <constant name="Muon_barrel_strip_num_4" value="84"/>
+    <constant name="Muon_barrel_strip_num_5" value="96"/>
+    <constant name="Muon_barrel_strip_num" value="100"/>
+
+    <constant name="Muon_barrel_iron_x1" value="Muon_standard_scale"/>
+    <constant name="Muon_barrel_iron_y" value="Muon_strip_z+2*Muon_strip_surf+Muon_Iron_gap_z"/>
+    <constant name="Muon_barrel_iron_z" value="Muon_standard_scale"/>
+    <constant name="Muon_barrel_iron_posx" value="-1*Muon_standard_scale"/>
+
+    <constant name="Muon_barrel_barrel_y" value="Muon_barrel_iron_y"/>
+    <constant name="Muon_barrel_barrel_posy" value="0.5*Muon_barrel_barrel_y"/>
+
+    <constant name="Muon_barrel_superlayer_init" value="-21.5*cm"/>
+    <constant name="Muon_barrel_superlayer_gap" value="12.5*cm"/>
+    <constant name="Muon_barrel_superlayer_air_gap" value="0.1*cm"/>
+    <constant name="Muon_barrel_superlayer_aluminum_gap" value="0.5*Muon_barrel_superlayer_air_gap"/>
+
+    <constant name="Muon_barrel_superlayer_y" value="2*Muon_strip_y+2*Muon_barrel_superlayer_air_gap"/>
+    <constant name="Muon_barrel_superlayer_z" value="Muon_strip_z+2*Muon_strip_surf+2*Muon_barrel_superlayer_air_gap"/> 
+    <!--Checkout-->
+    <constant name="Muon_barrel_inner_radius" value="483*cm"/>
+    <constant name="Muon_barrel_barrel_num" value="2"/>
+    <constant name="Muon_barrel_iron_part_num" value="12"/>
+
+  </define>
+
+  <detectors>
+    <detector id="201" name="Muon_Barrel_v01_01" type="Muon_Barrel_v01_01" readout="MuonBarrelCollection" vis="WhiteVis">
+      <position x="0" y="0" z="0"/>
+      <barrel id="Muon_barrel_iron_part_num" name="Muon_barrel_barrel" type="Muon_barrel_barrel" vis="SeeThrough">
+        <position x="0" y="Muon_barrel_barrel_posy" z="0"/>
+        <iron id="0" name="Muon_barrel_iron_part" type="Muon_barrel_iron_part" vis="GrayVis" material="Iron">
+          <material name="Iron"/>
+          <position x="Muon_barrel_iron_posx" y="0"/>
+          <dimensions x1="0.5*Muon_barrel_iron_x1" y1="0.5*Muon_barrel_iron_y" y2="0.5*Muon_barrel_iron_y" dz="0.5*Muon_barrel_iron_z"/>
+          <superlayer id="Muon_barrel_superlayer_num" name="Muon_barrel_superlayer" type="Muon_barrel_superlayer" vis="GreenVis" material="Air">
+            <aluminum id="0" name="Muon_barrel_superlayer_aluminum" type="Muon_barrel_superlayer_aluminum" vis="GrayVis" material="Aluminum">
+              <material name="Aluminum"/>
+              <position x="0" y="0" z="0"/>
+              <stripe id="0" name="Muon_stripe" type="Muon_stripe" vis="GreenVis" material="Air">
+                <material name="Air"/>
+                <dimensions dx="0.5*Muon_strip_x"  dy="0.5*Muon_strip_y"  dz="0.5*Muon_strip_z+Muon_strip_SiPM_z"/>
+                <component id="0" type="Muon_strip_surface" name="Muon_strip_surface" vis="GreenVis" material="BC420">
+                  <position x="0" y="0" z="0"/>
+                  <dimensions dx="0.5*Muon_strip_surface_x" dy="0.5*Muon_strip_surface_y" dz="0.5*Muon_strip_surface_z"/>
+                  <cut name="Muon_strip_cut1" vis="GreenVis" material="Air">
+                    <position x="Muon_strip_cut1_posx" y="Muon_strip_cut1_posy" z="Muon_strip_cut1_posz"/>
+                    <dimensions dx="0.5*Muon_strip_cut1_x" dy="0.5*Muon_strip_cut1_y" dz="0.5*Muon_strip_cut1_z"/>
+                  </cut>
+                </component>
+                <component id="1" type="Muon_strip_scintillator" name="Muon_strip_scintillator" vis="GreenVis" material="BC420">
+                  <position x="0" y="0" z="0"/>
+                  <dimensions dx="0.5*Muon_strip_scintillator_x" dy="0.5*Muon_strip_scintillator_y" dz="0.5*Muon_strip_scintillator_z"/>
+                  <cut name="Muon_strip_cut3" vis="GreenVis" material="Air">
+                    <position x="Muon_strip_cut3_posx" y="Muon_strip_cut3_posy" z="Muon_strip_cut3_posz"/>
+                    <dimensions rmin="0" rmax="Muon_strip_cut3_rmax" dz="0.5*Muon_strip_cut3_z"/>
+                    <comb name="Muon_strip_cut2" vis="GreenVis" material="Air">
+                      <position x="Muon_strip_cut2_posx" y="Muon_strip_cut2_posy" z="Muon_strip_cut2_posz"/>
+                      <dimensions dx="0.5*Muon_strip_cut2_x" dy="0.5*Muon_strip_cut2_y" dz="0.5*Muon_strip_cut2_z"/>
+                    </comb>
+                  </cut>
+                </component>
+                <fiber id="0" type="Muon_fiber_cladding" name="Muon_fiber_cladding" vis="GreenVis" material="Pethylene1">
+                  <position x="0" y="0" z="0"/>
+                  <dimensions rmin="Muon_fiber_cladding_rmin" rmax="Muon_fiber_cladding_rmax" dz="0.5*Muon_fiber_cladding_z"/>
+                </fiber>
+                <fiber id="1" type="Muon_fiber_core" name="Muon_fiber_core" vis="GreenVis" material="Pethylene2">
+                  <position x="0" y="0" z="0"/>
+                  <dimensions rmin="0" rmax="Muon_fiber_core_rmax" dz="0.5*Muon_fiber_core_z"/>
+                </fiber>
+                <component id="2" type="Muon_strip_SiPM" name="Muon_strip_SiPM" vis="GreenVis" material="Air">
+                  <position x="Muon_strip_SiPM_posx" y="Muon_strip_SiPM_posy" z="Muon_strip_SiPM_posz"/>
+                  <dimensions dx="0.5*Muon_strip_SiPM_x" dy="0.5*Muon_strip_SiPM_y" dz="0.5*Muon_strip_SiPM_z"/>
+                </component>
+              </stripe>
+            </aluminum>
+          </superlayer>
+        </iron>
+      </barrel>
+    </detector>
+  </detectors>
+
+  <readouts>
+    <readout name="MuonBarrelCollection">
+      <id>system:5,Env:5,Fe:5,Superlayer:4,Layer:2,Stripe:9,SiPM:2</id>
+    </readout>
+  </readouts>
+
+</lccdd>
diff --git a/Detector/DetCRD/compact/CRD_common_v01/Muon_Endcap_v01.xml b/Detector/DetCRD/compact/CRD_common_v01/Muon_Endcap_v01.xml
deleted file mode 100644
index 71e396de8205b487de320e6ef80cdd9bb73a2eef..0000000000000000000000000000000000000000
--- a/Detector/DetCRD/compact/CRD_common_v01/Muon_Endcap_v01.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<lccdd>
- 
-  <info name="Muon_Endcap"
-	title="Test with Two Single Muon Endcaps"
-	author="Zibing Bai"
-	url="http://cepcgit.ihep.ac.cn"
-	status="development"
-	version="v01">
-    <comment>Test with Two Single Muon Endcaps</comment>        
-  </info>
-  <define>
-    <constant name="env_num_endcap" value="4"/>
-    <constant name="layer_num" value="2"/>
-    <constant name="strip_num_endcap" value="146"/>
-    <constant name="strip_num_cut" value="13"/>
-    <constant name="env_rmin" value="52*cm"/>
-    <constant name="env_z" value="3*cm"/>
-    <constant name="multiple" value="1.05"/>
-
-    <constant name="envelope_halfZ" value="strip_z+2*surf+Fe_gap+env_z"/>
-    <constant name="env_posy_endcap" value="strip_z+2*surf+Fe_gap+0.5*env_z"/>
-  </define>
-
-  <detectors>
-    <detector id="2" name="Muon_Endcap_v01" type="Muon_Endcap_v01" readout="MuonEndcapCollection" vis="VisibleMental_Muon" material="Iron">
-      <material name="Iron"/>
-      <position x="0" y="env_posy_endcap" z="0"/>
-      <dimensions rmin="env_rmin" dz="0.5*env_z"/>
-      <module id="0" name="Stripe" type="Stripe" vis="VisibleBlank_Muon" material="Air">
-        <material name="Air"/>
-        <dimensions dx="0.5*strip_x"  dy="0.5*strip_y"  dz="0.5*strip_z+SiPM_z"/>
-        <module id="0" type="surface" name="surface" vis="VisibleGreen_Muon" material="BC420">
-          <position x="0" y="0" z="0"/>
-          <dimensions dx="0.5*surface_x" dy="0.5*surface_y" dz="0.5*surface_z"/>
-          <section name="cut1" vis="VisibleBlank_Muon" material="Air">
-            <position x="cut1_posx" y="cut1_posy" z="cut1_posz"/>
-            <dimensions dx="0.5*cut1_x" dy="0.5*cut1_y" dz="0.5*cut1_z"/>
-          </section>
-        </module>
-        <module id="1" type="BC420" name="BC420" vis="VisibleGreen_Muon" material="BC420">
-          <position x="0" y="0" z="0"/>
-          <dimensions dx="0.5*BC420_x" dy="0.5*BC420_y" dz="0.5*BC420_z"/>
-          <section name="cut3" vis="VisibleBlank_Muon" material="Air">
-            <position x="cut3_posx" y="cut3_posy" z="cut3_posz"/>
-            <dimensions rmin="0" rmax="cut3_rmax" dz="0.5*cut3_z"/>
-            <section name="cut2" vis="VisibleBlank_Muon" material="Air">
-              <position x="cut2_posx" y="cut2_posy" z="cut2_posz"/>
-              <dimensions dx="0.5*cut2_x" dy="0.5*cut2_y" dz="0.5*cut2_z"/>
-            </section>
-          </section>
-        </module>
-        <section id="0" type="cladding" name="cladding" vis="VisibleBlue_Muon" material="Pethylene1">
-          <position x="0" y="0" z="0"/>
-          <dimensions rmin="cladding_rmin" rmax="cladding_rmax" dz="0.5*cladding_z"/>
-        </section>
-        <section id="1" type="core" name="core" vis="VisibleRed_Muon" material="Pethylene2">
-          <position x="0" y="0" z="0"/>
-          <dimensions rmin="0" rmax="core_rmax" dz="0.5*core_z"/>
-        </section>
-        <module id="2" type="SiPM" name="SiPM" vis="VisibleBlue_Muon" material="Air">
-          <position x="SiPM_posx" y="SiPM_posy" z="SiPM_posz"/>
-          <dimensions dx="0.5*SiPM_x" dy="0.5*SiPM_y" dz="0.5*SiPM_z"/>
-        </module>
-      </module>
-    </detector>
-  </detectors>
-
-  <readouts>
-    <readout name="MuonEndcapCollection">
-      <id>Endcap:2,Env:2,Layer:2,Stripe:8:3,SiPM:2</id>
-    </readout>
-  </readouts>
-
-</lccdd>
diff --git a/Detector/DetCRD/compact/CRD_common_v01/Muon_Endcap_v01_01.xml b/Detector/DetCRD/compact/CRD_common_v01/Muon_Endcap_v01_01.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2328674ad08f4bcb22847f1ca6a349e9de0cff7f
--- /dev/null
+++ b/Detector/DetCRD/compact/CRD_common_v01/Muon_Endcap_v01_01.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<lccdd>
+ 
+  <info name="Muon_Endcap"
+	title="Test with Two Single Muon Endcaps"
+	author="Zibing Bai"
+	url="http://cepcgit.ihep.ac.cn"
+	status="development"
+	version="v01">
+    <comment>Test with Two Single Muon Endcaps</comment>        
+  </info>
+
+  <define>
+    <!--Muon Endcap-->
+    <constant name="Muon_endcap_part_num" value="4"/>
+    <constant name="Muon_endcap_superlayer_num" value="6"/>
+    <constant name="Muon_endcap_iron_gap_num" value="Muon_endcap_superlayer_num+1"/>
+    <constant name="Muon_endcap_layer_num" value="2"/>
+    <constant name="Muon_endcap_strip_num" value="146"/>
+    <constant name="Muon_endcap_strip_num_cut" value="13"/>
+    <constant name="Muon_endcap_endcap_rmin" value="52*cm"/>
+    <constant name="Muon_endcap_magnification" value="1.02"/>
+
+    <constant name="Muon_endcap_iron_gap" value="12.5*cm"/>
+    <constant name="Muon_endcap_endcap_z" value="Muon_endcap_iron_gap_num*Muon_endcap_iron_gap+2*Muon_endcap_superlayer_num*Muon_strip_y"/>
+    <constant name="Muon_endcap_endcap_posy" value="Muon_strip_z+2*Muon_strip_surf+Muon_Iron_gap_z+0.5*Muon_endcap_endcap_z"/>
+  </define>
+
+  <detectors>
+    <detector id="202" name="Muon_Endcap_v01_01" type="Muon_Endcap_v01_01" readout="MuonEndcapCollection" vis="GrayVis" material="Iron">
+      <material name="Iron"/>
+      <position x="0" y="Muon_endcap_endcap_posy" z="0"/>
+      <dimensions rmin="Muon_endcap_endcap_rmin" dz="0.5*Muon_endcap_endcap_z"/>
+      <stripe id="0" name="Muon_stripe" type="Muon_stripe" vis="GreenVis" material="Air">
+        <material name="Air"/>
+        <dimensions dx="0.5*Muon_strip_x"  dy="0.5*Muon_strip_y"  dz="0.5*Muon_strip_z+Muon_strip_SiPM_z"/>
+        <component id="0" type="Muon_strip_surface" name="Muon_strip_surface" vis="GreenVis" material="BC420">
+          <position x="0" y="0" z="0"/>
+          <dimensions dx="0.5*Muon_strip_surface_x" dy="0.5*Muon_strip_surface_y" dz="0.5*Muon_strip_surface_z"/>
+          <cut name="Muon_strip_cut1" vis="GreenVis" material="Air">
+            <position x="Muon_strip_cut1_posx" y="Muon_strip_cut1_posy" z="Muon_strip_cut1_posz"/>
+            <dimensions dx="0.5*Muon_strip_cut1_x" dy="0.5*Muon_strip_cut1_y" dz="0.5*Muon_strip_cut1_z"/>
+          </cut>
+        </component>
+        <component id="1" type="Muon_strip_scintillator" name="Muon_strip_scintillator" vis="GreenVis" material="BC420">
+          <position x="0" y="0" z="0"/>
+          <dimensions dx="0.5*Muon_strip_scintillator_x" dy="0.5*Muon_strip_scintillator_y" dz="0.5*Muon_strip_scintillator_z"/>
+          <cut name="Muon_strip_cut3" vis="GreenVis" material="Air">
+            <position x="Muon_strip_cut3_posx" y="Muon_strip_cut3_posy" z="Muon_strip_cut3_posz"/>
+            <dimensions rmin="0" rmax="Muon_strip_cut3_rmax" dz="0.5*Muon_strip_cut3_z"/>
+            <comb name="Muon_strip_cut2" vis="GreenVis" material="Air">
+              <position x="Muon_strip_cut2_posx" y="Muon_strip_cut2_posy" z="Muon_strip_cut2_posz"/>
+              <dimensions dx="0.5*Muon_strip_cut2_x" dy="0.5*Muon_strip_cut2_y" dz="0.5*Muon_strip_cut2_z"/>
+            </comb>
+          </cut>
+        </component>
+        <fiber id="0" type="Muon_fiber_cladding" name="Muon_fiber_cladding" vis="GreenVis" material="Pethylene1">
+          <position x="0" y="0" z="0"/>
+          <dimensions rmin="Muon_fiber_cladding_rmin" rmax="Muon_fiber_cladding_rmax" dz="0.5*Muon_fiber_cladding_z"/>
+        </fiber>
+        <fiber id="1" type="Muon_fiber_core" name="Muon_fiber_core" vis="GreenVis" material="Pethylene2">
+          <position x="0" y="0" z="0"/>
+          <dimensions rmin="0" rmax="Muon_fiber_core_rmax" dz="0.5*Muon_fiber_core_z"/>
+        </fiber>
+        <component id="2" type="Muon_strip_SiPM" name="Muon_strip_SiPM" vis="GreenVis" material="Air">
+          <position x="Muon_strip_SiPM_posx" y="Muon_strip_SiPM_posy" z="Muon_strip_SiPM_posz"/>
+          <dimensions dx="0.5*Muon_strip_SiPM_x" dy="0.5*Muon_strip_SiPM_y" dz="0.5*Muon_strip_SiPM_z"/>
+        </component>
+      </stripe>
+    </detector>
+  </detectors>
+
+
+  <readouts>
+    <readout name="MuonEndcapCollection">
+      <id>system:5,Env:5,Endcap:2,Superlayer:15:4,Layer:2,Stripe:9,SiPM:2</id>
+      <!--id>Endcap:2,Superlayer:2,Env:2,Layer:2,Stripe:10:3,SiPM:2</id-->
+    </readout>
+  </readouts>
+
+</lccdd>
diff --git a/Detector/DetCRD/compact/CRD_common_v02/materials.xml b/Detector/DetCRD/compact/CRD_common_v02/materials.xml
index d59e16913ed1379dd354177529ce493d338ad93c..26a99dd0c1732d88c90b3d55452218a4af6203fb 100644
--- a/Detector/DetCRD/compact/CRD_common_v02/materials.xml
+++ b/Detector/DetCRD/compact/CRD_common_v02/materials.xml
@@ -1,3 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<lccdd>
+  <properties>
+    <matrix name="RINDEX__Air" coldim="2" values="
+    1.0*eV 1.00029
+    5.1*eV 1.00029
+    "/>
+    <matrix name="RINDEX__BC420" coldim="2" values="
+    2.38*eV 1.58
+    2.88*eV 1.58
+    3.45*eV 1.58
+    "/>
+    <matrix name="ABSLENGTH__BC420" coldim="2" values="
+    2.38*eV 10*cm
+    2.88*eV 10*cm
+    3.45*eV 10*cm
+    "/>
+    <matrix name="WLSCOMPONENT__BC420" coldim="2" values="
+    2.38*eV 0.
+    2.88*eV 1.
+    3.45*eV 0.
+    "/>
+    <matrix name="SCINTILLATIONCOMPONENT__BC420" coldim="2" values="
+    2.38*eV 1.0
+    2.88*eV 1.0
+    3.45*eV 1.0
+    "/>
+    <matrix name="RINDEX__Pethylene1" coldim="2" values="
+    2.0*eV 1.49
+    2.87*eV 1.49
+    2.90*eV 1.49
+    3.47*eV 1.49
+    "/>
+    <matrix name="ABSLENGTH__Pethylene1" coldim="2" values="
+    2.0*eV 3.0*m
+    2.87*eV 3.0*m
+    2.90*eV 3.0*m
+    3.47*eV 3.0*m
+    "/>
+    <matrix name="RINDEX__Pethylene2" coldim="2" values="
+    2.0*eV 1.60
+    2.87*eV 1.60
+    2.90*eV 1.60
+    3.47*eV 1.60
+    "/>
+    <matrix name="WLSABSLENGTH__Pethylene2" coldim="2" values="
+    2.0*eV 3.0*m
+    2.87*eV 3.0*m
+    2.90*eV 0.1*mm
+    3.47*eV 0.1*mm
+    "/>
+    <matrix name="WLSCOMPONENT__Pethylene2" coldim="2" values="
+    2.0*eV 1.0
+    2.87*eV 1.0
+    2.90*eV 0.
+    3.47*eV 0.  
+    "/>
+  </properties>
+
   <materials>
     <isotope N="1" Z="1" name="H1">
       <atom unit="g/mole" value="1.00782503081372"/>
@@ -714,4 +773,49 @@
       <fraction n="0.56" ref="Si" />
       <fraction n="1.428" ref="O" />
     </material>
+
+    <material name="BC420">
+      <D type="density" value="1.032" unit="g/cm3"/>
+      <composite n="10" ref="C"/>
+      <composite n="11" ref="H"/>
+      <property name="RINDEX" ref="RINDEX__BC420"/>
+      <property name="ABSLENGTH" ref="ABSLENGTH__BC420"/>
+      <property name="WLSCOMPONENT" ref="WLSCOMPONENT__BC420"/>
+      <property name="SCINTILLATIONCOMPONENT1" ref="SCINTILLATIONCOMPONENT__BC420"/>
+      <property name="SCINTILLATIONCOMPONENT2" ref="SCINTILLATIONCOMPONENT__BC420"/>
+      <constant name="SCINTILLATIONYIELD" value="10240./MeV"/>
+      <constant name="RESOLUTIONSCALE" value="2.5"/>
+      <constant name="SCINTILLATIONTIMECONSTANT1" value="0.9*ns"/>
+      <constant name="SCINTILLATIONTIMECONSTANT2" value="2.1*ns"/>
+      <constant name="SCINTILLATIONYIELD1" value="1.0"/>
+      <constant name="SCINTILLATIONYIELD2" value="0."/>
+      <constant name="BirksConstant" value="0.126*mm/MeV"/>
+    </material>
+
+    <material name="Pethylene1">
+      <D type="density" value="1200" unit="kg/m3"/>
+      <composite n="2" ref="C"/>
+      <composite n="4" ref="H"/>
+      <property name="RINDEX" ref="RINDEX__Pethylene1"/>
+      <property name="ABSLENGTH" ref="ABSLENGTH__Pethylene1"/>
+    </material>
+
+    <material name="Pethylene2">
+      <D type="density" value="1190" unit="kg/m3"/>
+      <composite n="5" ref="C"/>
+      <composite n="8" ref="H"/>
+      <composite n="2" ref="O"/>
+      <property name="RINDEX" ref="RINDEX__Pethylene2"/>
+      <property name="WLSABSLENGTH" ref="WLSABSLENGTH__Pethylene2"/>
+      <property name="WLSCOMPONENT" ref="WLSCOMPONENT__Pethylene2"/>
+      <constant name="WLSTIMECONSTANT" value="0.5*ns"/>
+    </material>
+
   </materials>
+
+  <surfaces>
+    <opticalsurface name="Muon_surf_stripe" model="glisur" finish="polished" type="dielectric_metal"/>
+    <opticalsurface name="Muon_surf_fiber" model="glisur" finish="polished" type="dielectric_metal"/>
+  </surfaces>  
+
+</lccdd>
diff --git a/Detector/DetCRD/compact/Standalone/Muon_Dimensions_v01_01.xml b/Detector/DetCRD/compact/Standalone/Muon_Dimensions_v01_01.xml
new file mode 100644
index 0000000000000000000000000000000000000000..44d335eb0451887c9afc7c101dd8fff5c435a9ae
--- /dev/null
+++ b/Detector/DetCRD/compact/Standalone/Muon_Dimensions_v01_01.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<lccdd>
+  <info name="MuonDimensions"
+       title="Dimensions of Muon Detector"
+       author="baizb"
+       url="no"
+       status="development"
+       version="1.0">
+    <comment>
+      undeterminded parameters
+    </comment>
+  </info>
+
+  <define>
+    <!--strip & fiber dimensions-->
+    <constant name="Muon_strip_x" value="4*cm"/>
+    <constant name="Muon_strip_y" value="1*cm"/>
+    <constant name="Muon_strip_z" value="4*m"/>
+    <constant name="Muon_strip_surf" value="1*mm"/>
+
+    <constant name="Muon_strip_surface_x" value="Muon_strip_x"/>
+    <constant name="Muon_strip_surface_y" value="Muon_strip_y"/>
+    <constant name="Muon_strip_surface_z" value="Muon_strip_z"/>
+
+    <constant name="Muon_strip_scintillator_x" value="Muon_strip_x-2*Muon_strip_surf"/>
+    <constant name="Muon_strip_scintillator_y" value="Muon_strip_y-2*Muon_strip_surf"/>
+    <constant name="Muon_strip_scintillator_z" value="Muon_strip_z"/>
+
+    <constant name="Muon_strip_SiPM_x" value="6*mm"/>
+    <constant name="Muon_strip_SiPM_y" value="6*mm"/>
+    <constant name="Muon_strip_SiPM_z" value="Muon_strip_surf"/>
+    <constant name="Muon_strip_SiPM_posx" value="0"/>
+    <constant name="Muon_strip_SiPM_posy" value="0"/>
+    <constant name="Muon_strip_SiPM_posz" value="0.5*Muon_strip_z+0.5*Muon_strip_SiPM_z"/>
+
+    <constant name="Muon_fiber_core_rmax" value="0.95*mm"/>
+    <constant name="Muon_fiber_core_z" value="Muon_strip_z"/>
+
+    <constant name="Muon_fiber_cladding_rmin" value="Muon_fiber_core_rmax"/>
+    <constant name="Muon_fiber_cladding_rmax" value="1*mm"/>
+    <constant name="Muon_fiber_cladding_z" value="Muon_strip_z"/>
+
+    <constant name="Muon_strip_cut_gap" value="0.1*mm"/>
+    <constant name="Muon_strip_cut3_rmax" value="Muon_fiber_cladding_rmax+Muon_strip_cut_gap"/>
+    <constant name="Muon_strip_cut3_z" value="Muon_strip_z"/>
+    <constant name="Muon_strip_cut3_posx" value="0"/>
+    <constant name="Muon_strip_cut3_posy" value="Muon_strip_cut3_rmax-Muon_fiber_cladding_rmax"/>
+    <constant name="Muon_strip_cut3_posz" value="0"/>
+
+    <constant name="Muon_strip_cut1_x" value="2*Muon_strip_cut3_rmax"/>
+    <constant name="Muon_strip_cut1_y" value="Muon_strip_surf"/>
+    <constant name="Muon_strip_cut1_z" value="Muon_strip_z"/>
+    <constant name="Muon_strip_cut1_posx" value="0"/>
+    <constant name="Muon_strip_cut1_posy" value="0.5*Muon_strip_y-0.5*Muon_strip_cut1_y"/>
+    <constant name="Muon_strip_cut1_posz" value="0"/>
+
+    <constant name="Muon_strip_cut2_x" value="Muon_strip_cut1_x"/>
+    <constant name="Muon_strip_cut2_y" value="0.5*Muon_strip_scintillator_y-Muon_strip_cut3_rmax+Muon_fiber_cladding_rmax"/>
+    <constant name="Muon_strip_cut2_z" value="Muon_strip_z"/>
+    <constant name="Muon_strip_cut2_posx" value="0"/>
+    <constant name="Muon_strip_cut2_posy" value="0.5*Muon_strip_scintillator_y-0.5*Muon_strip_cut2_y"/>
+    <constant name="Muon_strip_cut2_posz" value="0"/>
+
+    <!--standard scale-->
+    <constant name="Muon_standard_scale" value="105*cm"/>    
+    <constant name="Muon_Iron_gap_z" value="2.5*cm"/>
+
+    <!--Muon Barrel>
+    <constant name="Muon_barrel_barrel_num" value="2"/>
+    <constant name="Muon_barrel_iron_part_num" value="12"/>
+    <constant name="Muon_barrel_superlayer_num" value="6"/>
+    <constant name="Muon_barrel_strip_num_0" value="40"/>
+    <constant name="Muon_barrel_strip_num_1" value="48"/>
+    <constant name="Muon_barrel_strip_num_2" value="62"/>
+    <constant name="Muon_barrel_strip_num_3" value="74"/>
+    <constant name="Muon_barrel_strip_num_4" value="84"/>
+    <constant name="Muon_barrel_strip_num_5" value="96"/>
+    <constant name="Muon_barrel_strip_num" value="100"/>
+
+    <constant name="Muon_barrel_iron_x1" value="Muon_standard_scale"/>
+    <constant name="Muon_barrel_iron_y" value="Muon_strip_z+2*Muon_strip_surf+Muon_Iron_gap_z"/>
+    <constant name="Muon_barrel_iron_z" value="Muon_standard_scale"/>
+    <constant name="Muon_barrel_iron_posx" value="-1*Muon_standard_scale"/>
+
+    <constant name="Muon_barrel_barrel_y" value="Muon_barrel_iron_y"/>
+    <constant name="Muon_barrel_barrel_posy" value="0.5*Muon_barrel_barrel_y"/>
+
+    <constant name="Muon_barrel_superlayer_init" value="-21.5*cm"/>
+    <constant name="Muon_barrel_superlayer_gap" value="12.5*cm"/>
+    <constant name="Muon_barrel_superlayer_air_gap" value="0.1*cm"/>
+    <constant name="Muon_barrel_superlayer_aluminum_gap" value="0.5*Muon_barrel_superlayer_air_gap"/>
+
+    <constant name="Muon_barrel_superlayer_y" value="2*Muon_strip_y+2*Muon_barrel_superlayer_air_gap"/>
+    <constant name="Muon_barrel_superlayer_z" value="Muon_strip_z+2*Muon_strip_surf+2*Muon_barrel_superlayer_air_gap"/> 
+
+    <Muon Endcap>
+    <constant name="Muon_endcap_part_num" value="4"/>
+    <constant name="Muon_endcap_superlayer_num" value="6"/>
+    <constant name="Muon_endcap_iron_gap_num" value="Muon_endcap_superlayer_num+1"/>
+    <constant name="Muon_endcap_layer_num" value="2"/>
+    <constant name="Muon_endcap_strip_num" value="146"/>
+    <constant name="Muon_endcap_strip_num_cut" value="13"/>
+    <constant name="Muon_endcap_endcap_rmin" value="52*cm"/>
+    <constant name="Muon_endcap_magnification" value="1.02"/>
+
+    <constant name="Muon_endcap_iron_gap" value="12.5*cm"/>
+    <constant name="Muon_endcap_endcap_z" value="Muon_endcap_iron_gap_num*Muon_endcap_iron_gap+2*Muon_endcap_superlayer_num*Muon_strip_y"/>
+    <constant name="Muon_endcap_endcap_posy" value="Muon_strip_z+2*Muon_strip_surf+Muon_Iron_gap_z+0.5*Muon_endcap_endcap_z"/-->
+  </define>
+  
+  <display>
+    <vis name="Invisible" showDaughters="false" visible="false"/>
+    <vis name="SeeThrough" showDaughters="true" visible="false"/>
+    <vis name="RedVis"  r="1.0" g="0.0" b="0.0" showDaughters="true" visible="true"/>
+    <vis name="BlueVis" alpha="1.0" r="0.0" g="0.0" b="1.0" showDaughters="false" visible="true"/>
+    <vis name="GreenVis" alpha="1.0" r="0.0" g="1.0" b="0.0" drawingStyle="solid" lineStyle="solid" showDaughters="true" visible="true"/>
+    <vis name="GrayVis" alpha="1.0" r="0.5" g="0.5" b="0.5" showDaughters="true" visible="true"/>
+    <vis name="WhiteVis" alpha="0.0" r="0.0" g="0.0" b="0.0" showDaughters="true" visible="true"/>
+  </display>
+
+</lccdd>
diff --git a/Detector/DetCRD/compact/Standalone/Standalone-Muon.xml b/Detector/DetCRD/compact/Standalone/Standalone-Muon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f3ccdcba6b1161eba13c3cddf57e3e0a1dfed476
--- /dev/null
+++ b/Detector/DetCRD/compact/Standalone/Standalone-Muon.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<lccdd xmlns:compact="http://www.lcsim.org/schemas/compact/1.0"
+       xmlns:xs="http://www.w3.org/2001/XMLSchema"
+       xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/compact/1.0/compact.xsd">
+  <info name="TDR_o1_v01"
+        title="CepC reference detctor with coil inside Hcal, pixel SIT/SET"
+        author="C.D.Fu, "
+        url="http://cepc.ihep.ac.cn"
+        status="developing"
+        version="v01">
+    <comment>CepC reference detector simulation models used for detector study </comment>
+  </info>
+
+  <includes>
+    <gdmlFile  ref="${DD4hepINSTALL}/DDDetectors/compact/elements.xml"/>
+    <gdmlFile  ref="../materials.xml"/>
+  </includes>
+
+  <define>
+    <!--world size-->
+    <constant name="Muon_world_size" value="25*m"/>
+    <constant name="world_x" value="Muon_world_size"/>
+    <constant name="world_y" value="Muon_world_size"/>
+    <constant name="world_z" value="Muon_world_size"/>
+  </define>
+
+  <include ref="./Muon_Dimensions_v01_01.xml"/>
+
+  <!--include ref="../CRD_common_v01/Beampipe_v01_01.xml"/-->
+  <!--include ref="../CRD_common_v01/VXD_v01_01.xml"/-->
+  <!--include ref="../CRD_common_v01/FTD_SkewRing_v01_01.xml"/-->
+  <!--include ref="../CRD_common_v01/SIT_SimplePixel_v01_01.xml"/-->
+  <!--include ref="../CRD_common_v01/DC_Simple_v01_05.xml"/-->
+  <!--include ref="../CRD_common_v01/SET_SimplePixel_v01_01.xml"/-->
+  <!--include ref="../CRD_common_v01/Ecal_Crystal_Barrel_v01_01.xml"/-->
+  <!--include ref="../CRD_common_v01/Ecal_Crystal_Endcap_v01_01.xml"/-->
+  <include ref="../CRD_common_v01/Muon_Endcap_v01_01.xml"/>
+  <include ref="../CRD_common_v01/Muon_Barrel_v01_01.xml"/>
+ 
+  <!--fields>
+    <field name="InnerSolenoid" type="solenoid"
+           inner_field="Field_nominal_value"
+           outer_field="0"
+           zmax="SolenoidCoil_half_length"
+           inner_radius="SolenoidCoil_center_radius"
+           outer_radius="Solenoid_outer_radius">
+    </field>
+    <field name="OuterSolenoid" type="solenoid"
+           inner_field="0"
+           outer_field="Field_outer_nominal_value"
+           zmax="SolenoidCoil_half_length"
+           inner_radius="Solenoid_outer_radius"
+           outer_radius="Yoke_barrel_inner_radius">
+    </field>
+  </fields-->
+
+</lccdd>
diff --git a/Detector/DetCRD/compact/TDR_o1_v01/TDR_Dimensions_v01_01.xml b/Detector/DetCRD/compact/TDR_o1_v01/TDR_Dimensions_v01_01.xml
index 9ffa7d744176c6d53d4c1bdf286b175f934de2b3..a237e37cf7be977be1d4848fb9f6f19ebb06d007 100644
--- a/Detector/DetCRD/compact/TDR_o1_v01/TDR_Dimensions_v01_01.xml
+++ b/Detector/DetCRD/compact/TDR_o1_v01/TDR_Dimensions_v01_01.xml
@@ -191,6 +191,102 @@
     <constant name="tracker_region_zmax" value="Ecal_endcap_zmin"/>
     <constant name="tracker_region_rmax" value="Ecal_barrel_inner_radius"/>
 
+    <!--Muon Detector-->
+    <!--strip & fiber dimensions-->
+    <constant name="Muon_strip_x" value="4*cm"/>
+    <constant name="Muon_strip_y" value="1*cm"/>
+    <constant name="Muon_strip_z" value="4*m"/>
+    <constant name="Muon_strip_surf" value="1*mm"/>
+
+    <constant name="Muon_strip_surface_x" value="Muon_strip_x"/>
+    <constant name="Muon_strip_surface_y" value="Muon_strip_y"/>
+    <constant name="Muon_strip_surface_z" value="Muon_strip_z"/>
+
+    <constant name="Muon_strip_scintillator_x" value="Muon_strip_x-2*Muon_strip_surf"/>
+    <constant name="Muon_strip_scintillator_y" value="Muon_strip_y-2*Muon_strip_surf"/>
+    <constant name="Muon_strip_scintillator_z" value="Muon_strip_z"/>
+
+    <constant name="Muon_strip_SiPM_x" value="6*mm"/>
+    <constant name="Muon_strip_SiPM_y" value="6*mm"/>
+    <constant name="Muon_strip_SiPM_z" value="Muon_strip_surf"/>
+    <constant name="Muon_strip_SiPM_posx" value="0"/>
+    <constant name="Muon_strip_SiPM_posy" value="0"/>
+    <constant name="Muon_strip_SiPM_posz" value="0.5*Muon_strip_z+0.5*Muon_strip_SiPM_z"/>
+
+    <constant name="Muon_fiber_core_rmax" value="0.95*mm"/>
+    <constant name="Muon_fiber_core_z" value="Muon_strip_z"/>
+
+    <constant name="Muon_fiber_cladding_rmin" value="Muon_fiber_core_rmax"/>
+    <constant name="Muon_fiber_cladding_rmax" value="1*mm"/>
+    <constant name="Muon_fiber_cladding_z" value="Muon_strip_z"/>
+
+    <constant name="Muon_strip_cut_gap" value="0.1*mm"/>
+    <constant name="Muon_strip_cut3_rmax" value="Muon_fiber_cladding_rmax+Muon_strip_cut_gap"/>
+    <constant name="Muon_strip_cut3_z" value="Muon_strip_z"/>
+    <constant name="Muon_strip_cut3_posx" value="0"/>
+    <constant name="Muon_strip_cut3_posy" value="Muon_strip_cut3_rmax-Muon_fiber_cladding_rmax"/>
+    <constant name="Muon_strip_cut3_posz" value="0"/>
+
+    <constant name="Muon_strip_cut1_x" value="2*Muon_strip_cut3_rmax"/>
+    <constant name="Muon_strip_cut1_y" value="Muon_strip_surf"/>
+    <constant name="Muon_strip_cut1_z" value="Muon_strip_z"/>
+    <constant name="Muon_strip_cut1_posx" value="0"/>
+    <constant name="Muon_strip_cut1_posy" value="0.5*Muon_strip_y-0.5*Muon_strip_cut1_y"/>
+    <constant name="Muon_strip_cut1_posz" value="0"/>
+
+    <constant name="Muon_strip_cut2_x" value="Muon_strip_cut1_x"/>
+    <constant name="Muon_strip_cut2_y" value="0.5*Muon_strip_scintillator_y-Muon_strip_cut3_rmax+Muon_fiber_cladding_rmax"/>
+    <constant name="Muon_strip_cut2_z" value="Muon_strip_z"/>
+    <constant name="Muon_strip_cut2_posx" value="0"/>
+    <constant name="Muon_strip_cut2_posy" value="0.5*Muon_strip_scintillator_y-0.5*Muon_strip_cut2_y"/>
+    <constant name="Muon_strip_cut2_posz" value="0"/>
+
+    <!--standard scale-->
+    <constant name="Muon_standard_scale" value="105*cm"/>    
+    <constant name="Muon_Iron_gap_z" value="50*cm"/>
+
+    <!--Muon Barrel>
+    <constant name="Muon_barrel_barrel_num" value="2"/>
+    <constant name="Muon_barrel_iron_part_num" value="12"/>
+    <constant name="Muon_barrel_superlayer_num" value="6"/>
+    <constant name="Muon_barrel_strip_num_0" value="40"/>
+    <constant name="Muon_barrel_strip_num_1" value="48"/>
+    <constant name="Muon_barrel_strip_num_2" value="62"/>
+    <constant name="Muon_barrel_strip_num_3" value="74"/>
+    <constant name="Muon_barrel_strip_num_4" value="84"/>
+    <constant name="Muon_barrel_strip_num_5" value="96"/>
+    <constant name="Muon_barrel_strip_num" value="100"/>
+
+    <constant name="Muon_barrel_iron_x1" value="Muon_standard_scale"/>
+    <constant name="Muon_barrel_iron_y" value="Muon_strip_z+2*Muon_strip_surf+Muon_Iron_gap_z"/>
+    <constant name="Muon_barrel_iron_z" value="Muon_standard_scale"/>
+    <constant name="Muon_barrel_iron_posx" value="-1*Muon_standard_scale"/>
+
+    <constant name="Muon_barrel_barrel_y" value="Muon_barrel_iron_y"/>
+    <constant name="Muon_barrel_barrel_posy" value="0.5*Muon_barrel_barrel_y"/>
+
+    <constant name="Muon_barrel_superlayer_init" value="-21.5*cm"/>
+    <constant name="Muon_barrel_superlayer_gap" value="12.5*cm"/>
+    <constant name="Muon_barrel_superlayer_air_gap" value="0.1*cm"/>
+    <constant name="Muon_barrel_superlayer_aluminum_gap" value="0.5*Muon_barrel_superlayer_air_gap"/>
+
+    <constant name="Muon_barrel_superlayer_y" value="2*Muon_strip_y+2*Muon_barrel_superlayer_air_gap"/>
+    <constant name="Muon_barrel_superlayer_z" value="Muon_strip_z+2*Muon_strip_surf+2*Muon_barrel_superlayer_air_gap"/> 
+
+    <Muon Endcap>
+    <constant name="Muon_endcap_part_num" value="4"/>
+    <constant name="Muon_endcap_superlayer_num" value="6"/>
+    <constant name="Muon_endcap_iron_gap_num" value="Muon_endcap_superlayer_num+1"/>
+    <constant name="Muon_endcap_layer_num" value="2"/>
+    <constant name="Muon_endcap_strip_num" value="146"/>
+    <constant name="Muon_endcap_strip_num_cut" value="13"/>
+    <constant name="Muon_endcap_endcap_rmin" value="52*cm"/>
+    <constant name="Muon_endcap_magnification" value="1.02"/>
+
+    <constant name="Muon_endcap_iron_gap" value="12.5*cm"/>
+    <constant name="Muon_endcap_endcap_z" value="Muon_endcap_iron_gap_num*Muon_endcap_iron_gap+2*Muon_endcap_superlayer_num*Muon_strip_y"/>
+    <constant name="Muon_endcap_endcap_posy" value="Muon_strip_z+2*Muon_strip_surf+Muon_Iron_gap_z+0.5*Muon_endcap_endcap_z"/-->
+
   </define>
   
   <limits>
diff --git a/Detector/DetCRD/compact/TDR_o1_v01/TDR_o1_v01-onlyMuon.xml b/Detector/DetCRD/compact/TDR_o1_v01/TDR_o1_v01-onlyMuon.xml
index 45f6c350052ffd0a19e9d784563701ba0a6cdead..ffc849124d9264b633ec80b164f56064947d9dfd 100644
--- a/Detector/DetCRD/compact/TDR_o1_v01/TDR_o1_v01-onlyMuon.xml
+++ b/Detector/DetCRD/compact/TDR_o1_v01/TDR_o1_v01-onlyMuon.xml
@@ -13,80 +13,17 @@
 
   <includes>
     <gdmlFile  ref="${DD4hepINSTALL}/DDDetectors/compact/elements.xml"/>
-    <gdmlFile  ref="../materials_muon.xml"/>
+    <gdmlFile  ref="../materials.xml"/>
   </includes>
 
-  
   <define>
-    <constant name="world_size" value="25*m"/>
-    <constant name="world_x" value="world_size"/>
-    <constant name="world_y" value="world_size"/>
-    <constant name="world_z" value="world_size"/>
-
-    <constant name="strip_x" value="4*cm"/>
-    <constant name="strip_y" value="1*cm"/>
-    <constant name="strip_z" value="4*m"/>
-    <constant name="surf" value="1*mm"/>
-
-    <constant name="Fe_gap" value="2.5*cm"/>
-    <constant name="Fe_x1" value="105*cm"/>
-
-    <constant name="surface_x" value="strip_x"/>
-    <constant name="surface_y" value="strip_y"/>
-    <constant name="surface_z" value="strip_z"/>
-
-    <constant name="BC420_x" value="strip_x-2*surf"/>
-    <constant name="BC420_y" value="strip_y-2*surf"/>
-    <constant name="BC420_z" value="strip_z"/>
-
-    <constant name="SiPM_x" value="6*mm"/>
-    <constant name="SiPM_y" value="6*mm"/>
-    <constant name="SiPM_z" value="surf"/>
-    <constant name="SiPM_posx" value="0"/>
-    <constant name="SiPM_posy" value="0"/>
-    <constant name="SiPM_posz" value="0.5*strip_z+0.5*SiPM_z"/>
-
-    <constant name="core_rmax" value="0.95*mm"/>
-    <constant name="core_z" value="strip_z"/>
-
-    <constant name="cladding_rmin" value="core_rmax"/>
-    <constant name="cladding_rmax" value="1*mm"/>
-    <constant name="cladding_z" value="strip_z"/>
-
-    <constant name="deviation" value="0.1*mm"/>
-    <constant name="cut3_rmax" value="cladding_rmax+deviation"/>
-    <constant name="cut3_z" value="strip_z"/>
-    <constant name="cut3_posx" value="0"/>
-    <constant name="cut3_posy" value="cut3_rmax-cladding_rmax"/>
-    <constant name="cut3_posz" value="0"/>
-
-    <constant name="cut1_x" value="2*cut3_rmax"/>
-    <constant name="cut1_y" value="surf"/>
-    <constant name="cut1_z" value="strip_z"/>
-    <constant name="cut1_posx" value="0"/>
-    <constant name="cut1_posy" value="0.5*strip_y-0.5*cut1_y"/>
-    <constant name="cut1_posz" value="0"/>
-
-    <constant name="cut2_x" value="cut1_x"/>
-    <constant name="cut2_y" value="0.5*BC420_y-cut3_rmax+cladding_rmax"/>
-    <constant name="cut2_z" value="strip_z"/>
-    <constant name="cut2_posx" value="0"/>
-    <constant name="cut2_posy" value="0.5*BC420_y-0.5*cut2_y"/>
-    <constant name="cut2_posz" value="0"/>
-
-    <include ref="${DD4hepINSTALL}/DDDetectors/compact/detector_types.xml"/>
+    <!--world size-->
+    <constant name="Muon_world_size" value="25*m"/>
+    <constant name="world_x" value="Muon_world_size"/>
+    <constant name="world_y" value="Muon_world_size"/>
+    <constant name="world_z" value="Muon_world_size"/>
   </define>
 
-  <display>
-    <vis name="Invisible_Muon" showDaughters="false" visible="false"/>
-    <vis name="InvisibleWithChildren_Muon" showDaughters="true" visible="false"/>
-    <vis name="VisibleRed_Muon"  r="1.0" g="0.0" b="0.0" showDaughters="true" visible="true"/>
-    <vis name="VisibleBlue_Muon" alpha="0.5" r="0.0" g="0.0" b="1.0" showDaughters="false" visible="true"/>
-    <vis name="VisibleGreen_Muon" alpha="0.3" r="0.0" g="1.0" b="0.0" drawingStyle="solid" lineStyle="solid" showDaughters="true" visible="true"/>
-    <vis name="VisibleMental_Muon" alpha="0.1" r="0.5" g="0.5" b="0.5" showDaughters="true" visible="true"/>
-    <vis name="VisibleBlank_Muon" alpha="0.0" r="0.0" g="0.0" b="0.0" showDaughters="true" visible="true"/>
-  </display>
-
   <include ref="./TDR_Dimensions_v01_01.xml"/>
 
   <!--include ref="../CRD_common_v01/Beampipe_v01_01.xml"/-->
@@ -97,8 +34,8 @@
   <!--include ref="../CRD_common_v01/SET_SimplePixel_v01_01.xml"/-->
   <!--include ref="../CRD_common_v01/Ecal_Crystal_Barrel_v01_01.xml"/-->
   <!--include ref="../CRD_common_v01/Ecal_Crystal_Endcap_v01_01.xml"/-->
-  <include ref="../CRD_common_v01/Muon_Endcap_v01.xml"/>
-  <include ref="../CRD_common_v01/Muon_Barrel_v01.xml"/>
+  <include ref="../CRD_common_v01/Muon_Endcap_v01_01.xml"/>
+  <include ref="../CRD_common_v01/Muon_Barrel_v01_01.xml"/>
  
   <fields>
     <field name="InnerSolenoid" type="solenoid"
diff --git a/Detector/DetCRD/compact/TDR_o1_v01/TDR_o1_v01.xml b/Detector/DetCRD/compact/TDR_o1_v01/TDR_o1_v01.xml
index 50e6fd84342ce19827ede5fe5de1f1fb6484cee7..26bc43aaaa03b2777d4e255f87814d6a06ad8d57 100644
--- a/Detector/DetCRD/compact/TDR_o1_v01/TDR_o1_v01.xml
+++ b/Detector/DetCRD/compact/TDR_o1_v01/TDR_o1_v01.xml
@@ -47,13 +47,13 @@
   <include ref="../CRD_common_v01/Lumical_o1_v01.xml"/>
   <!--preliminary Magnet, to update/-->
   <include ref="../CRD_common_v02/Coil_Simple_v01_02.xml"/>
-  <!--preliminary Muon, to update/-->
+  <!--preliminary Muon, to update/>
   <include ref="../CRD_common_v02/Yoke_Polyhedra_Barrel_v01_01.xml"/>
-  <include ref="../CRD_common_v02/Yoke_Polyhedra_Endcaps_v01_01.xml"/>
+  <include ref="../CRD_common_v02/Yoke_Polyhedra_Endcaps_v01_01.xml"/-->
  
-  <!--muon detector/-->
-  <!--include ref="../CRD_common_v01/Muon_Barrel_v01.xml"/-->
-  <!--include ref="../CRD_common_v01/Muon_Endcap_v01.xml"/-->
+  <!--muon detector-->
+  <include ref="../CRD_common_v01/Muon_Barrel_v01_01.xml"/>
+  <include ref="../CRD_common_v01/Muon_Endcap_v01_01.xml"/>
  
   <fields>
     <field name="InnerSolenoid" type="solenoid"
diff --git a/Detector/DetCRD/compact/materials.xml b/Detector/DetCRD/compact/materials.xml
index a86e3c48cccd159c8fa873bf65f60c66bc6378de..da28e0f5fa45e52ab35f93e9c25523c12808101a 100644
--- a/Detector/DetCRD/compact/materials.xml
+++ b/Detector/DetCRD/compact/materials.xml
@@ -1,152 +1,247 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<materials>
-
-  <!--
-       Air by weight from
-
-       http://www.engineeringtoolbox.com/air-composition-24_212.html
-  -->
-  <material name="Air">
-    <D type="density" unit="g/cm3" value="0.0012"/>
-    <fraction n="0.754" ref="N"/>
-    <fraction n="0.234" ref="O"/>
-    <fraction n="0.012" ref="Ar"/>
-  </material>
+<lccdd>
+  <properties>
+    <matrix name="RINDEX__Air" coldim="2" values="
+    1.0*eV 1.00029
+    5.1*eV 1.00029
+    "/>
+    <matrix name="RINDEX__BC420" coldim="2" values="
+    2.38*eV 1.58
+    2.88*eV 1.58
+    3.45*eV 1.58
+    "/>
+    <matrix name="ABSLENGTH__BC420" coldim="2" values="
+    2.38*eV 10*cm
+    2.88*eV 10*cm
+    3.45*eV 10*cm
+    "/>
+    <matrix name="WLSCOMPONENT__BC420" coldim="2" values="
+    2.38*eV 0.
+    2.88*eV 1.
+    3.45*eV 0.
+    "/>
+    <matrix name="SCINTILLATIONCOMPONENT__BC420" coldim="2" values="
+    2.38*eV 1.0
+    2.88*eV 1.0
+    3.45*eV 1.0
+    "/>
+    <matrix name="RINDEX__Pethylene1" coldim="2" values="
+    2.0*eV 1.49
+    2.87*eV 1.49
+    2.90*eV 1.49
+    3.47*eV 1.49
+    "/>
+    <matrix name="ABSLENGTH__Pethylene1" coldim="2" values="
+    2.0*eV 3.0*m
+    2.87*eV 3.0*m
+    2.90*eV 3.0*m
+    3.47*eV 3.0*m
+    "/>
+    <matrix name="RINDEX__Pethylene2" coldim="2" values="
+    2.0*eV 1.60
+    2.87*eV 1.60
+    2.90*eV 1.60
+    3.47*eV 1.60
+    "/>
+    <matrix name="WLSABSLENGTH__Pethylene2" coldim="2" values="
+    2.0*eV 3.0*m
+    2.87*eV 3.0*m
+    2.90*eV 0.1*mm
+    3.47*eV 0.1*mm
+    "/>
+    <matrix name="WLSCOMPONENT__Pethylene2" coldim="2" values="
+    2.0*eV 1.0
+    2.87*eV 1.0
+    2.90*eV 0.
+    3.47*eV 0.  
+    "/>
+  </properties>
+
+  <materials>
+
+    <material name="Air">
+      <D type="density" unit="g/cm3" value="0.0012"/>
+      <fraction n="0.754" ref="N"/>
+      <fraction n="0.234" ref="O"/>
+      <fraction n="0.012" ref="Ar"/>
+      <property name="RINDEX" ref="RINDEX__Air"/>
+    </material>
   
-  <!-- We model vakuum just as very thin air -->
-  <material name="Vacuum">  
-    <D type="density" unit="g/cm3" value="0.0000000001" />
-    <fraction n="0.754" ref="N"/>
-    <fraction n="0.234" ref="O"/>
-    <fraction n="0.012" ref="Ar"/>
-  </material>
-
-  <material name="Epoxy">
-    <D type="density" value="1.3" unit="g/cm3"/>
-    <composite n="44" ref="H"/>
-    <composite n="15" ref="C"/>
-    <composite n="7" ref="O"/>
-  </material>
-
-  <material name="Quartz">
-    <D type="density" value="2.2" unit="g/cm3"/>
-    <composite n="1" ref="Si"/>
-    <composite n="2" ref="O"/>
-  </material>
-
-  <material name="G10">
-    <D type="density" value="1.7" unit="g/cm3"/>
-    <fraction n="0.08" ref="Cl"/>
-    <fraction n="0.773" ref="Quartz"/>
-    <fraction n="0.147" ref="Epoxy"/>
-  </material>
-
-  <material name="Polystyrene">
-    <D value="1.032" unit="g/cm3"/>
-    <composite n="19" ref="C"/>
-    <composite n="21" ref="H"/>
-  </material>
-
-  <material name="Steel235">
-    <D value="7.85" unit="g/cm3"/>
-    <fraction n="0.998" ref="Fe"/>
-    <fraction n=".002" ref="C"/>
-  </material>
-
-  <material name="SiliconOxide">
-    <D type="density" value="2.65" unit="g/cm3"/>
-    <composite n="1" ref="Si"/>
-    <composite n="2" ref="O"/>
-  </material>
-
-  <material name="BoronOxide">
-    <D type="density" value="2.46" unit="g/cm3"/>
-    <composite n="2" ref="B"/>
-    <composite n="3" ref="O"/>
-  </material>
-
-  <material name="SodiumOxide">
-    <D type="density" value="2.65" unit="g/cm3"/>
-    <composite n="2" ref="Na"/>
-    <composite n="1" ref="O"/>
-  </material>
-
-  <material name="AluminumOxide">
-    <D type="density" value="3.89" unit="g/cm3"/>
-    <composite n="2" ref="Al"/>
-    <composite n="3" ref="O"/>
-  </material>
-
-  <material name="PyrexGlass">
-    <D type="density" value="2.23" unit="g/cm3"/>
-    <fraction n="0.806" ref="SiliconOxide"/>
-    <fraction n="0.130" ref="BoronOxide"/>
-    <fraction n="0.040" ref="SodiumOxide"/>
-    <fraction n="0.023" ref="AluminumOxide"/>
-  </material>
-
-  <material name="CarbonFiber">
-    <D type="density" value="1.5" unit="g/cm3"/>
-    <fraction n="0.65" ref="C"/>
-    <fraction n="0.35" ref="Epoxy"/>
-  </material>
+    <!-- We model vakuum just as very thin air -->
+    <material name="Vacuum">  
+      <D type="density" unit="g/cm3" value="0.0000000001" />
+      <fraction n="0.754" ref="N"/>
+      <fraction n="0.234" ref="O"/>
+      <fraction n="0.012" ref="Ar"/>
+    </material>
+
+    <material name="Epoxy">
+      <D type="density" value="1.3" unit="g/cm3"/>
+      <composite n="44" ref="H"/>
+      <composite n="15" ref="C"/>
+      <composite n="7" ref="O"/>
+    </material>
+
+    <material name="Quartz">
+      <D type="density" value="2.2" unit="g/cm3"/>
+      <composite n="1" ref="Si"/>
+      <composite n="2" ref="O"/>
+    </material>
+
+    <material name="G10">
+      <D type="density" value="1.7" unit="g/cm3"/>
+      <fraction n="0.08" ref="Cl"/>
+      <fraction n="0.773" ref="Quartz"/>
+      <fraction n="0.147" ref="Epoxy"/>
+    </material>
+
+    <material name="Polystyrene">
+      <D value="1.032" unit="g/cm3"/>
+      <composite n="19" ref="C"/>
+      <composite n="21" ref="H"/>
+    </material>
+
+    <material name="Steel235">
+      <D value="7.85" unit="g/cm3"/>
+      <fraction n="0.998" ref="Fe"/>
+      <fraction n=".002" ref="C"/>
+    </material>
+
+    <material name="SiliconOxide">
+      <D type="density" value="2.65" unit="g/cm3"/>
+      <composite n="1" ref="Si"/>
+      <composite n="2" ref="O"/>
+    </material>
+
+    <material name="BoronOxide">
+      <D type="density" value="2.46" unit="g/cm3"/>
+      <composite n="2" ref="B"/>
+      <composite n="3" ref="O"/>
+    </material>
+
+    <material name="SodiumOxide">
+      <D type="density" value="2.65" unit="g/cm3"/>
+      <composite n="2" ref="Na"/>
+      <composite n="1" ref="O"/>
+    </material>
+
+    <material name="AluminumOxide">
+      <D type="density" value="3.89" unit="g/cm3"/>
+      <composite n="2" ref="Al"/>
+      <composite n="3" ref="O"/>
+    </material>
+
+    <material name="PyrexGlass">
+      <D type="density" value="2.23" unit="g/cm3"/>
+      <fraction n="0.806" ref="SiliconOxide"/>
+      <fraction n="0.130" ref="BoronOxide"/>
+      <fraction n="0.040" ref="SodiumOxide"/>
+      <fraction n="0.023" ref="AluminumOxide"/>
+    </material>
+
+    <material name="CarbonFiber">
+      <D type="density" value="1.5" unit="g/cm3"/>
+      <fraction n="0.65" ref="C"/>
+      <fraction n="0.35" ref="Epoxy"/>
+    </material>
   
-  <material name="CarbonFiber_50D">
-    <D type="density" value="0.75" unit="g/cm3"/>
-    <fraction n="0.65" ref="C"/>
-    <fraction n="0.35" ref="Epoxy"/>
-  </material>  
-
-  <material name="Rohacell31">
-    <D type="density" value="0.032" unit="g/cm3"/>
-    <composite n="9" ref="C"/>
-    <composite n="13" ref="H"/>
-    <composite n="2" ref="O"/>
-    <composite n="1" ref="N"/>
-  </material>
+    <material name="CarbonFiber_50D">
+      <D type="density" value="0.75" unit="g/cm3"/>
+      <fraction n="0.65" ref="C"/>
+      <fraction n="0.35" ref="Epoxy"/>
+    </material>  
+
+    <material name="Rohacell31">
+      <D type="density" value="0.032" unit="g/cm3"/>
+      <composite n="9" ref="C"/>
+      <composite n="13" ref="H"/>
+      <composite n="2" ref="O"/>
+      <composite n="1" ref="N"/>
+    </material>
   
-  <material name="Rohacell31_50D">
-    <D type="density" value="0.016" unit="g/cm3"/>
-    <composite n="9" ref="C"/>
-    <composite n="13" ref="H"/>
-    <composite n="2" ref="O"/>
-    <composite n="1" ref="N"/>
-  </material>  
-
-  <material name="RPCGasDefault" state="gas">
-    <D type="density" value="0.0037" unit="g/cm3"/>
-    <composite n="209" ref="C"/>
-    <composite n="239" ref="H"/>
-    <composite n="381" ref="F"/>
-  </material>
-
-  <material name="PolystyreneFoam">
-    <D type="density" value="0.0056" unit="g/cm3"/>
-    <fraction n="1.0" ref="Polystyrene"/>
-  </material>
-
-  <material name="Kapton">
-    <D value="1.43" unit="g/cm3" />
-    <composite n="22" ref="C"/>
-    <composite n="10" ref="H" />
-    <composite n="2" ref="N" />
-    <composite n="5" ref="O" />
-  </material>
-
-  <material name="PEEK">
-    <D value="1.37" unit="g/cm3" />
-    <composite n="19" ref="C"/>
-    <composite n="12" ref="H" />
-    <composite n="3" ref="O" />
-  </material>
-
-  <material name="G4_BGO" state="solid">
-    <MEE unit="eV" value="534.1"/>
-    <D value="7.13" unit="g/cm3" />
-    <fraction n="0.154126" ref="O"/>
-    <fraction n="0.174820" ref="Ge" />
-    <fraction n="0.671054" ref="Bi" />
-  </material>
-
-
-</materials>
+    <material name="Rohacell31_50D">
+      <D type="density" value="0.016" unit="g/cm3"/>
+      <composite n="9" ref="C"/>
+      <composite n="13" ref="H"/>
+      <composite n="2" ref="O"/>
+      <composite n="1" ref="N"/>
+    </material>  
+
+    <material name="RPCGasDefault" state="gas">
+      <D type="density" value="0.0037" unit="g/cm3"/>
+      <composite n="209" ref="C"/>
+      <composite n="239" ref="H"/>
+      <composite n="381" ref="F"/>
+    </material>
+
+    <material name="PolystyreneFoam">
+      <D type="density" value="0.0056" unit="g/cm3"/>
+      <fraction n="1.0" ref="Polystyrene"/>
+    </material>
+
+    <material name="Kapton">
+      <D value="1.43" unit="g/cm3" />
+      <composite n="22" ref="C"/>
+      <composite n="10" ref="H" />
+      <composite n="2" ref="N" />
+      <composite n="5" ref="O" />
+    </material>
+
+    <material name="PEEK">
+      <D value="1.37" unit="g/cm3" />
+      <composite n="19" ref="C"/>
+      <composite n="12" ref="H" />
+      <composite n="3" ref="O" />
+    </material>
+
+    <material name="G4_BGO" state="solid">
+      <MEE unit="eV" value="534.1"/>
+      <D value="7.13" unit="g/cm3" />
+      <fraction n="0.154126" ref="O"/>
+      <fraction n="0.174820" ref="Ge" />
+      <fraction n="0.671054" ref="Bi" />
+    </material>
+
+    <material name="BC420">
+      <D type="density" value="1.032" unit="g/cm3"/>
+      <composite n="10" ref="C"/>
+      <composite n="11" ref="H"/>
+      <property name="RINDEX" ref="RINDEX__BC420"/>
+      <property name="ABSLENGTH" ref="ABSLENGTH__BC420"/>
+      <property name="WLSCOMPONENT" ref="WLSCOMPONENT__BC420"/>
+      <property name="SCINTILLATIONCOMPONENT1" ref="SCINTILLATIONCOMPONENT__BC420"/>
+      <property name="SCINTILLATIONCOMPONENT2" ref="SCINTILLATIONCOMPONENT__BC420"/>
+      <constant name="SCINTILLATIONYIELD" value="10240./MeV"/>
+      <constant name="RESOLUTIONSCALE" value="2.5"/>
+      <constant name="SCINTILLATIONTIMECONSTANT1" value="0.9*ns"/>
+      <constant name="SCINTILLATIONTIMECONSTANT2" value="2.1*ns"/>
+      <constant name="SCINTILLATIONYIELD1" value="1.0"/>
+      <constant name="SCINTILLATIONYIELD2" value="0."/>
+      <constant name="BirksConstant" value="0.126*mm/MeV"/>
+    </material>
+
+    <material name="Pethylene1">
+      <D type="density" value="1200" unit="kg/m3"/>
+      <composite n="2" ref="C"/>
+      <composite n="4" ref="H"/>
+      <property name="RINDEX" ref="RINDEX__Pethylene1"/>
+      <property name="ABSLENGTH" ref="ABSLENGTH__Pethylene1"/>
+    </material>
+
+    <material name="Pethylene2">
+      <D type="density" value="1190" unit="kg/m3"/>
+      <composite n="5" ref="C"/>
+      <composite n="8" ref="H"/>
+      <composite n="2" ref="O"/>
+      <property name="RINDEX" ref="RINDEX__Pethylene2"/>
+      <property name="WLSABSLENGTH" ref="WLSABSLENGTH__Pethylene2"/>
+      <property name="WLSCOMPONENT" ref="WLSCOMPONENT__Pethylene2"/>
+      <constant name="WLSTIMECONSTANT" value="0.5*ns"/>
+    </material>
+  </materials>
+
+  <surfaces>
+    <opticalsurface name="Muon_surf_stripe" model="glisur" finish="polished" type="dielectric_metal"/>
+    <opticalsurface name="Muon_surf_fiber" model="glisur" finish="polished" type="dielectric_metal"/>
+  </surfaces>
+</lccdd>
diff --git a/Detector/DetCRD/compact/materials_muon.xml b/Detector/DetCRD/compact/materials_muon.xml
deleted file mode 100644
index 34c657294e08b9b3328a58eafdbc3819c7b948a2..0000000000000000000000000000000000000000
--- a/Detector/DetCRD/compact/materials_muon.xml
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<lccdd>
-  <properties>
-
-    <matrix name="RINDEX__Air" coldim="2" values="
-    1.0*eV 1.00029
-    5.1*eV 1.00029
-    "/>
-    <matrix name="RINDEX__BC420" coldim="2" values="
-    2.38*eV 1.58
-    2.88*eV 1.58
-    3.45*eV 1.58
-    "/>
-    <matrix name="ABSLENGTH__BC420" coldim="2" values="
-    2.38*eV 10*cm
-    2.88*eV 10*cm
-    3.45*eV 10*cm
-    "/>
-    <matrix name="WLSCOMPONENT__BC420" coldim="2" values="
-    2.38*eV 0.
-    2.88*eV 1.
-    3.45*eV 0.
-    "/>
-    <matrix name="SCINTILLATIONCOMPONENT__BC420" coldim="2" values="
-    2.38*eV 1.0
-    2.88*eV 1.0
-    3.45*eV 1.0
-    "/>
-    <matrix name="RINDEX__Pethylene1" coldim="2" values="
-    2.0*eV 1.49
-    2.87*eV 1.49
-    2.90*eV 1.49
-    3.47*eV 1.49
-    "/>
-    <matrix name="ABSLENGTH__Pethylene1" coldim="2" values="
-    2.0*eV 3.0*m
-    2.87*eV 3.0*m
-    2.90*eV 3.0*m
-    3.47*eV 3.0*m
-    "/>
-    <matrix name="RINDEX__Pethylene2" coldim="2" values="
-    2.0*eV 1.60
-    2.87*eV 1.60
-    2.90*eV 1.60
-    3.47*eV 1.60
-    "/>
-    <matrix name="WLSABSLENGTH__Pethylene2" coldim="2" values="
-    2.0*eV 3.0*m
-    2.87*eV 3.0*m
-    2.90*eV 0.1*mm
-    3.47*eV 0.1*mm
-    "/>
-    <matrix name="WLSCOMPONENT__Pethylene2" coldim="2" values="
-    2.0*eV 1.0
-    2.87*eV 1.0
-    2.90*eV 0.
-    3.47*eV 0.  
-    "/>
-  </properties>
-
-  <materials>
-
-    <material name="Air">
-      <D type="density" unit="g/cm3" value="0.0012"/>
-      <fraction n="0.754" ref="N"/>
-      <fraction n="0.234" ref="O"/>
-      <fraction n="0.012" ref="Ar"/>
-      <property name="RINDEX" ref="RINDEX__Air"/>
-    </material>
-  
-    <material name="Vacuum">  
-      <D type="density" unit="g/cm3" value="0.0000000001" />
-      <fraction n="0.754" ref="N"/>
-      <fraction n="0.234" ref="O"/>
-      <fraction n="0.012" ref="Ar"/>
-    </material>
-
-    <material name="Steel235">
-      <D value="7.85" unit="g/cm3"/>
-      <fraction n="0.998" ref="Fe"/>
-      <fraction n=".002" ref="C"/>
-    </material>
-
-    <material name="BC420">
-      <D type="density" value="1.032" unit="g/cm3"/>
-      <composite n="10" ref="C"/>
-      <composite n="11" ref="H"/>
-      <property name="RINDEX" ref="RINDEX__BC420"/>
-      <property name="ABSLENGTH" ref="ABSLENGTH__BC420"/>
-      <property name="WLSCOMPONENT" ref="WLSCOMPONENT__BC420"/>
-      <property name="SCINTILLATIONCOMPONENT1" ref="SCINTILLATIONCOMPONENT__BC420"/>
-      <property name="SCINTILLATIONCOMPONENT2" ref="SCINTILLATIONCOMPONENT__BC420"/>
-      <constant name="SCINTILLATIONYIELD" value="10240./MeV"/>
-      <constant name="RESOLUTIONSCALE" value="2.5"/>
-      <constant name="SCINTILLATIONTIMECONSTANT1" value="0.9*ns"/>
-      <constant name="SCINTILLATIONTIMECONSTANT2" value="2.1*ns"/>
-      <constant name="SCINTILLATIONYIELD1" value="1.0"/>
-      <constant name="SCINTILLATIONYIELD2" value="0."/>
-      <constant name="BirksConstant" value="0.126*mm/MeV"/>
-    </material>
-
-    <material name="Pethylene1">
-      <D type="density" value="1200" unit="kg/m3"/>
-      <composite n="2" ref="C"/>
-      <composite n="4" ref="H"/>
-      <property name="RINDEX" ref="RINDEX__Pethylene1"/>
-      <property name="ABSLENGTH" ref="ABSLENGTH__Pethylene1"/>
-    </material>
-
-    <material name="Pethylene2">
-      <D type="density" value="1190" unit="kg/m3"/>
-      <composite n="5" ref="C"/>
-      <composite n="8" ref="H"/>
-      <composite n="2" ref="O"/>
-      <property name="RINDEX" ref="RINDEX__Pethylene2"/>
-      <property name="WLSABSLENGTH" ref="WLSABSLENGTH__Pethylene2"/>
-      <property name="WLSCOMPONENT" ref="WLSCOMPONENT__Pethylene2"/>
-      <constant name="WLSTIMECONSTANT" value="0.5*ns"/>
-    </material>
-
-  </materials>
-
-  <surfaces>
-    <opticalsurface name="Surf__stripe" model="glisur" finish="polished" type="dielectric_metal"/>
-    <opticalsurface name="Surf__fiber" model="glisur" finish="polished" type="dielectric_metal"/>
-  </surfaces>
-</lccdd>
diff --git a/Detector/DetCRD/src/Muon/Muon_Barrel_v01.cpp b/Detector/DetCRD/src/Muon/Muon_Barrel_v01_01.cpp
similarity index 82%
rename from Detector/DetCRD/src/Muon/Muon_Barrel_v01.cpp
rename to Detector/DetCRD/src/Muon/Muon_Barrel_v01_01.cpp
index 69f985ab340cb6a0f0fa034bfdd09d23e78a1d08..28b86daa4a9fb8a66ef3b7619f601bf3dcdc3be4 100644
--- a/Detector/DetCRD/src/Muon/Muon_Barrel_v01.cpp
+++ b/Detector/DetCRD/src/Muon/Muon_Barrel_v01_01.cpp
@@ -29,13 +29,10 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
     MYDEBUGVAL(det_name);
     MYDEBUGVAL(det_type);
     xml_dim_t   pos    (x_det.child(_U(position)));
-    xml_dim_t   dim    (x_det.child(_U(dimensions)));
-
-    dd4hep::Material det_mat(theDetector.material(x_det.materialStr()));
 
     dd4hep::DetElement sdet(det_name, x_det.id());
 
-    dd4hep::Volume envelope(det_name,dd4hep::Box(dim.dx(),dim.dy(),dim.dz()),det_mat);
+    dd4hep::Assembly envelope(det_name);
 
     dd4hep::xml::setDetectorTypeFlag( e, sdet ) ;
 
@@ -45,31 +42,28 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
 
 //    dd4hep::Readout readout = sens.readout();
 //    dd4hep::Segmentation seg = readout.segmentation();
-    xml_coll_t dcEnv(x_det,_U(module));
+    xml_coll_t dcEnv(x_det,Unicode("barrel"));
     xml_comp_t x_env = dcEnv;
-    for(int i0 = 0; i0 < theDetector.constant<int>("env_num"); i0++)
+    for(int i0 = 0; i0 < theDetector.constant<int>("Muon_barrel_barrel_num"); i0++)
     {
       for(int i1 = 0; i1 < x_env.id(); i1++ )
       {
         std::string env_name = x_env.nameStr() + dd4hep::_toString(i1,"_%d");
-        dd4hep::Material env_mat(theDetector.material(x_env.materialStr()));
         xml_dim_t env_pos(x_env.child(_U(position)));
-        xml_dim_t env_dim(x_env.child(_U(dimensions)));
 
-        xml_coll_t dcFe(x_env,_U(module));
+        xml_coll_t dcFe(x_env,Unicode("iron"));
         xml_comp_t x_Fe = dcFe;
         std::string Fe_name = x_Fe.nameStr() + dd4hep::_toString(i1,"_%d");
         dd4hep::Material Fe_mat(theDetector.material(x_Fe.materialStr()));
         xml_dim_t Fe_pos(x_Fe.child(_U(position)));
         xml_dim_t Fe_dim(x_Fe.child(_U(dimensions)));
 
-        double Fe_halfX2 = theDetector.constant<double>("Fe_x1") * ( 0.5 + std::sqrt(3));
-        double Fe_posZ = -1 * theDetector.constant<double>("Fe_x1") * ( 2.5 + 1.5 * std::sqrt(3) );
-        double env_halfX = 2 * theDetector.constant<double>("Fe_x1") * ( 1 + std::sqrt(3) );
-        double env_halfZ = 2 * theDetector.constant<double>("Fe_x1") * ( 3 + 1.5 * std::sqrt(3) );
-        dd4hep::Box env_solid(env_halfX,env_dim.dy(),env_halfZ);
-        dd4hep::Volume env_vol(env_name, env_solid, env_mat);
-        env_vol.setVisAttributes(theDetector.visAttributes(x_env.visStr()));
+        double Fe_halfX2 = theDetector.constant<double>("Muon_barrel_iron_x1") * ( 0.5 + std::sqrt(3));
+        //double Fe_posZ = -1 * theDetector.constant<double>("Muon_barrel_iron_x1") * ( 2.5 + 1.5 * std::sqrt(3) );
+        double Fe_posZ = -1 * ( theDetector.constant<double>("Muon_barrel_inner_radius") + 0.5 * theDetector.constant<double>("Muon_barrel_iron_z") );
+        double env_halfX = 2 * theDetector.constant<double>("Muon_barrel_iron_x1") * ( 1 + std::sqrt(3) );
+        double env_halfZ = 2 * theDetector.constant<double>("Muon_barrel_iron_x1") * ( 3 + 1.5 * std::sqrt(3) );
+        dd4hep::Assembly env_vol(env_name);
         double env_rot = i1 * 360 * dd4hep::degree / x_env.id();
         dd4hep::Transform3D env_transform(dd4hep::Rotation3D(dd4hep::RotationY(env_rot)),dd4hep::Position(env_pos.x(), ( 2 * i0 - 1 ) * env_pos.y(),env_pos.z()));
 
@@ -78,19 +72,19 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
         Fe_vol.setVisAttributes(theDetector.visAttributes(x_Fe.visStr()));
         dd4hep::Transform3D Fe_transform(dd4hep::Rotation3D(),dd4hep::Position(Fe_pos.x(),Fe_pos.y(),Fe_posZ));
 
-        xml_coll_t dcSuperlayer(x_Fe,_U(module));
+        xml_coll_t dcSuperlayer(x_Fe,Unicode("superlayer"));
         xml_comp_t x_superlayer = dcSuperlayer;
         for(int i2 = 0; i2 < x_superlayer.id(); i2++)
         {
           std::string superlayer_name = x_superlayer.nameStr() + dd4hep::_toString(i2,"_%d");
-          std::string num_name = "strip_num" + dd4hep::_toString(i2,"_%d");
+          std::string num_name = "Muon_barrel_strip_num" + dd4hep::_toString(i2,"_%d");
 
           int strip_num = theDetector.constant<int>(num_name);
-          double superlayer_halfX = 0.5 * strip_num * theDetector.constant<double>("strip_x") + theDetector.constant<double>("superlayer_air");
-          double superlayer_halfY = 0.5 * theDetector.constant<double>("superlayer_y");
-          double superlayer_halfZ = 0.5 * theDetector.constant<double>("superlayer_z"); 
+          double superlayer_halfX = 0.5 * strip_num * theDetector.constant<double>("Muon_strip_x") + theDetector.constant<double>("Muon_barrel_superlayer_air_gap");
+          double superlayer_halfY = 0.5 * theDetector.constant<double>("Muon_barrel_superlayer_y");
+          double superlayer_halfZ = 0.5 * theDetector.constant<double>("Muon_barrel_superlayer_z"); 
 
-          double superlayer_posZ = i2 * theDetector.constant<double>("layer_gap") + theDetector.constant<double>("layer_init");
+          double superlayer_posZ = i2 * theDetector.constant<double>("Muon_barrel_superlayer_gap") + theDetector.constant<double>("Muon_barrel_superlayer_init");
 
           dd4hep::Material superlayer_mat(theDetector.material(x_superlayer.materialStr()));
           dd4hep::Box superlayer_solid(superlayer_halfX, superlayer_halfY, superlayer_halfZ); 
@@ -98,15 +92,15 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
           superlayer_vol.setVisAttributes(theDetector.visAttributes(x_superlayer.visStr()));
           dd4hep::Transform3D superlayer_transform(dd4hep::Rotation3D(dd4hep::RotationX(90*dd4hep::degree)),dd4hep::Position(0, 0, superlayer_posZ));
 
-          xml_coll_t dcAl(x_superlayer,_U(module));
+          xml_coll_t dcAl(x_superlayer,Unicode("aluminum"));
           xml_comp_t x_Al = dcAl;
           std::string Al_name = x_Al.nameStr();
           dd4hep::Material Al_mat(theDetector.material(x_Al.materialStr()));
           xml_dim_t Al_pos(x_Al.child(_U(position)));
 
-          double Al_halfX = superlayer_halfX - theDetector.constant<double>("superlayer_Al");
-          double Al_halfY = superlayer_halfY - theDetector.constant<double>("superlayer_Al");
-          double Al_halfZ = superlayer_halfZ - theDetector.constant<double>("superlayer_Al");
+          double Al_halfX = superlayer_halfX - theDetector.constant<double>("Muon_barrel_superlayer_aluminum_gap");
+          double Al_halfY = superlayer_halfY - theDetector.constant<double>("Muon_barrel_superlayer_aluminum_gap");
+          double Al_halfZ = superlayer_halfZ - theDetector.constant<double>("Muon_barrel_superlayer_aluminum_gap");
           dd4hep::Box Al_solid(Al_halfX, Al_halfY, Al_halfZ);
           dd4hep::Volume Al_vol(Al_name, Al_solid, Al_mat);
           Al_vol.setVisAttributes(theDetector.visAttributes(x_Al.visStr()));
@@ -120,7 +114,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
             }
             if ( i3 == 1 )
             {
-              num = theDetector.constant<int>("strip_num");
+              num = theDetector.constant<int>("Muon_barrel_strip_num");
             }
             for ( int i4 = 0; i4 < num; i4++ )
             {
@@ -128,23 +122,23 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
               dd4hep::Rotation3D strip_rot;
               if ( i3 == 0 )
               {
-                strip_halfZ = 0.5 * theDetector.constant<double>("strip_z") + theDetector.constant<double>("surf");
-                strip_posX = theDetector.constant<double>("strip_x") * ( i4 + 0.5 * (1 - strip_num));
-                strip_posY = 0.5 * theDetector.constant<double>("strip_y");
+                strip_halfZ = 0.5 * theDetector.constant<double>("Muon_strip_z") + theDetector.constant<double>("Muon_strip_surf");
+                strip_posX = theDetector.constant<double>("Muon_strip_x") * ( i4 + 0.5 * (1 - strip_num));
+                strip_posY = 0.5 * theDetector.constant<double>("Muon_strip_y");
                 strip_posZ = 0;
               }
               if ( i3 == 1 )
               {
                 strip_rot = dd4hep::Rotation3D(dd4hep::RotationY( 90 * dd4hep::degree ));
-                strip_halfZ = 0.5 * strip_num * theDetector.constant<double>("strip_x") + theDetector.constant<double>("surf");
+                strip_halfZ = 0.5 * strip_num * theDetector.constant<double>("Muon_strip_x") + theDetector.constant<double>("Muon_strip_surf");
                 strip_posX = 0;
-                strip_posY = -0.5 * theDetector.constant<double>("strip_y");
-                strip_posZ = theDetector.constant<double>("strip_x") * ( i4 + 0.5 ) - 0.5 * theDetector.constant<double>("strip_z");
+                strip_posY = -0.5 * theDetector.constant<double>("Muon_strip_y");
+                strip_posZ = theDetector.constant<double>("Muon_strip_x") * ( i4 + 0.5 ) - 0.5 * theDetector.constant<double>("Muon_strip_z");
               }
               double surface_halfZ, BC420_halfZ, fiber_halfZ, cut_halfZ;
-              double SiPM_posZ = strip_halfZ + theDetector.constant<double>("surf");
-              surface_halfZ = BC420_halfZ = fiber_halfZ = cut_halfZ = strip_halfZ - theDetector.constant<double>("surf"); 
-              xml_coll_t dcStrip(x_Al,_U(module));
+              double SiPM_posZ = strip_halfZ - 0.5 * theDetector.constant<double>("Muon_strip_surf");
+              surface_halfZ = BC420_halfZ = fiber_halfZ = cut_halfZ = strip_halfZ - theDetector.constant<double>("Muon_strip_surf"); 
+              xml_coll_t dcStrip(x_Al,Unicode("stripe"));
               xml_comp_t x_strip = dcStrip;
               std::string strip_name = x_strip.nameStr() + dd4hep::_toString(i0,"_%d") + dd4hep::_toString(i1,"_%d") + dd4hep::_toString(i2,"_%d") + dd4hep::_toString(i3,"_%d") + dd4hep::_toString(i4,"_%d");
               dd4hep::Material strip_mat(theDetector.material(x_strip.materialStr()));
@@ -160,7 +154,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
               dd4hep::Material surface_mat, BC420_mat, cut1_mat, cut2_mat, cut3_mat, SiPM_mat; 
               xml_dim_t surface_pos, cut1_pos, BC420_pos, cut3_pos, cut2_pos, SiPM_pos;
               xml_dim_t surface_dim, cut1_dim, BC420_dim, cut3_dim, cut2_dim, SiPM_dim;
-              for(xml_coll_t dcModule(x_strip,_U(module)); dcModule; dcModule++)
+              for(xml_coll_t dcModule(x_strip,Unicode("component")); dcModule; dcModule++)
               {
                 xml_comp_t x_module = dcModule;
 
@@ -178,7 +172,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
                   surface_pos = s_pos;
                   surface_dim = s_dim;
 
-                  xml_coll_t dcCut1(x_module,_U(section));
+                  xml_coll_t dcCut1(x_module,Unicode("cut"));
                   xml_comp_t x_cut1 = dcCut1;
                   cut1_name = x_cut1.nameStr();
                   cut1_vis = x_cut1.visStr();
@@ -198,7 +192,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
                   BC420_pos = b_pos;
                   BC420_dim = b_dim;
 
-                  xml_coll_t dcCut3(x_module,_U(section));
+                  xml_coll_t dcCut3(x_module,Unicode("cut"));
                   xml_comp_t x_cut3 = dcCut3;
                   cut3_name = x_cut3.nameStr();
                   cut3_vis = x_cut3.visStr();
@@ -208,7 +202,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
                   cut3_pos = c3_pos;
                   cut3_dim = c3_dim;
 
-                  xml_coll_t dcCut2(x_cut3,_U(section));
+                  xml_coll_t dcCut2(x_cut3,Unicode("comb"));
                   xml_comp_t x_cut2 = dcCut2;
                   cut2_name = x_cut2.nameStr();
                   cut2_vis = x_cut2.visStr();
@@ -246,7 +240,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
 
               dd4hep::Volume surface_vol(surface_name, surface_solid, surface_mat);
               surface_vol.setVisAttributes(theDetector.visAttributes(surface_vis));
-              surface_vol.setSensitiveDetector(sens);
+              //surface_vol.setSensitiveDetector(sens);
 
               dd4hep::Volume cut1_vol(cut1_name, cut1_solid, cut1_mat);
               cut1_vol.setVisAttributes(theDetector.visAttributes(cut1_vis));
@@ -267,7 +261,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
               BC420_vol.placeVolume(cut2_vol,cut2_transform);
               BC420_vol.placeVolume(cut3_vol,cut3_transform);
               dd4hep::PlacedVolume cladding_place, core_place;
-              for(xml_coll_t dcSection(x_strip,_U(section)); dcSection; dcSection++)
+              for(xml_coll_t dcSection(x_strip,Unicode("fiber")); dcSection; dcSection++)
               {
                 xml_comp_t x_section = dcSection;
                 std::string section_name = x_section.nameStr();
@@ -292,21 +286,22 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
               }
               surface_vol.placeVolume(cut1_vol,cut1_transform);
               dd4hep::PlacedVolume BC420_place = surface_vol.placeVolume(BC420_vol,BC420_transform);
-              BC420_place.addPhysVolID("Stripe",i4+1);
+              //BC420_place.addPhysVolID("Stripe",i4+1);
               dd4hep::PlacedVolume surf_place = strip_vol.placeVolume(surface_vol,surface_transform);
-              surf_place.addPhysVolID("Layer",i3+1);
-              surf_place.addPhysVolID("SiPM",0);
+              //surf_place.addPhysVolID("Layer",i3+1);
+              //surf_place.addPhysVolID("SiPM",0);
               dd4hep::PlacedVolume SiPM_place0 = strip_vol.placeVolume(SiPM_vol,SiPM_transform0);
               SiPM_place0.addPhysVolID("SiPM",1);
 
               dd4hep::PlacedVolume SiPM_place1 = strip_vol.placeVolume(SiPM_vol,SiPM_transform1);
               SiPM_place1.addPhysVolID("SiPM",2);
-              Al_vol.placeVolume(strip_vol,strip_transform);
+	      dd4hep::PlacedVolume strip_place = Al_vol.placeVolume(strip_vol,strip_transform);
+	      strip_place.addPhysVolID("Stripe",i4+1).addPhysVolID("Layer",i3+1);
               dd4hep::OpticalSurfaceManager surfMgr = theDetector.surfaceManager();
               std::string optical_surf = strip_name + "_surf";
               std::string optical_fiber = strip_name + "_fiber";
-              dd4hep::OpticalSurface Surf_stripe = surfMgr.opticalSurface("Surf__stripe");
-              dd4hep::OpticalSurface Surf_fiber = surfMgr.opticalSurface("Surf__fiber");
+              dd4hep::OpticalSurface Surf_stripe = surfMgr.opticalSurface("Muon_surf_stripe");
+              dd4hep::OpticalSurface Surf_fiber = surfMgr.opticalSurface("Muon_surf_fiber");
               dd4hep::BorderSurface surface_stripe( theDetector, sdet, optical_surf, Surf_stripe, BC420_place, surf_place);
               dd4hep::BorderSurface surface_fiber( theDetector, sdet, optical_fiber, Surf_fiber, core_place, cladding_place);
             }
@@ -321,7 +316,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
         env_place.addPhysVolID("Env",i0+1);
       }
     }
-    dd4hep::Transform3D pv(dd4hep::Rotation3D(),dd4hep::Position(0,0,0));
+    dd4hep::Transform3D pv(dd4hep::Rotation3D(dd4hep::RotationX(90*dd4hep::degree)),dd4hep::Position(0,0,0));
     dd4hep::PlacedVolume phv = motherVol.placeVolume(envelope,pv);
     sdet.setPlacement(phv);
 
@@ -329,4 +324,4 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
     return sdet;
 }
 
-DECLARE_DETELEMENT(Muon_Barrel_v01, create_detector)
+DECLARE_DETELEMENT(Muon_Barrel_v01_01, create_detector)
diff --git a/Detector/DetCRD/src/Muon/Muon_Endcap_v01.cpp b/Detector/DetCRD/src/Muon/Muon_Endcap_v01.cpp
deleted file mode 100644
index 797dca0b5b93c8301068419ecec33486ff4ad898..0000000000000000000000000000000000000000
--- a/Detector/DetCRD/src/Muon/Muon_Endcap_v01.cpp
+++ /dev/null
@@ -1,294 +0,0 @@
-//====================================================================
-//  Detector description implementation for Chunxiu Liu's EcalMatrix
-//--------------------------------------------------------------------
-//
-//  Author     : Tao Lin
-//               Examples from lcgeo
-//                   lcgeo/detector/calorimeter/
-//
-//====================================================================
-#include "DD4hep/DetFactoryHelper.h"
-#include "DD4hep/OpticalSurfaces.h"
-#include "XML/Utilities.h"
-#include "DDRec/DetectorData.h"
-#include "DDSegmentation/Segmentation.h"
-#include <cmath>
-
-#define MYDEBUG(x) std::cout << __FILE__ << ":" << __LINE__ << ": " << x << std::endl;
-#define MYDEBUGVAL(x) std::cout << __FILE__ << ":" << __LINE__ << ": " << #x << ": " << x << std::endl;
-
-using dd4hep::rec::LayeredCalorimeterData;
-static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
-                                     xml_h e,
-                                     dd4hep::SensitiveDetector sens) {
-
-    xml_det_t x_det = e;
-
-    std::string det_name = x_det.nameStr();
-    std::string det_type = x_det.typeStr();
-    MYDEBUGVAL(det_name);
-    MYDEBUGVAL(det_type);
-    xml_dim_t   pos    (x_det.child(_U(position)));
-    xml_dim_t   dim    (x_det.child(_U(dimensions)));
-
-    double env_rmax = theDetector.constant<double>("Fe_x1") * std::sqrt( ( 1.5 * 1.5 + ( 3 + 1.5 * std::sqrt(3) ) * ( 3 + 1.5 * std::sqrt(3) ) ) );
-
-    dd4hep::Material det_mat(theDetector.material(x_det.materialStr()));
-
-    dd4hep::Assembly assembly(det_name);
-
-    dd4hep::DetElement sdet("envelope", 1);
-
-    dd4hep::Volume envelope( "envelope", dd4hep::Tube( dim.rmin(), theDetector.constant<double>( "multiple" ) * env_rmax, dim.dz() ), det_mat);
-    envelope.setVisAttributes(theDetector.visAttributes(x_det.visStr()));
-
-    sens.setType("muonendcap");
-
-//    dd4hep::Readout readout = sens.readout();
-//    dd4hep::Segmentation seg = readout.segmentation();
-    for (int i0 = 0; i0 < theDetector.constant<int>("env_num_endcap"); i0++)
-    {
-      std::string env_name = "part" + dd4hep::_toString(i0,"_%d");
-      dd4hep::Tube env_solid( dim.rmin(), theDetector.constant<double>( "multiple" ) * env_rmax, dim.dz(), 0, 90 * dd4hep::degree);
-      dd4hep::Volume env_vol( env_name, env_solid, det_mat);
-      env_vol.setVisAttributes(theDetector.visAttributes(x_det.visStr()));
-      dd4hep::Transform3D env_transform(dd4hep::Rotation3D(dd4hep::RotationZ(i0 * 90 * dd4hep::degree)),dd4hep::Position());
-      for (int i1 = 0; i1 < theDetector.constant<int>("layer_num"); i1++ )
-      {
-        for ( int i2 = 0; i2 < theDetector.constant<int>("strip_num_endcap"); i2++)
-        {
-          double strip_posX, strip_posY, strip_posZ;
-          double strip_sizeZ, surface_halfZ, BC420_halfZ, fiber_halfZ, cut_halfZ;
-          dd4hep::Rotation3D strip_rot;
-          if ( i1 == 1 )
-          {
-            strip_rot = dd4hep::Rotation3D( dd4hep::RotationX( 90 * dd4hep::degree ) );
-            strip_posX = theDetector.constant<double>("strip_x") * ( i2 + 0.5 );
-            strip_posZ = 0.5 * ( 1 - 2 * ( i0 % 2 ) ) * theDetector.constant<double>("strip_y");
-            if ( i2 < theDetector.constant<int>("strip_num_cut") )
-            {
-              strip_sizeZ = std::sqrt( env_rmax * env_rmax - i2 * theDetector.constant<double>("strip_x") * i2 * theDetector.constant<double>("strip_x") ) - std::sqrt( dim.rmin() * dim.rmin() - i2 * theDetector.constant<double>("strip_x") * i2 * theDetector.constant<double>("strip_x") );
-              strip_posY = std::sqrt( env_rmax * env_rmax - i2 * theDetector.constant<double>("strip_x") * i2 * theDetector.constant<double>("strip_x") ) - 0.5 * strip_sizeZ; 
-            }
-            if ( i2 >= theDetector.constant<int>("strip_num_cut") )
-            {
-              strip_sizeZ = std::sqrt( env_rmax * env_rmax - i2 * theDetector.constant<double>("strip_x") * i2 * theDetector.constant<double>("strip_x") );
-              strip_posY = 0.5 * strip_sizeZ;
-            }
-          }
-          if ( i1 == 0 )
-          {
-            strip_rot = dd4hep::Rotation3D( dd4hep::RotationX( 90 * dd4hep::degree ) * dd4hep::RotationY( 90 * dd4hep::degree ) );
-            strip_posY = theDetector.constant<double>("strip_x") * ( i2 + 0.5 );
-            strip_posZ = 0.5 * ( 2 * ( i0 % 2 ) - 1 ) * theDetector.constant<double>("strip_y");
-            if ( i2 < theDetector.constant<int>("strip_num_cut") )
-            {
-              strip_sizeZ = std::sqrt( env_rmax * env_rmax - i2 * theDetector.constant<double>("strip_x") * i2 * theDetector.constant<double>("strip_x") ) - std::sqrt( dim.rmin() * dim.rmin() - i2 * theDetector.constant<double>("strip_x") * i2 * theDetector.constant<double>("strip_x") );
-              strip_posX = std::sqrt( env_rmax * env_rmax - i2 * theDetector.constant<double>("strip_x") * i2 * theDetector.constant<double>("strip_x") ) - 0.5 * strip_sizeZ;
-            }
-            if ( i2 >= theDetector.constant<int>("strip_num_cut") )
-            {
-              strip_sizeZ = std::sqrt( env_rmax * env_rmax - i2 * theDetector.constant<double>("strip_x") * i2 * theDetector.constant<double>("strip_x") );
-              strip_posX = 0.5 * strip_sizeZ;
-            }
-          }
-          double strip_halfZ = 0.5 * strip_sizeZ;
-          double SiPM_posZ = strip_halfZ + theDetector.constant<double>("surf");
-          surface_halfZ = BC420_halfZ = fiber_halfZ = cut_halfZ = strip_halfZ - theDetector.constant<double>("surf"); 
-          xml_coll_t dcStrip(x_det,_U(module));
-          xml_comp_t x_strip = dcStrip;
-          std::string strip_name = x_strip.nameStr() + dd4hep::_toString(i0,"_%d") + dd4hep::_toString(i1,"_%d") + dd4hep::_toString(i2,"_%d");
-          dd4hep::Material strip_mat(theDetector.material(x_strip.materialStr()));
-          xml_dim_t strip_dim(x_strip.child(_U(dimensions)));   
-
-          dd4hep::Box strip_solid(strip_dim.dx(),strip_dim.dy(),strip_halfZ);
-          dd4hep::Volume strip_vol(strip_name,strip_solid,strip_mat);
-          strip_vol.setVisAttributes(theDetector.visAttributes(x_strip.visStr()));
-          dd4hep::Transform3D strip_transform(strip_rot,dd4hep::Position(strip_posX,strip_posY,strip_posZ));
-
-          std::string surface_name, BC420_name, cut1_name, cut2_name, cut3_name, SiPM_name;
-          std::string surface_vis, BC420_vis, cut1_vis, cut2_vis, cut3_vis, SiPM_vis;
-          dd4hep::Material surface_mat, BC420_mat, cut1_mat, cut2_mat, cut3_mat, SiPM_mat; 
-          xml_dim_t surface_pos, cut1_pos, BC420_pos, cut3_pos, cut2_pos, SiPM_pos;
-          xml_dim_t surface_dim, cut1_dim, BC420_dim, cut3_dim, cut2_dim, SiPM_dim;
-          for(xml_coll_t dcModule(x_strip,_U(module)); dcModule; dcModule++)
-          {
-            xml_comp_t x_module = dcModule;
-
-            xml_dim_t module_pos(x_module.child(_U(position)));
-            xml_dim_t module_dim(x_module.child(_U(dimensions)));
-
-            dd4hep::Box module_solid(module_dim.dx(),module_dim.dy(),module_dim.dz());
-            if(x_module.id()==0)
-            {
-              surface_name = x_module.nameStr();
-              surface_vis = x_module.visStr();
-              surface_mat = theDetector.material(x_module.materialStr());
-              xml_dim_t s_pos(x_module.child(_U(position)));
-              xml_dim_t s_dim(x_module.child(_U(dimensions)));
-              surface_pos = s_pos;
-              surface_dim = s_dim;
-
-              xml_coll_t dcCut1(x_module,_U(section));
-              xml_comp_t x_cut1 = dcCut1;
-              cut1_name = x_cut1.nameStr();
-              cut1_vis = x_cut1.visStr();
-              cut1_mat = theDetector.material(x_cut1.materialStr());
-              xml_dim_t c1_pos(x_cut1.child(_U(position)));
-              xml_dim_t c1_dim(x_cut1.child(_U(dimensions)));
-              cut1_pos = c1_pos;
-              cut1_dim = c1_dim;
-            }
-            if(x_module.id()==1)
-            {
-              BC420_name = x_module.nameStr();
-              BC420_vis = x_module.visStr();
-              BC420_mat = theDetector.material(x_module.materialStr());
-              xml_dim_t b_pos(x_module.child(_U(position)));
-              xml_dim_t b_dim(x_module.child(_U(dimensions)));
-              BC420_pos = b_pos;
-              BC420_dim = b_dim;
-
-              xml_coll_t dcCut3(x_module,_U(section));
-              xml_comp_t x_cut3 = dcCut3;
-              cut3_name = x_cut3.nameStr();
-              cut3_vis = x_cut3.visStr();
-              cut3_mat = theDetector.material(x_cut3.materialStr());
-              xml_dim_t c3_pos(x_cut3.child(_U(position)));
-              xml_dim_t c3_dim(x_cut3.child(_U(dimensions)));
-              cut3_pos = c3_pos;
-              cut3_dim = c3_dim;
-
-              xml_coll_t dcCut2(x_cut3,_U(section));
-              xml_comp_t x_cut2 = dcCut2;
-              cut2_name = x_cut2.nameStr();
-              cut2_vis = x_cut2.visStr();
-              cut2_mat = theDetector.material(x_cut2.materialStr());
-              xml_dim_t c2_pos(x_cut2.child(_U(position)));
-              xml_dim_t c2_dim(x_cut2.child(_U(dimensions)));
-              cut2_pos = c2_pos;
-              cut2_dim = c2_dim; 
-            }
-            if(x_module.id()==2)
-            {
-              SiPM_name = x_module.nameStr();
-              SiPM_vis = x_module.visStr();
-              SiPM_mat = theDetector.material(x_module.materialStr());
-              xml_dim_t S_pos(x_module.child(_U(position)));
-              xml_dim_t S_dim(x_module.child(_U(dimensions)));
-              SiPM_pos = S_pos;
-              SiPM_dim = S_dim;
-            }
-          }
-          dd4hep::Box surface_solid(surface_dim.dx(),surface_dim.dy(),surface_halfZ);
-          dd4hep::Box cut1_solid(cut1_dim.dx(),cut1_dim.dy(),cut_halfZ);
-          dd4hep::Box BC420_solid(BC420_dim.dx(),BC420_dim.dy(),BC420_halfZ);
-          dd4hep::Tube cut3_solid(cut3_dim.rmin(),cut3_dim.rmax(),cut_halfZ);
-          dd4hep::Box cut2_solid(cut2_dim.dx(),cut2_dim.dy(),cut_halfZ);
-          dd4hep::Box SiPM_solid(SiPM_dim.dx(),SiPM_dim.dy(),SiPM_dim.dz());
-
-          dd4hep::Transform3D surface_transform(dd4hep::Rotation3D(),dd4hep::Position(surface_pos.x(),surface_pos.y(),surface_pos.z()));
-          dd4hep::Transform3D cut1_transform(dd4hep::Rotation3D(),dd4hep::Position(cut1_pos.x(),cut1_pos.y(),cut1_pos.z()));
-          dd4hep::Transform3D BC420_transform(dd4hep::Rotation3D(),dd4hep::Position(BC420_pos.x(),BC420_pos.y(),BC420_pos.z()));
-          dd4hep::Transform3D cut2_transform(dd4hep::Rotation3D(),dd4hep::Position(cut2_pos.x(),cut2_pos.y(),cut2_pos.z()));
-          dd4hep::Transform3D cut3_transform(dd4hep::Rotation3D(),dd4hep::Position(cut3_pos.x(),cut3_pos.y(),cut3_pos.z()));
-          dd4hep::Transform3D SiPM_transform1(dd4hep::Rotation3D(),dd4hep::Position(SiPM_pos.x(),SiPM_pos.y(),SiPM_posZ));
-          dd4hep::Transform3D SiPM_transform2(dd4hep::Rotation3D(),dd4hep::Position(SiPM_pos.x(),SiPM_pos.y(), -1 * SiPM_posZ));
-
-          dd4hep::Volume surface_vol(surface_name, surface_solid, surface_mat);
-          surface_vol.setVisAttributes(theDetector.visAttributes(surface_vis));
-          surface_vol.setSensitiveDetector(sens);
-
-          dd4hep::Volume cut1_vol(cut1_name, cut1_solid, cut1_mat);
-          cut1_vol.setVisAttributes(theDetector.visAttributes(cut1_vis));
-
-          dd4hep::Volume cut2_vol(cut2_name, cut2_solid, cut2_mat);
-          cut2_vol.setVisAttributes(theDetector.visAttributes(cut2_vis));
-
-          dd4hep::Volume cut3_vol(cut3_name, cut3_solid, cut3_mat);
-          cut3_vol.setVisAttributes(theDetector.visAttributes(cut3_vis));
-
-          dd4hep::Volume BC420_vol(BC420_name,BC420_solid,BC420_mat);
-          BC420_vol.setVisAttributes(theDetector.visAttributes(BC420_vis));
-
-          dd4hep::Volume SiPM_vol(SiPM_name, SiPM_solid, SiPM_mat);
-          SiPM_vol.setVisAttributes(theDetector.visAttributes(SiPM_vis));
-          SiPM_vol.setSensitiveDetector(sens);
-
-          BC420_vol.placeVolume(cut2_vol,cut2_transform);
-          BC420_vol.placeVolume(cut3_vol,cut3_transform);
-          dd4hep::PlacedVolume cladding_place, core_place;
-          for(xml_coll_t dcSection(x_strip,_U(section)); dcSection; dcSection++)
-          {
-            xml_comp_t x_section = dcSection;
-            std::string section_name = x_section.nameStr();
-            dd4hep::Material section_mat = theDetector.material(x_section.materialStr());
-
-            xml_dim_t section_pos(x_section.child(_U(position)));
-            xml_dim_t section_dim(x_section.child(_U(dimensions)));
-
-            dd4hep::Tube section_solid(section_dim.rmin(),section_dim.rmax(),fiber_halfZ);
-            dd4hep::Volume section_vol(section_name,section_solid,section_mat);
-            section_vol.setVisAttributes(theDetector.visAttributes(x_section.visStr()));
-
-            dd4hep::Transform3D section_transform(dd4hep::Rotation3D(),dd4hep::Position(section_pos.x(),section_pos.y(),section_pos.z()));
-            if (x_section.id() == 0)
-            {
-              cladding_place = BC420_vol.placeVolume(section_vol,section_transform);
-            }
-            if (x_section.id() == 1)
-            {
-              core_place = BC420_vol.placeVolume(section_vol,section_transform);
-            }
-          }
-          surface_vol.placeVolume(cut1_vol,cut1_transform);
-          dd4hep::PlacedVolume BC420_place = surface_vol.placeVolume(BC420_vol,BC420_transform);
-          BC420_place.addPhysVolID("Stripe",i2+1);
-          dd4hep::PlacedVolume surf_place = strip_vol.placeVolume(surface_vol,surface_transform);
-          int lnum = ( ( 2 * ( i0 % 2 ) - 1 ) * ( 2 * i1 - 1 ) + 1 ) / 2;
-          surf_place.addPhysVolID("Layer", lnum+1);
-          surf_place.addPhysVolID("SiPM",0);
-          dd4hep::PlacedVolume SiPM_place1 = strip_vol.placeVolume(SiPM_vol,SiPM_transform1);
-          SiPM_place1.addPhysVolID("SiPM",1);
-          dd4hep::PlacedVolume SiPM_place2 = strip_vol.placeVolume(SiPM_vol,SiPM_transform2);
-          SiPM_place2.addPhysVolID("SiPM",2);
-          env_vol.placeVolume(strip_vol,strip_transform);
-          dd4hep::OpticalSurfaceManager surfMgr = theDetector.surfaceManager();
-          std::string optical_surf = strip_name + "_surf";
-          std::string optical_fiber = strip_name + "_fiber";
-          dd4hep::OpticalSurface Surf_stripe = surfMgr.opticalSurface("Surf__stripe");
-          dd4hep::OpticalSurface Surf_fiber = surfMgr.opticalSurface("Surf__fiber");
-          dd4hep::BorderSurface surface_stripe( theDetector, sdet, optical_surf, Surf_stripe, BC420_place, surf_place);
-          dd4hep::BorderSurface surface_fiber( theDetector, sdet, optical_fiber, Surf_fiber, core_place, cladding_place);
-        }
-      }
-      dd4hep::PlacedVolume env_place = envelope.placeVolume(env_vol,env_transform);
-      env_place.addPhysVolID("Env",i0+1);
-    }
-    dd4hep::PlacedVolume pv;
-    dd4hep::DetElement both_endcaps(det_name,0);
-    dd4hep::Volume motherVol = theDetector.pickMotherVolume(both_endcaps);
-    dd4hep::DetElement sdetA = sdet;
-    dd4hep::Ref_t(sdetA)->SetName((det_name+"_A").c_str());
-    dd4hep::DetElement sdetB = sdet.clone(det_name+"_B",3);
-    pv = assembly.placeVolume(envelope,dd4hep::Transform3D(dd4hep::Rotation3D(dd4hep::RotationX(90*dd4hep::degree)),dd4hep::Position(0,pos.y(),0)));
-    pv.addPhysVolID("Endcap",1);
-
-    sdetA.setPlacement(pv);
-
-    pv = assembly.placeVolume(envelope,dd4hep::Transform3D(dd4hep::Rotation3D(dd4hep::RotationX(90*dd4hep::degree)),dd4hep::Position(0,-1*pos.y(),0)));
-    pv.addPhysVolID("Endcap",2);
-
-    sdetB.setPlacement(pv);
-
-    pv = motherVol.placeVolume(assembly);
-//    pv.addPhysVolID("system",x_det.id());
-    both_endcaps.setPlacement(pv);
-    both_endcaps.add(sdetA);
-    both_endcaps.add(sdetB);
-
-    MYDEBUG("create_detector DONE. ");
-    return both_endcaps;
-}
-
-DECLARE_DETELEMENT(Muon_Endcap_v01, create_detector)
diff --git a/Detector/DetCRD/src/Muon/Muon_Endcap_v01_01.cpp b/Detector/DetCRD/src/Muon/Muon_Endcap_v01_01.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..336222d04fc237419523b7b411fed8aab60f0eae
--- /dev/null
+++ b/Detector/DetCRD/src/Muon/Muon_Endcap_v01_01.cpp
@@ -0,0 +1,303 @@
+//====================================================================
+//  Detector description implementation for Chunxiu Liu's EcalMatrix
+//--------------------------------------------------------------------
+//
+//  Author     : Tao Lin
+//               Examples from lcgeo
+//                   lcgeo/detector/calorimeter/
+//
+//====================================================================
+#include "DD4hep/DetFactoryHelper.h"
+#include "DD4hep/OpticalSurfaces.h"
+#include "XML/Utilities.h"
+#include "DDRec/DetectorData.h"
+#include "DDSegmentation/Segmentation.h"
+#include <cmath>
+
+#define MYDEBUG(x) std::cout << __FILE__ << ":" << __LINE__ << ": " << x << std::endl;
+#define MYDEBUGVAL(x) std::cout << __FILE__ << ":" << __LINE__ << ": " << #x << ": " << x << std::endl;
+
+using dd4hep::rec::LayeredCalorimeterData;
+static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
+                                     xml_h e,
+                                     dd4hep::SensitiveDetector sens) {
+
+    xml_det_t x_det = e;
+
+    std::string det_name = x_det.nameStr();
+    std::string det_type = x_det.typeStr();
+    MYDEBUGVAL(det_name);
+    MYDEBUGVAL(det_type);
+    xml_dim_t   pos    (x_det.child(_U(position)));
+    xml_dim_t   dim    (x_det.child(_U(dimensions)));
+
+    double env_rmax = theDetector.constant<double>("Muon_standard_scale") * std::sqrt( ( 1.5 * 1.5 + ( 3 + 1.5 * std::sqrt(3) ) * ( 3 + 1.5 * std::sqrt(3) ) ) );
+
+    dd4hep::Material det_mat(theDetector.material(x_det.materialStr()));
+
+    dd4hep::Assembly assembly(det_name);
+
+    dd4hep::DetElement sdet("envelope", 1);
+
+    dd4hep::Volume envelope( "envelope", dd4hep::Tube( dim.rmin(), theDetector.constant<double>( "Muon_endcap_magnification" ) * env_rmax, dim.dz() ), det_mat);
+    envelope.setVisAttributes(theDetector.visAttributes(x_det.visStr()));
+
+    sens.setType("muonendcap");
+
+//    dd4hep::Readout readout = sens.readout();
+//    dd4hep::Segmentation seg = readout.segmentation();
+    for (int i = 0; i < theDetector.constant<int>("Muon_endcap_superlayer_num"); i++)
+    {
+      std::string superlayer_name = "superlayer" + dd4hep::_toString(i,"_%d");
+      dd4hep::Assembly superlayer_vol(superlayer_name);
+      dd4hep::Transform3D superlayer_transform(dd4hep::Rotation3D(),dd4hep::Position(0,0,theDetector.constant<double>("Muon_endcap_iron_gap") * ( i + 1 ) + theDetector.constant<double>("Muon_strip_y") * ( i + 0.5 ) - 0.5 * theDetector.constant<double>("Muon_endcap_endcap_z")));
+      for (int i0 = 0; i0 < theDetector.constant<int>("Muon_endcap_part_num"); i0++)
+      {
+        std::string env_name = "part" + dd4hep::_toString(i0,"_%d");
+        dd4hep::Tube env_solid( dim.rmin(), theDetector.constant<double>( "Muon_endcap_magnification" ) * env_rmax, dim.dz(), 0, 90 * dd4hep::degree);
+        dd4hep::Volume env_vol( env_name, env_solid, det_mat);
+        env_vol.setVisAttributes(theDetector.visAttributes(x_det.visStr()));
+        dd4hep::Transform3D env_transform(dd4hep::Rotation3D(dd4hep::RotationZ(i0 * 90 * dd4hep::degree)),dd4hep::Position());
+        for (int i1 = 0; i1 < theDetector.constant<int>("Muon_endcap_layer_num"); i1++ )
+        {
+          for ( int i2 = 0; i2 < theDetector.constant<int>("Muon_endcap_strip_num"); i2++)
+          {
+            double strip_posX, strip_posY, strip_posZ;
+            double strip_sizeZ, surface_halfZ, BC420_halfZ, fiber_halfZ, cut_halfZ;
+            dd4hep::Rotation3D strip_rot;
+            if ( i1 == 1 )
+            {
+              strip_rot = dd4hep::Rotation3D( dd4hep::RotationX( 90 * dd4hep::degree ) );
+              strip_posX = theDetector.constant<double>("Muon_strip_x") * ( i2 + 0.5 );
+              strip_posZ = 0.5 * ( 1 - 2 * ( i0 % 2 ) ) * theDetector.constant<double>("Muon_strip_y");
+              if ( i2 < theDetector.constant<int>("Muon_endcap_strip_num_cut") )
+              {
+                strip_sizeZ = std::sqrt( env_rmax * env_rmax - i2 * theDetector.constant<double>("Muon_strip_x") * i2 * theDetector.constant<double>("Muon_strip_x") ) - std::sqrt( dim.rmin() * dim.rmin() - i2 * theDetector.constant<double>("Muon_strip_x") * i2 * theDetector.constant<double>("Muon_strip_x") );
+                strip_posY = std::sqrt( env_rmax * env_rmax - i2 * theDetector.constant<double>("Muon_strip_x") * i2 * theDetector.constant<double>("Muon_strip_x") ) - 0.5 * strip_sizeZ; 
+              }
+              if ( i2 >= theDetector.constant<int>("Muon_endcap_strip_num_cut") )
+              {
+                strip_sizeZ = std::sqrt( env_rmax * env_rmax - i2 * theDetector.constant<double>("Muon_strip_x") * i2 * theDetector.constant<double>("Muon_strip_x") );
+                strip_posY = 0.5 * strip_sizeZ;
+              }
+            }
+            if ( i1 == 0 )
+            {
+              strip_rot = dd4hep::Rotation3D( dd4hep::RotationX( 90 * dd4hep::degree ) * dd4hep::RotationY( 90 * dd4hep::degree ) );
+              strip_posY = theDetector.constant<double>("Muon_strip_x") * ( i2 + 0.5 );
+              strip_posZ = 0.5 * ( 2 * ( i0 % 2 ) - 1 ) * theDetector.constant<double>("Muon_strip_y");
+              if ( i2 < theDetector.constant<int>("Muon_endcap_strip_num_cut") )
+              {
+                strip_sizeZ = std::sqrt( env_rmax * env_rmax - i2 * theDetector.constant<double>("Muon_strip_x") * i2 * theDetector.constant<double>("Muon_strip_x") ) - std::sqrt( dim.rmin() * dim.rmin() - i2 * theDetector.constant<double>("Muon_strip_x") * i2 * theDetector.constant<double>("Muon_strip_x") );
+                strip_posX = std::sqrt( env_rmax * env_rmax - i2 * theDetector.constant<double>("Muon_strip_x") * i2 * theDetector.constant<double>("Muon_strip_x") ) - 0.5 * strip_sizeZ;
+              }
+              if ( i2 >= theDetector.constant<int>("Muon_endcap_strip_num_cut") )
+              {
+                strip_sizeZ = std::sqrt( env_rmax * env_rmax - i2 * theDetector.constant<double>("Muon_strip_x") * i2 * theDetector.constant<double>("Muon_strip_x") );
+                strip_posX = 0.5 * strip_sizeZ;
+              }
+            }
+            double strip_halfZ = 0.5 * strip_sizeZ;
+            double SiPM_posZ = strip_halfZ - 0.5 * theDetector.constant<double>("Muon_strip_surf");
+            surface_halfZ = BC420_halfZ = fiber_halfZ = cut_halfZ = strip_halfZ - theDetector.constant<double>("Muon_strip_surf"); 
+            xml_coll_t dcStrip(x_det,Unicode("stripe"));
+            xml_comp_t x_strip = dcStrip;
+            std::string strip_name = x_strip.nameStr() + dd4hep::_toString(i,"_%d") + dd4hep::_toString(i0,"_%d") + dd4hep::_toString(i1,"_%d") + dd4hep::_toString(i2,"_%d");
+            dd4hep::Material strip_mat(theDetector.material(x_strip.materialStr()));
+            xml_dim_t strip_dim(x_strip.child(_U(dimensions)));   
+
+            dd4hep::Box strip_solid(strip_dim.dx(),strip_dim.dy(),strip_halfZ);
+            dd4hep::Volume strip_vol(strip_name,strip_solid,strip_mat);
+            strip_vol.setVisAttributes(theDetector.visAttributes(x_strip.visStr()));
+            dd4hep::Transform3D strip_transform(strip_rot,dd4hep::Position(strip_posX,strip_posY,strip_posZ));
+
+            std::string surface_name, BC420_name, cut1_name, cut2_name, cut3_name, SiPM_name;
+            std::string surface_vis, BC420_vis, cut1_vis, cut2_vis, cut3_vis, SiPM_vis;
+            dd4hep::Material surface_mat, BC420_mat, cut1_mat, cut2_mat, cut3_mat, SiPM_mat; 
+            xml_dim_t surface_pos, cut1_pos, BC420_pos, cut3_pos, cut2_pos, SiPM_pos;
+            xml_dim_t surface_dim, cut1_dim, BC420_dim, cut3_dim, cut2_dim, SiPM_dim;
+            for(xml_coll_t dcModule(x_strip,Unicode("component")); dcModule; dcModule++)
+            {
+              xml_comp_t x_module = dcModule;
+
+              xml_dim_t module_pos(x_module.child(_U(position)));
+              xml_dim_t module_dim(x_module.child(_U(dimensions)));
+
+              dd4hep::Box module_solid(module_dim.dx(),module_dim.dy(),module_dim.dz());
+              if(x_module.id()==0)
+              {
+                surface_name = x_module.nameStr();
+                surface_vis = x_module.visStr();
+                surface_mat = theDetector.material(x_module.materialStr());
+                xml_dim_t s_pos(x_module.child(_U(position)));
+                xml_dim_t s_dim(x_module.child(_U(dimensions)));
+                surface_pos = s_pos;
+                surface_dim = s_dim;
+
+                xml_coll_t dcCut1(x_module,Unicode("cut"));
+                xml_comp_t x_cut1 = dcCut1;
+                cut1_name = x_cut1.nameStr();
+                cut1_vis = x_cut1.visStr();
+                cut1_mat = theDetector.material(x_cut1.materialStr());
+                xml_dim_t c1_pos(x_cut1.child(_U(position)));
+                xml_dim_t c1_dim(x_cut1.child(_U(dimensions)));
+                cut1_pos = c1_pos;
+                cut1_dim = c1_dim;
+              }
+              if(x_module.id()==1)
+              {
+                BC420_name = x_module.nameStr();
+                BC420_vis = x_module.visStr();
+                BC420_mat = theDetector.material(x_module.materialStr());
+                xml_dim_t b_pos(x_module.child(_U(position)));
+                xml_dim_t b_dim(x_module.child(_U(dimensions)));
+                BC420_pos = b_pos;
+                BC420_dim = b_dim;
+
+                xml_coll_t dcCut3(x_module,Unicode("cut"));
+                xml_comp_t x_cut3 = dcCut3;
+                cut3_name = x_cut3.nameStr();
+                cut3_vis = x_cut3.visStr();
+                cut3_mat = theDetector.material(x_cut3.materialStr());
+                xml_dim_t c3_pos(x_cut3.child(_U(position)));
+                xml_dim_t c3_dim(x_cut3.child(_U(dimensions)));
+                cut3_pos = c3_pos;
+                cut3_dim = c3_dim;
+
+                xml_coll_t dcCut2(x_cut3,Unicode("comb"));
+                xml_comp_t x_cut2 = dcCut2;
+                cut2_name = x_cut2.nameStr();
+                cut2_vis = x_cut2.visStr();
+                cut2_mat = theDetector.material(x_cut2.materialStr());
+                xml_dim_t c2_pos(x_cut2.child(_U(position)));
+                xml_dim_t c2_dim(x_cut2.child(_U(dimensions)));
+                cut2_pos = c2_pos;
+                cut2_dim = c2_dim; 
+              }
+              if(x_module.id()==2)
+              {
+                SiPM_name = x_module.nameStr();
+                SiPM_vis = x_module.visStr();
+                SiPM_mat = theDetector.material(x_module.materialStr());
+                xml_dim_t S_pos(x_module.child(_U(position)));
+                xml_dim_t S_dim(x_module.child(_U(dimensions)));
+                SiPM_pos = S_pos;
+                SiPM_dim = S_dim;
+              }
+            }
+            dd4hep::Box surface_solid(surface_dim.dx(),surface_dim.dy(),surface_halfZ);
+            dd4hep::Box cut1_solid(cut1_dim.dx(),cut1_dim.dy(),cut_halfZ);
+            dd4hep::Box BC420_solid(BC420_dim.dx(),BC420_dim.dy(),BC420_halfZ);
+            dd4hep::Tube cut3_solid(cut3_dim.rmin(),cut3_dim.rmax(),cut_halfZ);
+            dd4hep::Box cut2_solid(cut2_dim.dx(),cut2_dim.dy(),cut_halfZ);
+            dd4hep::Box SiPM_solid(SiPM_dim.dx(),SiPM_dim.dy(),SiPM_dim.dz());
+
+            dd4hep::Transform3D surface_transform(dd4hep::Rotation3D(),dd4hep::Position(surface_pos.x(),surface_pos.y(),surface_pos.z()));
+            dd4hep::Transform3D cut1_transform(dd4hep::Rotation3D(),dd4hep::Position(cut1_pos.x(),cut1_pos.y(),cut1_pos.z()));
+            dd4hep::Transform3D BC420_transform(dd4hep::Rotation3D(),dd4hep::Position(BC420_pos.x(),BC420_pos.y(),BC420_pos.z()));
+            dd4hep::Transform3D cut2_transform(dd4hep::Rotation3D(),dd4hep::Position(cut2_pos.x(),cut2_pos.y(),cut2_pos.z()));
+            dd4hep::Transform3D cut3_transform(dd4hep::Rotation3D(),dd4hep::Position(cut3_pos.x(),cut3_pos.y(),cut3_pos.z()));
+            dd4hep::Transform3D SiPM_transform1(dd4hep::Rotation3D(),dd4hep::Position(SiPM_pos.x(),SiPM_pos.y(),SiPM_posZ));
+            dd4hep::Transform3D SiPM_transform2(dd4hep::Rotation3D(),dd4hep::Position(SiPM_pos.x(),SiPM_pos.y(), -1 * SiPM_posZ));
+
+            dd4hep::Volume surface_vol(surface_name, surface_solid, surface_mat);
+            surface_vol.setVisAttributes(theDetector.visAttributes(surface_vis));
+            //surface_vol.setSensitiveDetector(sens);
+
+            dd4hep::Volume cut1_vol(cut1_name, cut1_solid, cut1_mat);
+            cut1_vol.setVisAttributes(theDetector.visAttributes(cut1_vis));
+
+            dd4hep::Volume cut2_vol(cut2_name, cut2_solid, cut2_mat);
+            cut2_vol.setVisAttributes(theDetector.visAttributes(cut2_vis));
+
+            dd4hep::Volume cut3_vol(cut3_name, cut3_solid, cut3_mat);
+            cut3_vol.setVisAttributes(theDetector.visAttributes(cut3_vis));
+
+            dd4hep::Volume BC420_vol(BC420_name,BC420_solid,BC420_mat);
+            BC420_vol.setVisAttributes(theDetector.visAttributes(BC420_vis));
+
+            dd4hep::Volume SiPM_vol(SiPM_name, SiPM_solid, SiPM_mat);
+            SiPM_vol.setVisAttributes(theDetector.visAttributes(SiPM_vis));
+            SiPM_vol.setSensitiveDetector(sens);
+
+            BC420_vol.placeVolume(cut2_vol,cut2_transform);
+            BC420_vol.placeVolume(cut3_vol,cut3_transform);
+            dd4hep::PlacedVolume cladding_place, core_place;
+            for(xml_coll_t dcSection(x_strip,Unicode("fiber")); dcSection; dcSection++)
+            {
+              xml_comp_t x_section = dcSection;
+              std::string section_name = x_section.nameStr();
+              dd4hep::Material section_mat = theDetector.material(x_section.materialStr());
+
+              xml_dim_t section_pos(x_section.child(_U(position)));
+              xml_dim_t section_dim(x_section.child(_U(dimensions)));
+
+              dd4hep::Tube section_solid(section_dim.rmin(),section_dim.rmax(),fiber_halfZ);
+              dd4hep::Volume section_vol(section_name,section_solid,section_mat);
+              section_vol.setVisAttributes(theDetector.visAttributes(x_section.visStr()));
+
+              dd4hep::Transform3D section_transform(dd4hep::Rotation3D(),dd4hep::Position(section_pos.x(),section_pos.y(),section_pos.z()));
+              if (x_section.id() == 0)
+              {
+                cladding_place = BC420_vol.placeVolume(section_vol,section_transform);
+              }
+              if (x_section.id() == 1)
+              {
+                core_place = BC420_vol.placeVolume(section_vol,section_transform);
+              }
+            }
+            surface_vol.placeVolume(cut1_vol,cut1_transform);
+            dd4hep::PlacedVolume BC420_place = surface_vol.placeVolume(BC420_vol,BC420_transform);
+            //BC420_place.addPhysVolID("Stripe",i2+1);
+            dd4hep::PlacedVolume surf_place = strip_vol.placeVolume(surface_vol,surface_transform);
+            int lnum = ( ( 2 * ( i0 % 2 ) - 1 ) * ( 2 * i1 - 1 ) + 1 ) / 2;
+            //surf_place.addPhysVolID("Layer", lnum+1);
+            //surf_place.addPhysVolID("SiPM",0);
+            dd4hep::PlacedVolume SiPM_place1 = strip_vol.placeVolume(SiPM_vol,SiPM_transform1);
+            SiPM_place1.addPhysVolID("SiPM",1);
+            dd4hep::PlacedVolume SiPM_place2 = strip_vol.placeVolume(SiPM_vol,SiPM_transform2);
+            SiPM_place2.addPhysVolID("SiPM",2);
+	    dd4hep::PlacedVolume strip_place = env_vol.placeVolume(strip_vol,strip_transform);
+	    strip_place.addPhysVolID("Stripe", i2+1).addPhysVolID("Layer", lnum+1);
+            dd4hep::OpticalSurfaceManager surfMgr = theDetector.surfaceManager();
+            std::string optical_surf = strip_name + "_surf";
+            std::string optical_fiber = strip_name + "_fiber";
+            dd4hep::OpticalSurface Surf_stripe = surfMgr.opticalSurface("Muon_surf_stripe");
+            dd4hep::OpticalSurface Surf_fiber = surfMgr.opticalSurface("Muon_surf_fiber");
+            dd4hep::BorderSurface surface_stripe( theDetector, sdet, optical_surf, Surf_stripe, BC420_place, surf_place);
+            dd4hep::BorderSurface surface_fiber( theDetector, sdet, optical_fiber, Surf_fiber, core_place, cladding_place);
+          }
+        }
+        dd4hep::PlacedVolume env_place = superlayer_vol.placeVolume(env_vol,env_transform);
+        env_place.addPhysVolID("Env",i0+1);
+      }
+      dd4hep::PlacedVolume superlayer_place = envelope.placeVolume(superlayer_vol,superlayer_transform);
+      superlayer_place.addPhysVolID("Superlayer",i+1);
+    }
+    dd4hep::PlacedVolume pv;
+    dd4hep::DetElement both_endcaps(det_name,2000);
+    dd4hep::Volume motherVol = theDetector.pickMotherVolume(both_endcaps);
+    dd4hep::DetElement sdetA = sdet;
+    dd4hep::Ref_t(sdetA)->SetName((det_name+"_A").c_str());
+    dd4hep::DetElement sdetB = sdet.clone(det_name+"_B",2002);
+    pv = assembly.placeVolume(envelope,dd4hep::Transform3D(dd4hep::Rotation3D(dd4hep::RotationZ(90*dd4hep::degree)),dd4hep::Position(0,0,pos.y())));
+    pv.addPhysVolID("Endcap",1);
+
+    sdetA.setPlacement(pv);
+
+    pv = assembly.placeVolume(envelope,dd4hep::Transform3D(dd4hep::Rotation3D(dd4hep::RotationZ(90*dd4hep::degree)),dd4hep::Position(0,0,-1 * pos.y())));
+    pv.addPhysVolID("Endcap",2);
+
+    sdetB.setPlacement(pv);
+
+    pv = motherVol.placeVolume(assembly);
+//    pv.addPhysVolID("system",x_det.id());
+    both_endcaps.setPlacement(pv);
+    both_endcaps.add(sdetA);
+    both_endcaps.add(sdetB);
+
+    MYDEBUG("create_detector DONE. ");
+    return both_endcaps;
+}
+
+DECLARE_DETELEMENT(Muon_Endcap_v01_01, create_detector)
diff --git a/Simulation/DetSimSD/CMakeLists.txt b/Simulation/DetSimSD/CMakeLists.txt
index 0c2d5a844ac33b203b1d33507f9e198fe8e6334b..b3d444c7778cf765c846d87d2a4c1ca52aac582f 100644
--- a/Simulation/DetSimSD/CMakeLists.txt
+++ b/Simulation/DetSimSD/CMakeLists.txt
@@ -7,6 +7,8 @@ gaudi_add_library(DetSimSDLib
                           src/TimeProjectionChamberSensitiveDetector.cpp
                           src/GenericTrackerSensitiveDetector.cpp
                           src/TrackerCombineSensitiveDetector.cpp
+                          src/MuonBarrelSensitiveDetector.cpp
+                          src/MuonEndcapSensitiveDetector.cpp
                   LINK DetSimInterface
                        DetInterface
                        ${DD4hep_COMPONENT_LIBRARIES}
@@ -25,6 +27,8 @@ gaudi_add_module(DetSimSD
                          src/DriftChamberSensDetTool.cpp
                          src/TimeProjectionChamberSensDetTool.cpp
                          src/GenericTrackerSensDetTool.cpp
+                         src/MuonBarrelSensDetTool.cpp
+                         src/MuonEndcapSensDetTool.cpp
                  LINK DetSimInterface
                       DetSimSDLib
                       DetInterface
diff --git a/Simulation/DetSimSD/src/MuonBarrelSensitiveDetector.cpp b/Simulation/DetSimSD/src/MuonBarrelSensitiveDetector.cpp
index 56a2606152af8fda56dce14d317e4c3db025c20b..b386d132d15a534d6f7e4f167b94173df13592ad 100644
--- a/Simulation/DetSimSD/src/MuonBarrelSensitiveDetector.cpp
+++ b/Simulation/DetSimSD/src/MuonBarrelSensitiveDetector.cpp
@@ -29,7 +29,7 @@ G4bool MuonBarrelSensitiveDetector::ProcessHits(G4Step* step, G4TouchableHistory
   auto pname = currentTrack->GetParticleDefinition()->GetParticleName();
   auto touchable = step->GetPreStepPoint()->GetTouchable();
   auto physical = touchable->GetVolume();
-  if ( physical->GetName() == "surface" )
+/*  if ( physical->GetName() == "surface" )
   {
       if ( pname == "opticalphoton" )
       {
@@ -39,7 +39,7 @@ G4bool MuonBarrelSensitiveDetector::ProcessHits(G4Step* step, G4TouchableHistory
           currentTrack->SetTrackStatus(fStopAndKill);
         }
       }
-  } 
+  } */
   dd4hep::sim::Geant4StepHandler h(step);
   if (fabs(h.trackDef()->GetPDGCharge()) < 0.01) return true;
 
@@ -61,12 +61,7 @@ G4bool MuonBarrelSensitiveDetector::ProcessHits(G4Step* step, G4TouchableHistory
 					  h.track->GetGlobalTime());
 
   if ( hit )  {
-    int i = 0;
-    if ( pname == "opticalphoton" && physical->GetName() == "SiPM")
-    {
-      i = 1;
-    }
-    hit->cellID  = i * getCellID( step ) ;
+    hit->cellID  = getCellID( step ) ;
     hit->energyDeposit =  step->GetTotalEnergyDeposit();
     hit->position = position;
     hit->momentum = direction;
diff --git a/Simulation/DetSimSD/src/MuonEndcapSensitiveDetector.cpp b/Simulation/DetSimSD/src/MuonEndcapSensitiveDetector.cpp
index 0efa231f13b23b03ddbb208699c9093c4880615b..03904cc875f75b9d593a8e9830a4a750e33a8d61 100644
--- a/Simulation/DetSimSD/src/MuonEndcapSensitiveDetector.cpp
+++ b/Simulation/DetSimSD/src/MuonEndcapSensitiveDetector.cpp
@@ -29,7 +29,7 @@ G4bool MuonEndcapSensitiveDetector::ProcessHits(G4Step* step, G4TouchableHistory
   auto pname = currentTrack->GetParticleDefinition()->GetParticleName();
   auto touchable = step->GetPreStepPoint()->GetTouchable();
   auto physical = touchable->GetVolume();
-  if ( physical->GetName() == "surface" )
+/*  if ( physical->GetName() == "surface" )
   {
       if ( pname == "opticalphoton" )
       {
@@ -39,7 +39,7 @@ G4bool MuonEndcapSensitiveDetector::ProcessHits(G4Step* step, G4TouchableHistory
           currentTrack->SetTrackStatus(fStopAndKill);
         }
       }
-  } 
+  }*/ 
   dd4hep::sim::Geant4StepHandler h(step);
   if (fabs(h.trackDef()->GetPDGCharge()) < 0.01) return true;
 
@@ -61,12 +61,7 @@ G4bool MuonEndcapSensitiveDetector::ProcessHits(G4Step* step, G4TouchableHistory
 					  h.track->GetGlobalTime());
 
   if ( hit )  {
-    int i = 0;
-    if ( pname == "opticalphoton" && physical->GetName() == "SiPM")
-    {
-      i = 1;
-    }
-    hit->cellID  = i * getCellID( step ) ;
+    hit->cellID  = getCellID( step ) ;
     hit->energyDeposit =  step->GetTotalEnergyDeposit();
     hit->position = position;
     hit->momentum = direction;