diff --git a/compact/LGC.xml b/compact/LGC.xml
index c2fb7e4fc8a35b98faf653a481e3de532ffee41e..73286c1778e4c5785da92dd7ead22b7c0a690f2f 100644
--- a/compact/LGC.xml
+++ b/compact/LGC.xml
@@ -190,7 +190,7 @@
     <rotation x="65*degree" y="0" z="0" />
     <comment> TODO: implement PMT material layers </comment>
     <pmt_array dx="16*cm" dy="16*cm" sensitive="yes" vis="LGCPMTVis" />
-    <cone thickness="4*mm" rmin="7.0*cm" rmax="21.5*cm" length="30.*cm" vis="LGCConeVis" />
+    <cone shape="cone" thickness="4*mm" rmin="7.0*cm" rmax="21.5*cm" length="30.*cm" vis="LGCConeVis" />
     <shield material="Lead" thickness="1.*cm" radius="11.53*cm" length="8.*cm"
       shift_z="1.5*cm" vis="LGCShieldVis" />
   </winston_cone>
diff --git a/src/GasCherenkov_geo.cpp b/src/GasCherenkov_geo.cpp
index 7af0cb0f1444c7d6447aba70dd24f9f5008029d8..04216d434faf16a918e5515638772f4aaccc3bba 100644
--- a/src/GasCherenkov_geo.cpp
+++ b/src/GasCherenkov_geo.cpp
@@ -8,7 +8,7 @@
 #include "DDRec/Surface.h"
 
 #include <XML/Helper.h>
-#include "TMath.h"
+#include <fmt/core.h>
 
 using namespace dd4hep;
 using namespace dd4hep::rec;
@@ -181,12 +181,24 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
     double    cone_length       = x_cone.length();
     double    cone_radius1      = x_cone.rmin();
     double    cone_radius2      = x_cone.rmax();
-
+    auto      cone_shape        = x_cone.attr<std::string>(_Unicode(shape));
+
+    Volume    v_winston_cone("v_winston_cone");
+    if (cone_shape == "paraboloid") {
+        Paraboloid       winston_cone1(cone_radius1 + cone_thickness, cone_radius2 + cone_thickness, cone_length / 2.0 );
+        Paraboloid       winston_cone2(cone_radius1, cone_radius2, cone_length / 2.0 + 0.1*mm );
+        SubtractionSolid winston_cone_solid(winston_cone1, winston_cone2);
+        v_winston_cone.setSolid(winston_cone_solid);
+    } else if (cone_shape == "cone") {
+        Cone winston_cone_solid(cone_length/2., cone_radius1, cone_radius1 + cone_thickness, cone_radius2, cone_radius2 + cone_thickness);
+        v_winston_cone.setSolid(winston_cone_solid);
+    } else {
+        printout(ERROR, "SoLID_GasCherenkov",
+                 fmt::format("Unknown shape {} for the winston cone, please use (Paraboloid, Cone).", cone_shape));
+        throw std::runtime_error("Failed to build winston cone solid for SoLID_GasCherenkov");
+    }
+    v_winston_cone.setMaterial(winston_mat);
     DetElement       de_winston_cone(det, "de_winston_cone", 1);
-    Paraboloid       winston_cone1(cone_radius1 + cone_thickness, cone_radius2 + cone_thickness, cone_length / 2.0 );
-    Paraboloid       winston_cone2(cone_radius1, cone_radius2, cone_length / 2.0 + 0.1*mm );
-    SubtractionSolid winston_cone_solid(winston_cone1, winston_cone2);
-    Volume           v_winston_cone("v_winston_cone", winston_cone_solid, winston_mat);
     PlacedVolume     pv_winston_cone = winston_assem.placeVolume(v_winston_cone, Position(0., 0., (cone_length + pmt_dz)/2.));
     de_winston_cone.setPlacement(pv_winston_cone);
     v_winston_cone.setVisAttributes(desc, x_cone.attr<std::string>(_Unicode(vis)));