diff --git a/compact/cb_VTX.xml b/compact/cb_VTX_Barrel.xml
similarity index 54%
rename from compact/cb_VTX.xml
rename to compact/cb_VTX_Barrel.xml
index e3710b48a1bab94788682adfa332a6fbc2b8834f..4481871a36e43745bed69854eabea59b0f6615fe 100644
--- a/compact/cb_VTX.xml
+++ b/compact/cb_VTX_Barrel.xml
@@ -15,17 +15,17 @@
   </display>
 
   <detectors>
-    <detector id="cb_VTX_ID" name="cb_VTX" type="cb_VTX" readout="cb_VTX_Hits" vis="cb_VTXVis" insideTrackingVloume="true">
-      <dimensions rmin="cb_VTX_rmin" rmax="cb_VTX_rmax" length="cb_VTX_length"/>
-      <position x="cb_VTX_x_pos" y="cb_VTX_y_pos" z="cb_VTX_z_pos"/>
-      <layer repeat="cb_VTX_layer" vis="cb_VTX_layerVis">
+    <detector id="cb_VTX_Barrel_ID" name="cb_VTX_Barrel" type="cb_VTX_Barrel" readout="cb_VTX_Barrel_Hits" vis="cb_VTX_BarrelVis" insideTrackingVloume="true">
+      <dimensions rmin="cb_VTX_Barrel_rmin" rmax="cb_VTX_Barrel_rmax" length="cb_VTX_Barrel_length"/>
+      <position x="cb_VTX_Barrel_x_pos" y="cb_VTX_Barrel_y_pos" z="cb_VTX_Barrel_z_pos"/>
+      <layer repeat="cb_VTX_Barrel_layer" vis="cb_VTX_Barrel_layerVis">
 	<slice name="Silicon_slice" material="Si" sensitive="true"/>
       </layer>
     </detector>
   </detectors>
 
   <readouts>
-    <readout name="cb_VTX_Hits">
+    <readout name="cb_VTX_Barrel_Hits">
       <segmentation type="CartesianGridXY" grid_size_x="1.0*mm" grid_size_y="1.0*mm" />
       <id>system:8,barrel:3,layer:4,module:8,x:32:-16,y:-16</id>  
     </readout>
diff --git a/compact/definitions.xml b/compact/definitions.xml
index d8fcfa5a93d81935e46bdd6fbb109f9f6da401a7..5b7f7253d73e0d019c9093f04cb8e047291d3d52 100644
--- a/compact/definitions.xml
+++ b/compact/definitions.xml
@@ -68,7 +68,7 @@
       Layer 4 subassembly ID: 29
       Layer 5 subassembly ID: 30
     </comment>
-    <constant name="cb_VTX_ID" value="25"/>
+    <constant name="cb_VTX_Barrel_ID" value="25"/>
     <comment>
       Unused values reserved for vertex:
       constant name="SiVertexSubAssemblyLayer1_ID" value="121"
@@ -338,15 +338,15 @@
     <constant name="VertexTrackerOuterBarrelLength" value="400.0*mm"/>
 
     
-    <constant name="cb_VTX_rmin"   value="33.0*mm"/>
-    <constant name="cb_VTX_rmax"   value="165.0*mm"/>
-    <constant name="cb_VTX_length" value="740.0*mm"/>
+    <constant name="cb_VTX_Barrel_rmin"   value="33.0*mm"/>
+    <constant name="cb_VTX_Barrel_rmax"   value="165.0*mm"/>
+    <constant name="cb_VTX_Barrel_length" value="740.0*mm"/>
 
-    <constant name="cb_VTX_x_pos"   value="0.0*mm"/>
-    <constant name="cb_VTX_y_pos"   value="0.0*mm"/>
-    <constant name="cb_VTX_z_pos"   value="0.0*mm"/>
+    <constant name="cb_VTX_Barrel_x_pos"   value="0.0*mm"/>
+    <constant name="cb_VTX_Barrel_y_pos"   value="0.0*mm"/>
+    <constant name="cb_VTX_Barrel_z_pos"   value="0.0*mm"/>
 
-    <constant name="cb_VTX_layer"   value="6"/>
+    <constant name="cb_VTX_Barrel_layer"   value="6"/>
     <comment>
       --------------------------
       Silicon Tracker Parameters
