diff --git a/ci_HCAL.xml b/ci_HCAL.xml
new file mode 100644
index 0000000000000000000000000000000000000000..37c84dcc8d33746bb21909e9af78c3978f1da179
--- /dev/null
+++ b/ci_HCAL.xml
@@ -0,0 +1,74 @@
+<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">
+
+  <!-- Some information about detector  -->
+  <info name="Central Ion HCAL" title="Central Ion HCAL"
+        author="Marshall Scott"
+        url="https://eicweb.phy.anl.gov/EIC/detectors/reference_detector.git"
+        status="development"
+        version="v1 2021-03-31">
+    <comment>Central Ion HCAL</comment>        
+  </info>
+
+  <!-- Use DD4hep elements and materials definitions -->
+  <includes>
+    <gdmlFile ref="elements.xml"/>
+    <gdmlFile ref="materials.xml"/>
+  </includes>
+
+  <!-- Define the dimensions of the world volume -->
+  <define>
+  	<!-- Temporary, just sdummy place holders at the moment -->
+  	<constant name="world_side" value="50*m"/>
+    <constant name="world_x"    value="world_side"/>
+    <constant name="world_y"    value="world_side"/>
+    <constant name="world_z"    value="500.*m"/><!--Taken from DetectorConfig.hh-->
+
+    <constant name="ci_HCAL_id"      value="1"/>
+    <constant name="ci_HCAL_rin"     value="10 * cm"/>
+    <constant name="ci_HCAL_rout"    value="95 * cm"/>
+    <constant name="ci_HCAL_sizez"   value="30 * cm"/>
+    <constant name="ci_HCAL_shiftz"  value="0 * cm"/>
+    <constant name="ci_HCAL_posz"    value="0 * cm"/>
+    <constant name="ci_HCAL_posx"    value="0 * cm"/>
+    <constant name="ci_HCAL_nlayers" value="8"/>
+  </define>
+
+   <limits>
+   	<comment>Not defined within the ci_HCAL.hh file</comment>
+  </limits>
+
+  <regions>
+  	<comment>Not defined within the ci_HCAL.hh file</comment>
+  </regions>
+
+  <!-- Common Generic visualization attributes -->
+  <!-- change this -->
+  <comment>Common Generic visualization attributes</comment>
+  <display>
+    <vis name="ci_HCALVis"  r= "0.8"  g="0.4"  b="0.3" alpha="0.8" showDaughters="true" visible="true"/>
+  </display>
+
+  <!-- Define detector, currentky dummy values -->
+  <detectors>
+    <comment>
+      Central Ion HCAL
+    </comment>
+    <detector id="ci_HCAL_id" name="ci_HCAL" type="ci_HCAL" insideTrackingVolume="false" vis="ci_HCALVis">
+	    <material name="Ar10CO2"/>	    
+      <dimensions rmin="ci_HCAL_rin" rmax="ci_HCAL_rout" sizez="ci_HCAL_sizez" delta="ci_HCAL_shiftz"	z="ci_HCAL_posz" x="ci_HCAL_posx" nlayers="ci_HCAL_nlayers"/>
+      <layer id="0" z="-sizez * 0.5 + (5 + 3. * id) * cm" inner_r="rmin + (1. + 0.5 * id) * cm" outer_r="rmax + (-25. + 2. * id) * cm" dz="1 * cm" />
+      <layer id="1" z="-sizez * 0.5 + (5 + 3. * id) * cm" inner_r="rmin + (1. + 0.5 * id) * cm" outer_r="rmax + (-25. + 2. * id) * cm" dz="1 * cm" />
+      <layer id="2" z="-sizez * 0.5 + (5 + 3. * id) * cm" inner_r="rmin + (1. + 0.5 * id) * cm" outer_r="rmax + (-25. + 2. * id) * cm" dz="1 * cm" />
+      <layer id="3" z="-sizez * 0.5 + (5 + 3. * id) * cm" inner_r="rmin + (1. + 0.5 * id) * cm" outer_r="rmax + (-25. + 2. * id) * cm" dz="1 * cm" />
+      <layer id="4" z="-sizez * 0.5 + (5 + 3. * id) * cm" inner_r="rmin + (1. + 0.5 * id) * cm" outer_r="rmax + (-25. + 2. * id) * cm" dz="1 * cm" />
+      <layer id="5" z="-sizez * 0.5 + (5 + 3. * id) * cm" inner_r="rmin + (1. + 0.5 * id) * cm" outer_r="rmax + (-25. + 2. * id) * cm" dz="1 * cm" />
+      <layer id="6" z="-sizez * 0.5 + (5 + 3. * id) * cm" inner_r="rmin + (1. + 0.5 * id) * cm" outer_r="rmax + (-25. + 2. * id) * cm" dz="1 * cm" />
+      <layer id="7" z="-sizez * 0.5 + (5 + 3. * id) * cm" inner_r="rmin + (1. + 0.5 * id) * cm" outer_r="rmax + (-25. + 2. * id) * cm" dz="1 * cm" />
+    </detector>
+  </detectors>
+
+  <plugins>
+  </plugins>
+</lccdd>
\ No newline at end of file
diff --git a/src/ci_HCAL.cpp b/src/ci_HCAL.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..0b0395fe37d56a833a35236286df113766c98dc3
--- /dev/null
+++ b/src/ci_HCAL.cpp
@@ -0,0 +1,68 @@
+#include <XML/Helper.h>
+///////////////////////////
+// Central Ion GEM
+///////////////////////////
+
+using namespace dd4hep;
+
+static Ref_t createDetector(Detector& desc, xml_h handle, SensitiveDetector sens)
+{
+
+  xml::DetElement detElem = handle;
+  std::string     detName = "ci_HCAL";
+  int             detID   = 1;
+
+  //xml::Component dims = detElem.dimensions();
+  //Envelope volume specs
+  double RIn     = 0.   * dd4hep::cm;
+  double ROut    = 300. * dd4hep::cm;
+  double SizeZ   = 160. * dd4hep::cm;
+  double ShiftZ  = 5.   * dd4hep::cm;
+  double PosZ    = 0.   * dd4hep::cm;
+  double det_RIn = 80.  * dd4hep::cm;
+  Material mat_iron  = desc.material("Iron");
+  Material mat_air   = desc.material("Air");
+  Material mat_vac   = desc.material("Vacuum")
+
+
+  
+  Tube         ci_Hcal_Solid(RIn, ROut, SizeZ / 2., 0., 360 * deg);
+  Volume       envelopeVol("ci_Hcal_Logic", ci_Hcal_Solid, mat_vac);//check that this one is iron
+  envelopeVol.setVisAttributes(0.3, 0, 3.0, 0.1);
+
+  //Layer Specs
+  double det_ROut       = ROut - 1. * dd4hep::cm;
+  double det_ThicknessZ = 2.        * dd4hep::cm;
+  double det_GapZ       = 2.        * dd4hep::cm;
+  double Nlay           = 20;
+
+  Tube         ci_Hcal_detSolid(RIn, det_ROut, det_ThicknessZ / 2., 0., 360 * deg);
+  //Volume       detVol("ci_Hcal_det_Logic", ci_Hcal_detSolid, mat_iron);//extraneous
+  //detVol.setVisAttributes(0.6, 0, 0.6, 1);
+
+
+  
+  //Adding layers to placed detector volume
+  for (int lNum = 0; lNum < Nlay; lNum++){
+  	//xml_comp_t x_layer = c;
+  	string layer_name = detName + _toString(lNum, "_layer%d");
+  	double layer_Posz = -SizeZ / 2. + (lNum + 1) * det_ThicknessZ + (lNum + 1) * 5. * ddphep::cm;
+  	
+    Volume layer_vol(layer_name, ci_Hcal_detSolid, mat_iron);
+  	Position layer_pos(0, 0, layer_Posz);
+  	//DetElement layer(envelope_det, layer_name, detID);
+  	//layer.setVisAttributes(desc.visAttributes(det.visStr()));
+  	//layer.setAttributes(desc, layer_vol, desc.region(), desc.limits(), );//(region, limits, visable).
+  	PlacedVolume layer_phv = envelopeVol.placeVolume(layer_vol, layer_pos);
+  	layer_phv.addPhysVolID("layer", layerNum);
+  }
+
+  DetElement   det(detName, detID);
+  Volume       motherVol = desc.pickMotherVolume(det);
+  PlacedVolume detPV     = motherVol.placeVolume(envelopeVol, RotationZYX(0,0,0));
+  det.setPlacement(detPV);
+
+  return det;
+}
+// clang-format off
+DECLARE_DETELEMENT(ci_GEM, createDetector)