diff --git a/src/ce_MRICH.cpp b/src/ce_MRICH.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..4f5418fc98ecedd3fd9ef813afa1a0b404328f4d
--- /dev/null
+++ b/src/ce_MRICH.cpp
@@ -0,0 +1,61 @@
+
+#include <XML/Helper.h>
+#include "TMath.h"
+#include "TString.h"
+#include "Math/Point2D.h"
+#include "DDRec/Surface.h"
+#include "DDRec/DetectorData.h"
+#include "DD4hep/OpticalSurfaces.h"
+#include "DD4hep/DetFactoryHelper.h"
+#include "DD4hep/Printout.h"
+
+using namespace std;
+using namespace dd4hep;
+using namespace dd4hep::rec;
+
+typedef ROOT::Math::XYPoint Point;
+
+
+// create the detector
+static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetector sens)
+{
+    xml::DetElement detElem = handle;
+    std::string detName = detElem.nameStr();
+    int detID = detElem.id();
+
+    DetElement det(detName, detID);
+    xml::Component dims = detElem.dimensions();
+    xml::Component mods = detElem.child(_Unicode(modules));
+    xml::Component rads = detElem.child(_Unicode(radiator));
+
+    auto RIn = dims.attr<double>(_Unicode(r_in));
+    auto ROut = dims.attr<double>(_Unicode(r_out));
+    auto SizeZ = dims.attr<double>(_Unicode(size_z));
+    auto PosZ = dims.z();
+    auto InnerR = dims.attr<double>(_Unicode(inner_r));
+
+    auto mThick = mods.attr<double>(_Unicode(thickness));
+    auto mWidth = mods.attr<double>(_Unicode(width));
+    auto mGap = mods.attr<double>(_Unicode(gap));
+
+    auto envMat = desc.material(detElem.materialStr());
+
+    // detector envelope
+    auto envShape = Tube(RIn, ROut, SizeZ / 2., 0., 2*M_PI);
+    Volume envVol("ce_MRICH_GVol", envShape, envMat);
+    envVol.setVisAttributes(desc.visAttributes(detElem.visStr()));
+
+    // modules
+
+    // place envelope
+    Volume motherVol = desc.pickMotherVolume(det);
+    PlacedVolume envPV = motherVol.placeVolume(envVol, Position(0, 0, PosZ));
+    envPV.addPhysVolID("system", detID);
+    det.setPlacement(envPV);
+    return det;
+}
+
+
+// clang-format off
+DECLARE_DETELEMENT(ce_MRICH, createDetector)
+