diff --git a/compact/display.xml b/compact/display.xml
index 91e32bd2ac903ee605cfa2b6afa05326b4c0cf71..a51b7690debccbc28093e4ae88bc2cc9bc18070f 100644
--- a/compact/display.xml
+++ b/compact/display.xml
@@ -55,8 +55,8 @@
     <vis name="cb_CTD_Si_layerVis" alpha="1.0"  r= "0.9"  g="1.0"  b="0.1"  showDaughters="true" visible="true"/>
     <vis name="ce_GEMVis"          alpha="0.1"  r= "0.1"  g="0.0"  b="1.0"  showDaughters="true" visible="true"/>
     <vis name="cb_GEM_layerVis"    alpha="0.8"  r= "0.8"  g="0.4"  b="0.3"  showDaughters="true" visible="true"/>
-    <vis name="cb_VTXVis"          alpha="0.1"  r= "0.1"  g="0.0"  b="1.0"  showDaughters="true" visible="true"/>
-    <vis name="cb_VTX_layerVis"    alpha="2.0"  r= "0.0"  g="0.2"  b="0.8"  showDaughters="true" visible="true"/>
+    <vis name="cb_VTX_BarrelVis"          alpha="0.1"  r= "0.1"  g="0.0"  b="1.0"  showDaughters="true" visible="true"/>
+    <vis name="cb_VTX_Barrel_layerVis"    alpha="2.0"  r= "0.0"  g="0.2"  b="0.8"  showDaughters="true" visible="true"/>
 
     <vis name="ci_GEMVis"  r= "0.8"  g="0.4"  b="0.3" alpha="0.8" showDaughters="true" visible="true"/>
     <vis name="ci_HCALVis"  r= "0.6"  g="0"  b="0.6" alpha="1.0" showDaughters="true" visible="true"/>
diff --git a/reference_detector.xml b/reference_detector.xml
index 11d89f7190a33adf64829fde2b44daff854f5fb7..518c5ff1cc56ef89927f12e8a05934503baf1902 100644
--- a/reference_detector.xml
+++ b/reference_detector.xml
@@ -125,7 +125,7 @@
   <include ref="compact/hcal.xml"/>
   <include ref="compact/forward_trd.xml"/>
   <include ref="compact/B0_tracker.xml"/>
-  <include ref="compact/cb_VTX.xml"/>
+  <include ref="compact/cb_VTX_Barrel.xml"/>
   <!--
   <include ref="compact/ci_HCAL.xml"/>
   <include ref="compact/forward_rich.xml"/>
diff --git a/src/cb_VTX.cpp b/src/cb_VTX.cpp
deleted file mode 100644
index 398fba33f9f77af5aba8be9085952e6e2602f554..0000000000000000000000000000000000000000
--- a/src/cb_VTX.cpp
+++ /dev/null
@@ -1,217 +0,0 @@
-#include <XML/Helper.h>
-#include "DDRec/Surface.h"
-#include "DDRec/DetectorData.h"
-#include "DD4hep/OpticalSurfaces.h"
-#include "DD4hep/DetFactoryHelper.h"
-#include "DD4hep/Printout.h"
-//////////////////////////////////
-// Central Barrel Vertex Detector
-//////////////////////////////////
-
-using namespace std;
-using namespace dd4hep;
-
-static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens)
-{
-  xml_det_t  x_det      = e;
-  string     detName    = x_det.nameStr();
-  int        detID      = x_det.id();
-
-  xml_dim_t  dim        = x_det.dimensions();
-  double     RIn        = dim.rmin();
-  double     ROut       = dim.rmax();
-  double     SizeZ      = dim.length();
-
-  xml_dim_t  pos        = x_det.position();
-
-  Material   Vacuum     = desc.material("Vacuum");
-
-  // Create Global Volume 
-  Tube cb_VTX_GVol_Solid(RIn, ROut, SizeZ / 2.0, 0., 360.0 * deg);
-  Volume detVol("cb_VTX_GVol_Logic", cb_VTX_GVol_Solid, Vacuum);
-  detVol.setVisAttributes(desc.visAttributes(x_det.visStr()));
-
-  //////////////////
-  // Barrel Ladder
-  //////////////////
-  xml_comp_t x_layer = x_det.child(_U(layer));
-  const int repeat   = x_layer.repeat();
-  
-  xml_comp_t x_slice = x_layer.child(_U(slice));
-  Material slice_mat = desc.material(x_slice.materialStr());
-
-  double x = 0.0 * cm;
-  double y = 0.0 * cm;
-  double z = 0.0 * cm;
-  int FDIV = 0;
-  double dR = 0.0;
-  double length = 0.0;
-  double phi = 0.0;
-  // Ladder Layer Parameters
-  double lay_Dx[6];
-  double lay_Dy[6];
-  double lay_Dz[6];
-  double lay_Rin[6];
-  lay_Dx[0] = 0.050 * mm; lay_Dy[0] = 2.0 * cm; lay_Dz[0] = 10.0 * cm; lay_Rin[0] = 3.5 * cm;
-  lay_Dx[1] = 0.050 * mm; lay_Dy[1] = 2.0 * cm; lay_Dz[1] = 11.0 * cm; lay_Rin[1] = 4.5 * cm;
-  lay_Dx[2] = 0.150 * mm; lay_Dy[2] = 4.0 * cm; lay_Dz[2] = 18.0 * cm; lay_Rin[2] = 6.5 * cm;
-  lay_Dx[3] = 0.150 * mm; lay_Dy[3] = 4.0 * cm; lay_Dz[3] = 24.0 * cm; lay_Rin[3] = 10.5 * cm;
-  lay_Dx[4] = 0.150 * mm; lay_Dy[4] = 4.0 * cm; lay_Dz[4] = 36.0 * cm; lay_Rin[4] = 13.5 * cm;
-  lay_Dx[5] = 0.150 * mm; lay_Dy[5] = 4.0 * cm; lay_Dz[5] = 48.0 * cm; lay_Rin[5] = 15.5 * cm;
-
-  int i_layer = 0;
-  int i_module = 0;
-  // Loop over layers
-  for(int i = 0; i < repeat; i++) {
-    double cb_VTX_ladder_DZ = lay_Dz[i];
-    double cb_VTX_ladder_DY = lay_Dy[i];
-    double cb_VTX_ladder_Thickness = lay_Dx[i];
-    dR = lay_Rin[i]; 
-    length = 2.0 * 3.1415 * dR;
-    int laddersCount = length / cb_VTX_ladder_DY;
-
-    for (int i = 0; i < 2; i++) {
-      double LN = cb_VTX_ladder_DY * laddersCount;
-      double LN1 = cb_VTX_ladder_DY * (laddersCount + 1.0 + i);
-
-      if (LN/LN1 > 0.8)
-        laddersCount = laddersCount + 1;
-    }
-
-    double cb_VTX_ladder_deltaphi = 2.0 * 3.1415926 / laddersCount;
-
-    string ladderBoxName = detName + _toString(i, "_ladder_Solid_%d");
-    string ladderName = detName + _toString(i, "_ladder_Logic_%d");
-    Volume ladderVol(ladderName, Box(cb_VTX_ladder_Thickness * 0.5, cb_VTX_ladder_DY * 0.5, cb_VTX_ladder_DZ * 0.5), slice_mat);
-    ladderVol.setVisAttributes(desc,x_layer.visStr());
-    sens.setType("tracker");
-    ladderVol.setSensitiveDetector(sens);
-    i_layer++;
-
-    for (int ia = 0; ia < laddersCount; ia++) {
-      phi = (ia * (cb_VTX_ladder_deltaphi));
-      x = - dR * cos(phi);
-      y = - dR * sin(phi);
-
-      RotationZYX ladder_rot = RotationZYX(cb_VTX_ladder_deltaphi * ia, 0.0, 0.0);
-      Position ladder_pos = Position(x, y, z);
-      string ladderName = detName + _toString(i, "_ladder_Phys_%d") + _toString(ia, "_%d"); 
-      PlacedVolume ladderPV = detVol.placeVolume(ladderVol, Transform3D(ladder_rot, ladder_pos));
-      i_module++;
-      ladderPV.addPhysVolID("layer", i_layer).addPhysVolID("module", i_module);
-    }
-  }
-
-  // TODO: Pixels
-
-  //////////////////
-  // Endcaps Ladder
-  //////////////////
-  int lay = 0;
-  int NUMF;
-  phi = 0.0; x = 0.0; y = 0.0; z = 0.0;
-  double Fdeltaphi, Ftheta, F2theta;
-  double RxF[10], RyF[10], RzF[10], RxF2[10], RyF2[10], RzF2[10];
-  double Rzshift = 24.0 * cm;
-  double fVTX_END_EDY = 12.0 * cm;
-  double fVTX_END_EDZ = 0.05 * cm;
-  double fVTX_END_EDX1 = 6.0 * cm;
-  double fVTX_END_EDX2 = 4.0 * cm;
-
-  for (lay = 0; lay < 3; lay++) {
-    if (lay == 3) {
-      fVTX_END_EDY = 18.0 * cm;
-      NUMF = 24;
-      Fdeltaphi = 15.0 * deg;
-      Ftheta = -40.0 * deg;
-      RxF[lay] = 1.3 * cm;
-      RyF[lay] = RxF[lay];
-      RzF[lay] = -Rzshift - 5.5 * cm;
-      RxF2[lay] = 1.3 * cm;
-      RyF2[lay] = RxF2[lay];
-      RzF2[lay] = Rzshift + 5.5 * cm;
-    }
-    if (lay == 2) {
-      NUMF = 20;
-      fVTX_END_EDY = 16.0 * cm;
-      Fdeltaphi = 18.0 * deg;
-      Ftheta = -38.0 * deg;
-      RxF[lay] = 1.1 * cm;
-      RyF[lay] = RxF[lay];
-      RzF[lay] = -Rzshift - 5.5 * cm;
-      RxF2[lay] = 1.1 * cm;
-      RyF2[lay] = RxF2[lay];
-      RzF2[lay] = Rzshift + 5.5 * cm;
-    }
-    if (lay == 1) {
-      NUMF = 18;
-      fVTX_END_EDY = 14.0 * cm;
-      Fdeltaphi = 20.0 * deg;
-      Ftheta = -45.0 * deg;
-      RxF[lay] = 1.0 * cm;
-      RyF[lay] = RxF[lay];
-      RzF[lay] = -Rzshift + 1.0 * cm;
-      RxF2[lay] = 1.0 * cm;
-      RyF2[lay] = RxF2[lay];
-      RzF2[lay] = Rzshift - 1.0 * cm;
-    }
-    if (lay == 0) {
-      NUMF = 12;
-      fVTX_END_EDY = 12.0 * cm;
-      Fdeltaphi = 30.0 * deg;
-      Ftheta = -55.0 * deg;
-      RxF[lay] = 0.8 * cm;
-      RyF[lay] = RxF[lay];
-      RzF[lay] = -Rzshift + 7.0 * cm;
-      RxF2[lay] = 0.8 * cm;
-      RyF2[lay] = RxF2[lay];
-      RzF2[lay] = Rzshift - 7.0 * cm;
-    }
-
-    i_layer++;
-    // Electron going side Endcap
-    string logicladderENDEName = detName + _toString(lay, "_logic_ladder_END_E%d");
-    Volume ladderENDEVol(logicladderENDEName,Trap(fVTX_END_EDZ,fVTX_END_EDY + lay * 2.0, fVTX_END_EDX1, fVTX_END_EDX2), slice_mat);
-    for (int ia = 0; ia < NUMF; ia++) {
-      phi = ia * Fdeltaphi;
-      x = -RxF[lay] * cos(phi);
-      y = -RyF[lay] * sin(phi);
-      z = RzF[lay];
-
-      RotationZYX ladder_ENDE_rot = RotationZYX(-90.0 + (Fdeltaphi * (ia + 1)), 0.0, Ftheta);
-      Position ladder_ENDE_pos = Position(x,y,z);
-      string ladderName = detName + _toString(lay, "_ladder_END_E_Phys_%d") + _toString(ia, "_%d");
-      PlacedVolume ladderENDEPV = detVol.placeVolume(ladderENDEVol, Transform3D(ladder_ENDE_rot, ladder_ENDE_pos));
-      i_module++;
-      ladderENDEPV.addPhysVolID("layer", i_layer).addPhysVolID("module", i_module);
-    }
-
-    // Hadron going side Endcap
-    string logicladderENDHName = detName + _toString(lay, "_logic_ladder_END_H%d");
-    Volume ladderENDHVol(logicladderENDHName,Trap(fVTX_END_EDZ, fVTX_END_EDY, fVTX_END_EDX1, fVTX_END_EDX2), slice_mat);
-    for (int ia = 0; ia < NUMF; ia++) {
-      phi = ia * Fdeltaphi;
-      x = -RxF2[lay] * cos(phi);
-      y = -RyF2[lay] * sin(phi);
-      z = RzF2[lay];
-
-      RotationZYX ladder_ENDH_rot = RotationZYX(-90.0 + (Fdeltaphi * (ia + 1)), 0.0, -Ftheta);
-      Position ladder_ENDH_pos = Position(x,y,z);
-      string ladderName = detName + _toString(lay, "_ladder_END_H_Phys_%d") + _toString(ia, "_%d");
-      PlacedVolume ladderENDHPV = detVol.placeVolume(ladderENDHVol, Transform3D(ladder_ENDH_rot, ladder_ENDH_pos));
-      i_module++;
-      ladderENDHPV.addPhysVolID("layer", i_layer).addPhysVolID("module", i_module);
-    }
-  }
-
-  DetElement   det(detName, detID);
-  Volume       motherVol = desc.pickMotherVolume(det);
-  Transform3D  tr(RotationZYX(0.0, 0.0, 0.0), Position(0.0, 0.0, pos.z()));
-  PlacedVolume detPV = motherVol.placeVolume(detVol, tr);
-  detPV.addPhysVolID("system", detID);
-  detPV.addPhysVolID("barrel", 1);
-  det.setPlacement(detPV);
-  return det;
-}
-
-DECLARE_DETELEMENT(cb_VTX, createDetector)
diff --git a/src/cb_VTX_Barrel.cpp b/src/cb_VTX_Barrel.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..511f4a2680225097712db696bd1a759cb880cb51
--- /dev/null
+++ b/src/cb_VTX_Barrel.cpp
@@ -0,0 +1,117 @@
+#include <XML/Helper.h>
+#include "DDRec/Surface.h"
+#include "DDRec/DetectorData.h"
+#include "DD4hep/OpticalSurfaces.h"
+#include "DD4hep/DetFactoryHelper.h"
+#include "DD4hep/Printout.h"
+//////////////////////////////////
+// Central Barrel Vertex Detector
+//////////////////////////////////
+
+using namespace std;
+using namespace dd4hep;
+
+static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens)
+{
+  xml_det_t  x_det      = e;
+  string     detName    = x_det.nameStr();
+  int        detID      = x_det.id();
+
+  xml_dim_t  dim        = x_det.dimensions();
+  double     RIn        = dim.rmin();
+  double     ROut       = dim.rmax();
+  double     SizeZ      = dim.length();
+
+  xml_dim_t  pos        = x_det.position();
+
+  Material   Vacuum     = desc.material("Vacuum");
+
+  // Create Global Volume 
+  Tube cb_VTX_Barrel_GVol_Solid(RIn, ROut, SizeZ / 2.0, 0., 360.0 * deg);
+  Volume detVol("cb_VTX_Barrel_GVol_Logic", cb_VTX_Barrel_GVol_Solid, Vacuum);
+  detVol.setVisAttributes(desc.visAttributes(x_det.visStr()));
+
+  //////////////////
+  // Barrel Ladder
+  //////////////////
+  xml_comp_t x_layer = x_det.child(_U(layer));
+  const int repeat   = x_layer.repeat();
+  
+  xml_comp_t x_slice = x_layer.child(_U(slice));
+  Material slice_mat = desc.material(x_slice.materialStr());
+
+  double x = 0.0 * cm;
+  double y = 0.0 * cm;
+  double z = 0.0 * cm;
+  int FDIV = 0;
+  double dR = 0.0;
+  double length = 0.0;
+  double phi = 0.0;
+  // Ladder Layer Parameters
+  double lay_Dx[6];
+  double lay_Dy[6];
+  double lay_Dz[6];
+  double lay_Rin[6];
+  lay_Dx[0] = 0.050 * mm; lay_Dy[0] = 2.0 * cm; lay_Dz[0] = 10.0 * cm; lay_Rin[0] = 3.5 * cm;
+  lay_Dx[1] = 0.050 * mm; lay_Dy[1] = 2.0 * cm; lay_Dz[1] = 11.0 * cm; lay_Rin[1] = 4.5 * cm;
+  lay_Dx[2] = 0.150 * mm; lay_Dy[2] = 4.0 * cm; lay_Dz[2] = 18.0 * cm; lay_Rin[2] = 6.5 * cm;
+  lay_Dx[3] = 0.150 * mm; lay_Dy[3] = 4.0 * cm; lay_Dz[3] = 24.0 * cm; lay_Rin[3] = 10.5 * cm;
+  lay_Dx[4] = 0.150 * mm; lay_Dy[4] = 4.0 * cm; lay_Dz[4] = 36.0 * cm; lay_Rin[4] = 13.5 * cm;
+  lay_Dx[5] = 0.150 * mm; lay_Dy[5] = 4.0 * cm; lay_Dz[5] = 48.0 * cm; lay_Rin[5] = 15.5 * cm;
+
+  int i_layer = 0;
+  int i_module = 0;
+  // Loop over layers
+  for(int i = 0; i < repeat; i++) {
+    double cb_VTX_Barrel_ladder_DZ = lay_Dz[i];
+    double cb_VTX_Barrel_ladder_DY = lay_Dy[i];
+    double cb_VTX_Barrel_ladder_Thickness = lay_Dx[i];
+    dR = lay_Rin[i]; 
+    length = 2.0 * 3.1415 * dR;
+    int laddersCount = length / cb_VTX_Barrel_ladder_DY;
+
+    for (int i = 0; i < 2; i++) {
+      double LN = cb_VTX_Barrel_ladder_DY * laddersCount;
+      double LN1 = cb_VTX_Barrel_ladder_DY * (laddersCount + 1.0 + i);
+
+      if (LN/LN1 > 0.8)
+        laddersCount = laddersCount + 1;
+    }
+
+    double cb_VTX_Barrel_ladder_deltaphi = 2.0 * 3.1415926 / laddersCount;
+
+    string ladderBoxName = detName + _toString(i, "_ladder_Solid_%d");
+    string ladderName = detName + _toString(i, "_ladder_Logic_%d");
+    Volume ladderVol(ladderName, Box(cb_VTX_Barrel_ladder_Thickness * 0.5, cb_VTX_Barrel_ladder_DY * 0.5, cb_VTX_Barrel_ladder_DZ * 0.5), slice_mat);
+    ladderVol.setVisAttributes(desc,x_layer.visStr());
+    sens.setType("tracker");
+    ladderVol.setSensitiveDetector(sens);
+    i_layer++;
+
+    for (int ia = 0; ia < laddersCount; ia++) {
+      phi = (ia * (cb_VTX_Barrel_ladder_deltaphi));
+      x = - dR * cos(phi);
+      y = - dR * sin(phi);
+
+      RotationZYX ladder_rot = RotationZYX(cb_VTX_Barrel_ladder_deltaphi * ia, 0.0, 0.0);
+      Position ladder_pos = Position(x, y, z);
+      string ladderName = detName + _toString(i, "_ladder_Phys_%d") + _toString(ia, "_%d"); 
+      PlacedVolume ladderPV = detVol.placeVolume(ladderVol, Transform3D(ladder_rot, ladder_pos));
+      i_module++;
+      ladderPV.addPhysVolID("layer", i_layer).addPhysVolID("module", i_module);
+    }
+  }
+
+  // TODO: Pixels
+
+  DetElement   det(detName, detID);
+  Volume       motherVol = desc.pickMotherVolume(det);
+  Transform3D  tr(RotationZYX(0.0, 0.0, 0.0), Position(0.0, 0.0, pos.z()));
+  PlacedVolume detPV = motherVol.placeVolume(detVol, tr);
+  detPV.addPhysVolID("system", detID);
+  detPV.addPhysVolID("barrel", 1);
+  det.setPlacement(detPV);
+  return det;
+}
+
+DECLARE_DETELEMENT(cb_VTX_Barrel, createDetector)