diff --git a/macro/rich/create_rich_geo.C b/macro/rich/create_rich_geo.C
index dc1a3fb6ca9c44eaf222e4b64176ed9a7d8686f3..5f1e47b6e1d1b6c21cb1c84c4834659d5dff3028 100644
--- a/macro/rich/create_rich_geo.C
+++ b/macro/rich/create_rich_geo.C
@@ -1,12 +1,17 @@
-/* Copyright (C) 2022-2022 UGiessen/GSI, Giessen/Darmstadt
+/* Copyright (C) 2022-2025 UGiessen/GSI, Giessen/Darmstadt
    SPDX-License-Identifier: GPL-3.0-only
-   Authors: Semen Lebedev [committer] */
+   Authors: Semen Lebedev [committer], Simon Neuhaus */
 
 void create_rich_geo()
 {
   RichGeoCreator* geoCreator = new RichGeoCreator();
-  geoCreator->SetGeoName("rich_v22b");
-  geoCreator->SetAddShieldingBox(false);
+  //geoCreator->SetGeoName("rich_v25a");
   geoCreator->SetVolumeColors(false);
   geoCreator->Create();
+
+  // Add (dummy) translation to geo file
+  TFile* geoFile               = new TFile((geoCreator->GetGeoName() + ".geo.root?reproducible").c_str(), "UPDATE");
+  TGeoTranslation* translation = new TGeoTranslation("rich_trans", 0., 0., 0.);
+  translation->Write();
+  geoFile->Close();
 }
diff --git a/sim/detectors/rich/geo/RichGeoCreator.cxx b/sim/detectors/rich/geo/RichGeoCreator.cxx
index 4306d7c9a328d7feeb68739b0bf78eb46131ea3b..69dcb46fab2f9bb9db47bb6a61ae462bd3edf00d 100644
--- a/sim/detectors/rich/geo/RichGeoCreator.cxx
+++ b/sim/detectors/rich/geo/RichGeoCreator.cxx
@@ -1,4 +1,4 @@
-/* Copyright (C) 2022-2024 UGiessen/GSI, Giessen/Darmstadt
+/* Copyright (C) 2022-2025 UGiessen/GSI, Giessen/Darmstadt
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Semen Lebedev [committer], Eoin Clerkin, Simon Neuhaus*/
 
@@ -24,7 +24,6 @@
 
 using namespace std;
 
-// using TMath::ACos;
 using TMath::ASin;
 using TMath::ATan;
 using TMath::Cos;
@@ -43,10 +42,6 @@ void RichGeoCreator::Create()
 
   CalculateParams();
 
-  //  TGeoVolume* vol = CreateMirrorSupportBelts();
-  //  vol->Draw("ogl");
-  //  vol->Export("rich_volume.root");
-
   CreateRich();
 }
 
@@ -113,29 +108,38 @@ TGeoVolume* RichGeoCreator::CreatePmt()
     double xC = (x - 3.5) * fPixelSize;
     if (x == 0) xC = -edgePxPos;
     if (x == 7) xC = edgePxPos;
+    bool isXEdge = (x == 0 || x == fNofPixels - 1);
+
     for (int y = 0; y < fNofPixels; y++) {
       double yC = (y - 3.5) * fPixelSize;
       if (y == 0) yC = edgePxPos;
       if (y == 7) yC = -edgePxPos;
 
-      bool isXEdge            = (x == 0 || x == fNofPixels - 1);
       bool isYEdge            = (y == 0 || y == fNofPixels - 1);
-      TGeoVolume* curPmtPixel = pixel;
-      if (isXEdge) curPmtPixel = pixelX;
-      if (isYEdge) curPmtPixel = pixelY;
-      if (isXEdge && isYEdge) curPmtPixel = pixelCorner;
+      TGeoVolume* curPmtPixel;
+      if (isXEdge) {
+        if (isYEdge) {
+          curPmtPixel = pixelCorner;
+        }
+        else {
+          curPmtPixel = pixelX;
+        }
+      }
+      else {
+        if (isYEdge) {
+          curPmtPixel = pixelY;
+        }
+        else {
+          curPmtPixel = pixel;
+        }
+      }
 
       pmt->AddNode(curPmtPixel, copyNum, MakeTrans(xC, yC, zC));
       copyNum++;
     }
   }
 
-  TGeoBBox* pmtContPB = new TGeoBBox("pmt_cont_PB", pmtSizeHalf, pmtSizeHalf, pmtDepthHalf);
-  TGeoVolume* pmtCont = new TGeoVolume("pmt_cont", pmtContPB, fMaterials.GetMedium("RICHgas_CO2_dis"));
-  pmtCont->AddNode(pmt, 1, MakeTrans(0., 0., 0.));
-  //if (fSetVolumeColors) pmtCont->SetLineColor(kRed - 4);
-
-  return pmtCont;
+  return pmt;
 }
 
 
@@ -292,7 +296,102 @@ TGeoVolumeAssembly* RichGeoCreator::CreateMirror()
   return mHalf;
 }
 
-TGeoVolume* RichGeoCreator::CreateStuds(double ypos, double lenHalf, double angle)
+TGeoVolumeAssembly* RichGeoCreator::CreateMirrorFixing(const string& sides)
+{
+  if (sides != "both" && sides != "left" && sides != "right" && sides != "none") {
+    cout << "unknown value " << sides << " for sides in function CreateMirrorFixing" << endl;
+  }
+  TGeoMedium* medGas  = fMaterials.GetMedium("RICHgas_CO2_dis");
+  TGeoMedium* medAl   = fMaterials.GetMedium("aluminium");
+  double distanceHalf = 19.414 / 2;
+
+  double widthHalf      = 28.0 / 2;
+  double lengthHalf     = 25.017 / 2;
+  double heightHalf     = 2.8 / 2;
+  double thicknessHalf  = 0.3 / 2;
+  double neckHalf       = 9.884 / 2;
+  double partwidthHalf  = 3.0 / 2;
+  double sidelenghtHalf = 14.009 / 2;
+  double sidewidthHalf  = 2.0 / 2;
+
+  TGeoVolumeAssembly* mirrorFixing = new TGeoVolumeAssembly("mirrorfixing");
+  TGeoBBox* triangleSurrounding    = new TGeoBBox("mirrorfixingtrianglesurrounding", lengthHalf, widthHalf, heightHalf);
+  TGeoVolume* triangle             = new TGeoVolume("mirrorfixingtriangle", triangleSurrounding, medGas);
+
+  TGeoBBox* pbbase    = new TGeoBBox(partwidthHalf, widthHalf, heightHalf);
+  TGeoBBox* pbbaseGas = new TGeoBBox(partwidthHalf - 2 * thicknessHalf, widthHalf - 3 - 1.897, heightHalf);
+  TGeoVolume* base    = new TGeoVolume("base", pbbase, medAl);
+  TGeoVolume* baseGas = new TGeoVolume("baseGas", pbbaseGas, medGas);
+  base->AddNode(baseGas, 1);
+  triangle->AddNode(base, 1, MakeTrans(-lengthHalf + partwidthHalf, 0, 0));
+
+  // creating the sides of the diagonal part as thin boxes (avoid problem with the not 90degree angles)
+  double lenleg1   = sidelenghtHalf - 2 * sidewidthHalf / Sin(60 * pi / 180);
+  double lenleg2   = sidelenghtHalf + (sidewidthHalf - thicknessHalf) / Sin(60 * pi / 180) - partwidthHalf;
+  TGeoBBox* pbleg1 = new TGeoBBox(lenleg1, thicknessHalf, heightHalf);
+  TGeoBBox* pbleg2 = new TGeoBBox(lenleg2, thicknessHalf, heightHalf);
+  TGeoVolume* leg1 = new TGeoVolume("leg1", pbleg1, medAl);
+  TGeoVolume* leg2 = new TGeoVolume("leg2", pbleg2, medAl);
+  triangle->AddNode(leg1, 1,
+                    MakeCombiTrans(-neckHalf + partwidthHalf - sidewidthHalf / Sin(60 * pi / 180),
+                                   -lenleg1 * Sin(30 * pi / 180) - thicknessHalf * Cos(30 * pi / 180), 0, 0, 0, 30));
+  triangle->AddNode(leg2, 1,
+                    MakeCombiTrans(-neckHalf + partwidthHalf,
+                                   -2 * (sidewidthHalf - 2 * thicknessHalf) - lenleg2 * Sin(30 * pi / 180)
+                                     + thicknessHalf * Cos(30 * pi / 180),
+                                   0, 0, 0, 30));
+  triangle->AddNode(leg1, 2,
+                    MakeCombiTrans(-neckHalf + partwidthHalf - sidewidthHalf / Sin(60 * pi / 180),
+                                   lenleg1 * Sin(30 * pi / 180) + thicknessHalf * Cos(30 * pi / 180), 0, 0, 0, -30));
+  triangle->AddNode(leg2, 2,
+                    MakeCombiTrans(-neckHalf + partwidthHalf,
+                                   2 * (sidewidthHalf - 2 * thicknessHalf) + lenleg2 * Sin(30 * pi / 180)
+                                     - thicknessHalf * Cos(30 * pi / 180),
+                                   0, 0, 0, -30));
+
+  TGeoBBox* pbneck    = new TGeoBBox(neckHalf, partwidthHalf, heightHalf);
+  TGeoBBox* pbneckGas = new TGeoBBox(neckHalf - 4.7, partwidthHalf - 2 * thicknessHalf, heightHalf);
+  TGeoVolume* neck    = new TGeoVolume("neck", pbneck, medAl);
+  TGeoVolume* neckGas = new TGeoVolume("neckGas", pbneckGas, medGas);
+  neck->AddNode(neckGas, 1, MakeTrans(-2.35, 0, 0));
+  triangle->AddNode(neck, 1, MakeTrans(lengthHalf - neckHalf, 0, 0));
+
+  if (sides == "both" || sides == "right") {
+    mirrorFixing->AddNode(triangle, 1, MakeTrans(distanceHalf + lengthHalf, 0, 0));
+  }
+  if (sides == "both" || sides == "left") {
+    mirrorFixing->AddNode(triangle, 2, MakeCombiTrans(-distanceHalf - lengthHalf, 0, 0, 0, 0, 180));
+  }
+  if (sides == "left" || sides == "right") {
+    TGeoBBox* pbconnection    = new TGeoBBox("connectionMirrorfixing", distanceHalf / 2, partwidthHalf, heightHalf);
+    TGeoBBox* pbconnectionGas = new TGeoBBox("connectionMirrorfixingGas", distanceHalf / 2,
+                                             partwidthHalf - 2 * thicknessHalf, heightHalf - 2 * thicknessHalf);
+    TGeoVolume* connection    = new TGeoVolume("connectionMirrorfixing", pbconnection, medAl);
+    TGeoVolume* connectionGas = new TGeoVolume("connectionMirrorfixingGas", pbconnectionGas, medGas);
+    connection->AddNode(connectionGas, 1);
+    if (sides == "right") {
+      mirrorFixing->AddNode(connection, 1, MakeTrans(distanceHalf / 2, sidelenghtHalf + partwidthHalf, 0));
+      mirrorFixing->AddNode(connection, 2, MakeTrans(distanceHalf / 2, -sidelenghtHalf - partwidthHalf, 0));
+    }
+    else {
+      mirrorFixing->AddNode(connection, 1, MakeTrans(-distanceHalf / 2, sidelenghtHalf + partwidthHalf, 0));
+      mirrorFixing->AddNode(connection, 2, MakeTrans(-distanceHalf / 2, -sidelenghtHalf - partwidthHalf, 0));
+    }
+  }
+  else {
+    TGeoBBox* pbconnection    = new TGeoBBox("connectionMirrorfixing", distanceHalf, partwidthHalf, heightHalf);
+    TGeoBBox* pbconnectionGas = new TGeoBBox("connectionMirrorfixingGas", distanceHalf,
+                                             partwidthHalf - 2 * thicknessHalf, heightHalf - 2 * thicknessHalf);
+    TGeoVolume* connection    = new TGeoVolume("connectionMirrorfixing", pbconnection, medAl);
+    TGeoVolume* connectionGas = new TGeoVolume("connectionMirrorfixingGas", pbconnectionGas, medGas);
+    connection->AddNode(connectionGas, 1);
+    mirrorFixing->AddNode(connection, 1, MakeTrans(0, sidelenghtHalf + partwidthHalf, 0));
+    mirrorFixing->AddNode(connection, 2, MakeTrans(0, -sidelenghtHalf - partwidthHalf, 0));
+  }
+  return mirrorFixing;
+}
+
+TGeoVolume* RichGeoCreator::CreateStuds(double ypos, double lenHalf, double angle, const string& mirrorfixing)
 {
   TGeoMedium* medGas = fMaterials.GetMedium("RICHgas_CO2_dis");
   TGeoMedium* medAl  = fMaterials.GetMedium("aluminium");
@@ -302,17 +401,31 @@ TGeoVolume* RichGeoCreator::CreateStuds(double ypos, double lenHalf, double angl
   double lenHalf1         = lenHalf + Tan(angle * pi / 180) * StudsSizeHalf / 2;
   double lenHalf2         = lenHalf - Tan(angle * pi / 180) * StudsSizeHalf / 2;
   double alpha1           = angle / 2;
+  double gaslencor        = (StudsSizeHalf - StudsSizeHalfGas) * Tan(angle * pi / 180) / 2;
 
-  TGeoTrap* StudsGas      = new TGeoTrap("StudsGas_Trap", StudsSizeHalfGas, 0, 0, StudsSizeHalfGas, lenHalf1, lenHalf2,
-                                    alpha1, StudsSizeHalfGas, lenHalf1, lenHalf2, alpha1);
+  TGeoTrap* StudsGas =
+    new TGeoTrap("StudsGas_Trap", StudsSizeHalfGas, 0, 0, StudsSizeHalfGas, lenHalf1 - gaslencor, lenHalf2 + gaslencor,
+                 alpha1, StudsSizeHalfGas, lenHalf1 - gaslencor, lenHalf2 + gaslencor, alpha1);
   TGeoTrap* Studs         = new TGeoTrap("Studs_Trap", StudsSizeHalf, 0, 0, StudsSizeHalf, lenHalf1, lenHalf2, alpha1,
                                  StudsSizeHalf, lenHalf1, lenHalf2, alpha1);
   TGeoVolume* volStudsGas = new TGeoVolume("StudsGas", StudsGas, medGas);
   TGeoVolume* volStuds    = new TGeoVolume("Studs", Studs, medAl);
 
   volStuds->AddNode(volStudsGas, 1);
-  TGeoVolume* returnVol = new TGeoVolumeAssembly("Stud");
-  returnVol->AddNode(volStuds, 1, MakeCombiTrans(0, ypos, lenHalf, 0, 90, 0));
+  TGeoVolume* returnVol = new TGeoVolumeAssembly(("Stud" + std::to_string(lenHalf * 2)).c_str());
+  returnVol->AddNode(
+    volStuds, 1, MakeCombiTrans(0, ypos, lenHalf + 5 / 2, 0, 90, 0));  //  the 5 is the half thickness of the pillars
+
+  double endPlatelenHalf       = 7;
+  double endPlateWidthHalf     = endPlatelenHalf;
+  double endPlateThicknessHalf = 0.79 / 2;
+  TGeoBBox* endPlate      = new TGeoBBox("StudEndPlate", endPlatelenHalf, endPlateWidthHalf, endPlateThicknessHalf);
+  TGeoVolume* volendPlate = new TGeoVolume("StudEndPlate", endPlate, medAl);
+  returnVol->AddNode(volendPlate, 1, MakeCombiTrans(0, ypos, 2 * lenHalf + 5.0 / 2.0, -angle, 0, 0));
+
+  TGeoVolumeAssembly* mirrorFixing = CreateMirrorFixing(mirrorfixing);
+  returnVol->AddNode(mirrorFixing, 1, MakeCombiTrans(0, ypos, 2 * lenHalf + 5.0 / 2.0, -angle, 0, 0));
+
   return returnVol;
 }
 
@@ -326,10 +439,12 @@ TGeoVolume* RichGeoCreator::CreatePillarConnection()
   double hightHalf = 1.25;
   double thickness = 0.2;
   double lendiff   = widthHalf * Tan(8.5 * pi / 180);
+  double gaslencor = (thickness) * (lendiff) / (widthHalf);
 
   TGeoTrap* PillarConnectionGas =
-    new TGeoTrap("PillarConnectionGas_Trap", hightHalf - thickness, 0, 0, widthHalf - thickness, lenHalf + lendiff,
-                 lenHalf - lendiff, 0, widthHalf - thickness, lenHalf + lendiff, lenHalf - lendiff, 0);
+    new TGeoTrap("PillarConnectionGas_Trap", hightHalf - thickness, 0, 0, widthHalf - thickness,
+                 lenHalf + lendiff - gaslencor, lenHalf - lendiff + gaslencor, 0, widthHalf - thickness,
+                 lenHalf + lendiff - gaslencor, lenHalf - lendiff + gaslencor, 0);
   TGeoTrap* PillarConnection = new TGeoTrap("PillarConnection_Trap", hightHalf, 0, 0, widthHalf, lenHalf + lendiff,
                                             lenHalf - lendiff, 0, widthHalf, lenHalf + lendiff, lenHalf - lendiff, 0);
   TGeoVolume* volPillarConnectionGas = new TGeoVolume("PillarConnectionGas", PillarConnectionGas, medGas);
@@ -354,168 +469,228 @@ TGeoVolumeAssembly* RichGeoCreator::CreateMirrorSupportPillars()
   //if (fSetVolumeColors) vol->SetLineColor(kAzure + 5);
   vol->AddNode(volGas, 1);
 
-  TGeoVolumeAssembly* StudsHalf = new TGeoVolumeAssembly("Studs_Half");
-  StudsHalf->AddNode(CreateStuds(16.4, 30.03 / 2., 24.2), 1);
-  StudsHalf->AddNode(CreateStuds(57.8, 14.86 / 2., 15.9), 2);
-  StudsHalf->AddNode(CreateStuds(101.05, 5.74 / 2., 7.7), 3);
-  StudsHalf->AddNode(CreateStuds(145.4, 2.9 / 2., -0.5), 4);
-
-  vol->AddNode(StudsHalf, 1, MakeCombiTrans(0, 0., -5, 0, 180, 0));
-  vol->AddNode(StudsHalf, 2, MakeCombiTrans(0, 0., -5, 0, 180, 180));
+  TGeoVolume* Stud1b = CreateStuds(16.4, 30.03 / 2., 24.2, "both");
+  TGeoVolume* Stud2b = CreateStuds(57.8, 14.86 / 2., 15.9, "both");
+  TGeoVolume* Stud3b = CreateStuds(101.05, 5.74 / 2., 7.7, "both");
+  TGeoVolume* Stud4b = CreateStuds(145.4, 2.9 / 2., -0.5, "both");
+  TGeoVolume* Stud1l = CreateStuds(16.4, 30.03 / 2., 24.2, "left");
+  TGeoVolume* Stud2l = CreateStuds(57.8, 14.86 / 2., 15.9, "left");
+  TGeoVolume* Stud3l = CreateStuds(101.05, 5.74 / 2., 7.7, "left");
+  TGeoVolume* Stud4l = CreateStuds(145.4, 2.9 / 2., -0.5, "left");
+  TGeoVolume* Stud1r = CreateStuds(16.4, 30.03 / 2., 24.2, "right");
+  TGeoVolume* Stud2r = CreateStuds(57.8, 14.86 / 2., 15.9, "right");
+  TGeoVolume* Stud3r = CreateStuds(101.05, 5.74 / 2., 7.7, "right");
+  TGeoVolume* Stud4r = CreateStuds(145.4, 2.9 / 2., -0.5, "right");
+
+  TGeoVolumeAssembly* Studs = new TGeoVolumeAssembly("Studs");
+  Studs->AddNode(Stud1b, 1, MakeCombiTrans(0, 0, -5, 0, 180, 0));
+  Studs->AddNode(Stud2b, 2, MakeCombiTrans(0, 0, -5, 0, 180, 0));
+  Studs->AddNode(Stud3b, 3, MakeCombiTrans(0, 0, -5, 0, 180, 0));
+  Studs->AddNode(Stud4b, 4, MakeCombiTrans(0, 0, -5, 0, 180, 0));
+  Studs->AddNode(Stud1b, 5, MakeCombiTrans(0, 0, -5, 0, 180, 180));
+  Studs->AddNode(Stud2b, 6, MakeCombiTrans(0, 0, -5, 0, 180, 180));
+  Studs->AddNode(Stud3b, 7, MakeCombiTrans(0, 0, -5, 0, 180, 180));
+  Studs->AddNode(Stud4b, 8, MakeCombiTrans(0, 0, -5, 0, 180, 180));
+
+  TGeoVolumeAssembly* Studs1 = new TGeoVolumeAssembly("Studs1");
+  Studs1->AddNode(Stud1r, 1, MakeCombiTrans(0, 0, -5, 0, 180, 0));
+  Studs1->AddNode(Stud2r, 2, MakeCombiTrans(0, 0, -5, 0, 180, 0));
+  Studs1->AddNode(Stud3r, 3, MakeCombiTrans(0, 0, -5, 0, 180, 0));
+  Studs1->AddNode(Stud4r, 4, MakeCombiTrans(0, 0, -5, 0, 180, 0));
+  Studs1->AddNode(Stud1l, 5, MakeCombiTrans(0, 0, -5, 0, 180, 180));
+  Studs1->AddNode(Stud2l, 6, MakeCombiTrans(0, 0, -5, 0, 180, 180));
+  Studs1->AddNode(Stud3l, 7, MakeCombiTrans(0, 0, -5, 0, 180, 180));
+  Studs1->AddNode(Stud4l, 8, MakeCombiTrans(0, 0, -5, 0, 180, 180));
+
+  TGeoVolumeAssembly* Studs6 = new TGeoVolumeAssembly("Studs6");
+  Studs6->AddNode(Stud1l, 1, MakeCombiTrans(0, 0, -5, 0, 180, 0));
+  Studs6->AddNode(Stud2l, 2, MakeCombiTrans(0, 0, -5, 0, 180, 0));
+  Studs6->AddNode(Stud3l, 3, MakeCombiTrans(0, 0, -5, 0, 180, 0));
+  Studs6->AddNode(Stud4l, 4, MakeCombiTrans(0, 0, -5, 0, 180, 0));
+  Studs6->AddNode(Stud1r, 5, MakeCombiTrans(0, 0, -5, 0, 180, 180));
+  Studs6->AddNode(Stud2r, 6, MakeCombiTrans(0, 0, -5, 0, 180, 180));
+  Studs6->AddNode(Stud3r, 7, MakeCombiTrans(0, 0, -5, 0, 180, 180));
+  Studs6->AddNode(Stud4r, 8, MakeCombiTrans(0, 0, -5, 0, 180, 180));
+
+  TGeoVolumeAssembly* Studs3 = new TGeoVolumeAssembly("Studs3");
+  Studs3->AddNode(Stud1l, 1, MakeCombiTrans(0, 0, -5, 0, 180, 0));
+  Studs3->AddNode(Stud2b, 2, MakeCombiTrans(0, 0, -5, 0, 180, 0));
+  Studs3->AddNode(Stud3b, 3, MakeCombiTrans(0, 0, -5, 0, 180, 0));
+  Studs3->AddNode(Stud4b, 4, MakeCombiTrans(0, 0, -5, 0, 180, 0));
+  Studs3->AddNode(Stud1r, 5, MakeCombiTrans(0, 0, -5, 0, 180, 180));
+  Studs3->AddNode(Stud2b, 6, MakeCombiTrans(0, 0, -5, 0, 180, 180));
+  Studs3->AddNode(Stud3b, 7, MakeCombiTrans(0, 0, -5, 0, 180, 180));
+  Studs3->AddNode(Stud4b, 8, MakeCombiTrans(0, 0, -5, 0, 180, 180));
+
+  TGeoVolumeAssembly* Studs4 = new TGeoVolumeAssembly("Studs4");
+  Studs4->AddNode(Stud1r, 1, MakeCombiTrans(0, 0, -5, 0, 180, 0));
+  Studs4->AddNode(Stud2b, 2, MakeCombiTrans(0, 0, -5, 0, 180, 0));
+  Studs4->AddNode(Stud3b, 3, MakeCombiTrans(0, 0, -5, 0, 180, 0));
+  Studs4->AddNode(Stud4b, 4, MakeCombiTrans(0, 0, -5, 0, 180, 0));
+  Studs4->AddNode(Stud1l, 5, MakeCombiTrans(0, 0, -5, 0, 180, 180));
+  Studs4->AddNode(Stud2b, 6, MakeCombiTrans(0, 0, -5, 0, 180, 180));
+  Studs4->AddNode(Stud3b, 7, MakeCombiTrans(0, 0, -5, 0, 180, 180));
+  Studs4->AddNode(Stud4b, 8, MakeCombiTrans(0, 0, -5, 0, 180, 180));
 
   TGeoVolume* PillarConnection = CreatePillarConnection();
 
   double dZ                   = 41.;
   TGeoVolumeAssembly* pillars = new TGeoVolumeAssembly("mirror_support_pillars");
   pillars->AddNode(vol, 1, MakeCombiTrans(210.7759 - 2.035, 0., -29.5298 + dZ - 12.4346, 0., 42., 0.));
+  pillars->AddNode(Studs1, 1, MakeCombiTrans(210.7759 - 2.035, 0., -29.5298 + dZ - 12.4346, 0., 42., 0.));
   pillars->AddNode(PillarConnection, 1, MakeCombiTrans(170.7323, 0., -15.9069 + dZ, 0., 33.6, 0.));
   pillars->AddNode(vol, 2, MakeCombiTrans(134.1222 - 1.3985, 0., 21.3989 + dZ - 11.2483, 0., 25.2, 0.));
+  pillars->AddNode(Studs, 1, MakeCombiTrans(134.1222 - 1.3985, 0., 21.3989 + dZ - 11.2483, 0., 25.2, 0.));
   pillars->AddNode(PillarConnection, 2, MakeCombiTrans(89.097, 0., 23.74 + dZ, 0., 16.8, 0.));
   pillars->AddNode(vol, 3, MakeCombiTrans(46.015 - 0.545, 0., 48. + dZ - 10.6668, 0., 8.4, 0.));
+  pillars->AddNode(Studs3, 1, MakeCombiTrans(46.015 - 0.545, 0., 48. + dZ - 10.6668, 0., 8.4, 0.));
   pillars->AddNode(PillarConnection, 3, MakeCombiTrans(0., 38.75, 37.34 + dZ, 0., 0., 0.));
   pillars->AddNode(PillarConnection, 4, MakeCombiTrans(0., -38.75, 37.34 + dZ, 0., 0., 0.));
   pillars->AddNode(vol, 4, MakeCombiTrans(-46.015 + 0.545, 0., 48. + dZ - 10.6668, 0., -8.4, 0.));
+  pillars->AddNode(Studs4, 1, MakeCombiTrans(-46.015 + 0.545, 0., 48. + dZ - 10.6668, 0., -8.4, 0.));
   pillars->AddNode(PillarConnection, 5, MakeCombiTrans(-89.097, 0., 23.74 + dZ, 0., -16.8, 0.));
   pillars->AddNode(vol, 5, MakeCombiTrans(-134.1222 + 1.3985, 0., 21.3989 + dZ - 11.2483, 0., -25.2, 0.));
+  pillars->AddNode(Studs, 2, MakeCombiTrans(-134.1222 + 1.3985, 0., 21.3989 + dZ - 11.2483, 0., -25.2, 0.));
   pillars->AddNode(PillarConnection, 6, MakeCombiTrans(-170.7323, 0., -15.9069 + dZ, 0., -33.6, 0.));
   pillars->AddNode(vol, 6, MakeCombiTrans(-210.7759 + 2.035, 0., -29.5298 + dZ - 12.4346, 0., -42., 0.));
+  pillars->AddNode(Studs6, 1, MakeCombiTrans(-210.7759 + 2.035, 0., -29.5298 + dZ - 12.4346, 0., -42., 0.));
 
   return pillars;
 }
 
-TGeoVolumeAssembly* RichGeoCreator::CreateBeltAssembly()
-{
-  TGeoMedium* medGas = fMaterials.GetMedium("RICHgas_CO2_dis");
-  TGeoMedium* medAl  = fMaterials.GetMedium("aluminium");
-
-  TGeoBBox* pbGas1    = new TGeoBBox("belt1_gas_PB", 1.25, 10.367, 1.167);
-  TGeoBBox* pb1       = new TGeoBBox("belt1_PB", 1.5, 10.6, 1.4);
-  TGeoVolume* volGas1 = new TGeoVolume("belt1_gas", pbGas1, medGas);
-  TGeoVolume* vol1    = new TGeoVolume("belt1", pb1, medAl);
-  //if (fSetVolumeColors) volGas1->SetLineColor(kViolet + 8);
-  //if (fSetVolumeColors) vol1->SetLineColor(kViolet + 8);
-  vol1->AddNode(volGas1, 1, MakeTrans(0., 0., 0.233));
-
-  TGeoBBox* pbGas2    = new TGeoBBox("belt2_gas_PB", 4.7835, 1.25, 1.167);
-  TGeoBBox* pb2       = new TGeoBBox("belt2_PB", 4.9, 1.5, 1.4);
-  TGeoVolume* volGas2 = new TGeoVolume("belt2_gas", pbGas2, medGas);
-  TGeoVolume* vol2    = new TGeoVolume("belt2", pb2, medAl);
-  //if (fSetVolumeColors) volGas2->SetLineColor(kViolet + 8);
-  //if (fSetVolumeColors) vol2->SetLineColor(kViolet + 8);
-  vol2->AddNode(volGas2, 1, MakeTrans(0.1165, 0., 0.233));
-
-  TGeoBBox* pbGas3    = new TGeoBBox("belt3_gas_PB", 11.6135, 1.25, 1.167);
-  TGeoBBox* pb3       = new TGeoBBox("belt3_PB", 11.73, 1.5, 1.4);
-  TGeoVolume* volGas3 = new TGeoVolume("belt3_gas", pbGas3, medGas);
-  TGeoVolume* vol3    = new TGeoVolume("belt3", pb3, medAl);
-  //if (fSetVolumeColors) volGas3->SetLineColor(kViolet + 8);
-  //if (fSetVolumeColors) vol3->SetLineColor(kViolet + 8);
-  vol3->AddNode(volGas3, 1, MakeTrans(0.1165, 0., 0.233));
-
-  TGeoTrap* pbGas4    = new TGeoTrap("belt4_gas_PB", 0.7, 16.22, 90., 10.97, 1.3, 1.3, 0., 9.5, 1.3, 1.3, 0.);
-  TGeoTrap* pb4       = new TGeoTrap("belt4_PB", 0.9, 16.22, 90., 11.378, 1.4, 1.4, 0., 9.5, 1.4, 1.4, 0.);
-  TGeoVolume* volGas4 = new TGeoVolume("belt4_gas", pbGas4, medGas);
-  TGeoVolume* vol4    = new TGeoVolume("belt4", pb4, medAl);
-  //if (fSetVolumeColors) volGas4->SetLineColor(kViolet + 8);
-  //if (fSetVolumeColors) vol4->SetLineColor(kViolet + 8);
-  vol4->AddNode(volGas4, 1, MakeTrans(0.1, 0., 0.));
-
-  TGeoVolumeAssembly* belt = new TGeoVolumeAssembly("belt");
-  belt->AddNode(vol1, 1);
-  belt->AddNode(vol2, 1, MakeTrans(-6.4, 9.1, 0.));
-  belt->AddNode(vol3, 1, MakeTrans(-13.23, -9.1, 0.));
-  belt->AddNode(vol4, 1, MakeCombiTrans(-17.567, 0.75, 0., -127., -90., -90.));
-
-  return belt;
-}
-
-TGeoVolumeAssembly* RichGeoCreator::CreateMirrorSupportBelts()
-{
-  double mRadius2      = fMirrorRadius + fMirrorThickness;
-  double mRadius3      = mRadius2 + fMirrorSupportAdd;
-  double phi1          = -fMirrorPhiSize / 2.;
-  double phi2          = fMirrorPhiSize / 2.;
-  double dTheta        = fMirrorThetaSize;
-  double mRot90        = 90. + fMirrorRot;
-  double richWidthHalf = fRichWidth / 2.;
-  TGeoMedium* medGas   = fMaterials.GetMedium("RICHgas_CO2_dis");
-
-  TGeoVolumeAssembly* beltAssembly = CreateBeltAssembly();
-
-  // Type 0
-  double theta0       = mRot90 + fAlpha / 2. + fMirrorThetaGap * 3. / 4.;
-  TGeoSphere* sphere0 = new TGeoSphere("belt_type0_PB_op0", mRadius2, mRadius3, theta0, theta0 + dTheta, phi1, phi2);
-  TGeoBBox* box0      = new TGeoBBox("belt_type0_PB_op1", 500., richWidthHalf, 10.);
-  TGeoCompositeShape* pbType0 =
-    MakeSubtraction("belt_type0_PB", sphere0, box0, nullptr, MakeTrans(0., 0., -fMirrorOriginY - 10.));
-  TGeoVolume* volType0 = new TGeoVolume("belt_type0", pbType0, medGas);
-  volType0->AddNode(beltAssembly, 1, MakeCombiTrans(275.5, -13.23, -124.7, 65., 0., -90.));
-  //if (fSetVolumeColors) volType0->SetLineColor(kGreen);
-
-  // Type 1
-  double theta1        = mRot90 + fMirrorThetaGap / 2.;
-  TGeoSphere* pbType1  = new TGeoSphere("belt_type1_PB", mRadius2, mRadius3, theta1, theta1 + dTheta, phi1, phi2);
-  TGeoVolume* volType1 = new TGeoVolume("belt_type1", pbType1, medGas);
-  volType1->AddNode(beltAssembly, 1, MakeCombiTrans(290.4, -13.23, -84.0, 73., 0., -90.));
-  //if (fSetVolumeColors) volType1->SetLineColor(kGreen - 1);
-
-  // Type 2
-  double theta2        = mRot90 - fAlpha / 2. + fMirrorThetaGap / 4.;
-  TGeoSphere* pbType2  = new TGeoSphere("belt_type2_PB", mRadius2, mRadius3, theta2, theta2 + dTheta, phi1, phi2);
-  TGeoVolume* volType2 = new TGeoVolume("belt_type2", pbType2, medGas);
-  volType2->AddNode(beltAssembly, 1, MakeCombiTrans(299.4, -13.23, -41.5, 82., 0., -90.));
-  //if (fSetVolumeColors) volType2->SetLineColor(kGreen - 2);
-
-  // Type 3
-  double theta3        = mRot90 - fAlpha;
-  TGeoSphere* pbType3  = new TGeoSphere("belt_type3_PB", mRadius2, mRadius3, theta3, theta3 + dTheta, phi1, phi2);
-  TGeoVolume* volType3 = new TGeoVolume("belt_type3", pbType3, medGas);
-  volType3->AddNode(beltAssembly, 1, MakeCombiTrans(302.5, -13.23, 1.97, 91., 0., -90.));
-  //if (fSetVolumeColors) volType3->SetLineColor(kGreen - 3);
-
-  //// Type 4
-  //double theta4       = mRot90 + fAlpha / 2. + fMirrorThetaGap * 3. / 4.;
-  //TGeoSphere* sphere4 = new TGeoSphere("belt_type4_PB_op0", mRadius2, mRadius3, theta4, theta4 + dTheta, phi1, phi2);
-  //TGeoTubeSeg* tube4  = new TGeoTubeSeg("belt_type4_PB_op1", 0., fPipeOuterRadiusExit, 400., 0., 360.);
-  //TGeoCompositeShape* sub4_1 = MakeSubtraction("belt_type4_PB_op01", sphere4, tube4, nullptr, MakeCombiTrans(0., 0., -fMirrorOriginY, 90., 0., 90. + fMirrorPhiStep * 0.5));
-  //TGeoBBox* box4 = new TGeoBBox("belt_type4_PB_op2", 500., richWidthHalf, 10.);
-  //TGeoCompositeShape* pbType4 = MakeSubtraction("belt_type4_PB", sub4_1, box4, nullptr, MakeTrans(0., 0., -fMirrorOriginY - 10.));
-  //TGeoVolume* volType4 = new TGeoVolume("belt_type4", pbType4, medGas);
-  //volType4->AddNode(beltAssembly, 1, MakeCombiTrans(281.0, 0., -113.0, 0., -66., 0.));
-  ////if (fSetVolumeColors) volType4->SetLineColor(kGreen + 1);
-  //
-  ////  Type 5
-  //double theta5       = mRot90 + fAlpha / 2. + fMirrorThetaGap * 3. / 4.;
-  //TGeoSphere* sphere5 = new TGeoSphere("belt_type5_PB_op0", mRadius2, mRadius3, theta5, theta5 + dTheta, phi1, phi2);
-  //TGeoTubeSeg* tube5  = new TGeoTubeSeg("belt_type5_PB_op1", 0., fPipeOuterRadiusExit, 400., 0., 360.);
-  //TGeoCompositeShape* sub5_1 = MakeSubtraction("belt_type5_PB_op01", sphere5, tube5, nullptr, MakeCombiTrans(0., 0., -fMirrorOriginY, 90., 0., 90. - fMirrorPhiStep * 0.5));
-  //TGeoBBox* box5 = new TGeoBBox("belt_type5_PB_op2", 500., richWidthHalf, 10.);
-  //TGeoCompositeShape* pbType5 = MakeSubtraction("belt_type5_PB", sub5_1, box5, nullptr, MakeTrans(0., 0., -fMirrorOriginY - 10.));
-  //TGeoVolume* volType5 = new TGeoVolume("belt_type5", pbType5, medGas);
-  //volType5->AddNode(beltAssembly, 1, MakeCombiTrans(281., 0., -113., 0., -114., 180.));
-  ////if (fSetVolumeColors) volType5->SetLineColor(kGreen + 2);
-
-  TGeoVolumeAssembly* contHalf = new TGeoVolumeAssembly("mirror_support_belts_half");
-  for (int t = 0; t < 4; t++) {
-    TGeoVolume* mVol = nullptr;
-    if (t == 1) mVol = volType1;
-    if (t == 2) mVol = volType2;
-    if (t == 3) mVol = volType3;
-    for (int i = 0; i < 10; i++) {
-      double rotZ = (i - 4.5) * fMirrorPhiStep;
-      int copyNum = i + 1;
-      if (t == 0) {
-        mVol = volType0;
-        if (i == 4 || i == 5) {  // special case for the 2 middle belts
-          continue;              //mVol    = (i == 4) ? volType5 : volType4;
-          copyNum = 1;
-        }
-      }
-      contHalf->AddNode(mVol, copyNum, MakeRot(0., 0., rotZ));
-    }
-  }
-  return contHalf;
-}
+//TGeoVolumeAssembly* RichGeoCreator::CreateBeltAssembly()
+//{
+//  TGeoMedium* medGas = fMaterials.GetMedium("RICHgas_CO2_dis");
+//  TGeoMedium* medAl  = fMaterials.GetMedium("aluminium");
+//
+//  TGeoBBox* pbGas1    = new TGeoBBox("belt1_gas_PB", 1.25, 10.367, 1.167);
+//  TGeoBBox* pb1       = new TGeoBBox("belt1_PB", 1.5, 10.6, 1.4);
+//  TGeoVolume* volGas1 = new TGeoVolume("belt1_gas", pbGas1, medGas);
+//  TGeoVolume* vol1    = new TGeoVolume("belt1", pb1, medAl);
+//  //if (fSetVolumeColors) volGas1->SetLineColor(kViolet + 8);
+//  //if (fSetVolumeColors) vol1->SetLineColor(kViolet + 8);
+//  vol1->AddNode(volGas1, 1, MakeTrans(0., 0., 0.233));
+//
+//  TGeoBBox* pbGas2    = new TGeoBBox("belt2_gas_PB", 4.7835, 1.25, 1.167);
+//  TGeoBBox* pb2       = new TGeoBBox("belt2_PB", 4.9, 1.5, 1.4);
+//  TGeoVolume* volGas2 = new TGeoVolume("belt2_gas", pbGas2, medGas);
+//  TGeoVolume* vol2    = new TGeoVolume("belt2", pb2, medAl);
+//  //if (fSetVolumeColors) volGas2->SetLineColor(kViolet + 8);
+//  //if (fSetVolumeColors) vol2->SetLineColor(kViolet + 8);
+//  vol2->AddNode(volGas2, 1, MakeTrans(0.1165, 0., 0.233));
+//
+//  TGeoBBox* pbGas3    = new TGeoBBox("belt3_gas_PB", 11.6135, 1.25, 1.167);
+//  TGeoBBox* pb3       = new TGeoBBox("belt3_PB", 11.73, 1.5, 1.4);
+//  TGeoVolume* volGas3 = new TGeoVolume("belt3_gas", pbGas3, medGas);
+//  TGeoVolume* vol3    = new TGeoVolume("belt3", pb3, medAl);
+//  //if (fSetVolumeColors) volGas3->SetLineColor(kViolet + 8);
+//  //if (fSetVolumeColors) vol3->SetLineColor(kViolet + 8);
+//  vol3->AddNode(volGas3, 1, MakeTrans(0.1165, 0., 0.233));
+//
+//  TGeoTrap* pbGas4    = new TGeoTrap("belt4_gas_PB", 0.7, 16.22, 90., 10.97, 1.3, 1.3, 0., 9.5, 1.3, 1.3, 0.);
+//  TGeoTrap* pb4       = new TGeoTrap("belt4_PB", 0.9, 16.22, 90., 11.378, 1.4, 1.4, 0., 9.5, 1.4, 1.4, 0.);
+//  TGeoVolume* volGas4 = new TGeoVolume("belt4_gas", pbGas4, medGas);
+//  TGeoVolume* vol4    = new TGeoVolume("belt4", pb4, medAl);
+//  //if (fSetVolumeColors) volGas4->SetLineColor(kViolet + 8);
+//  //if (fSetVolumeColors) vol4->SetLineColor(kViolet + 8);
+//  vol4->AddNode(volGas4, 1, MakeTrans(0.1, 0., 0.));
+//
+//  TGeoVolumeAssembly* belt = new TGeoVolumeAssembly("belt");
+//  belt->AddNode(vol1, 1);
+//  belt->AddNode(vol2, 1, MakeTrans(-6.4, 9.1, 0.));
+//  belt->AddNode(vol3, 1, MakeTrans(-13.23, -9.1, 0.));
+//  belt->AddNode(vol4, 1, MakeCombiTrans(-17.567, 0.75, 0., -127., -90., -90.));
+//
+//  return belt;
+//}
+
+//TGeoVolumeAssembly* RichGeoCreator::CreateMirrorSupportBelts()
+//{
+//  double mRadius2      = fMirrorRadius + fMirrorThickness;
+//  double mRadius3      = mRadius2 + fMirrorSupportAdd;
+//  double phi1          = -fMirrorPhiSize / 2.;
+//  double phi2          = fMirrorPhiSize / 2.;
+//  double dTheta        = fMirrorThetaSize;
+//  double mRot90        = 90. + fMirrorRot;
+//  double richWidthHalf = fRichWidth / 2.;
+//  TGeoMedium* medGas   = fMaterials.GetMedium("RICHgas_CO2_dis");
+//
+//  TGeoVolumeAssembly* beltAssembly = CreateBeltAssembly();
+//
+//  // Type 0
+//  double theta0       = mRot90 + fAlpha / 2. + fMirrorThetaGap * 3. / 4.;
+//  TGeoSphere* sphere0 = new TGeoSphere("belt_type0_PB_op0", mRadius2, mRadius3, theta0, theta0 + dTheta, phi1, phi2);
+//  TGeoBBox* box0      = new TGeoBBox("belt_type0_PB_op1", 500., richWidthHalf, 10.);
+//  TGeoCompositeShape* pbType0 =
+//    MakeSubtraction("belt_type0_PB", sphere0, box0, nullptr, MakeTrans(0., 0., -fMirrorOriginY - 10.));
+//  TGeoVolume* volType0 = new TGeoVolume("belt_type0", pbType0, medGas);
+//  volType0->AddNode(beltAssembly, 1, MakeCombiTrans(275.5, -13.23, -124.7, 65., 0., -90.));
+//  //if (fSetVolumeColors) volType0->SetLineColor(kGreen);
+//
+//  // Type 1
+//  double theta1        = mRot90 + fMirrorThetaGap / 2.;
+//  TGeoSphere* pbType1  = new TGeoSphere("belt_type1_PB", mRadius2, mRadius3, theta1, theta1 + dTheta, phi1, phi2);
+//  TGeoVolume* volType1 = new TGeoVolume("belt_type1", pbType1, medGas);
+//  volType1->AddNode(beltAssembly, 1, MakeCombiTrans(290.4, -13.23, -84.0, 73., 0., -90.));
+//  //if (fSetVolumeColors) volType1->SetLineColor(kGreen - 1);
+//
+//  // Type 2
+//  double theta2        = mRot90 - fAlpha / 2. + fMirrorThetaGap / 4.;
+//  TGeoSphere* pbType2  = new TGeoSphere("belt_type2_PB", mRadius2, mRadius3, theta2, theta2 + dTheta, phi1, phi2);
+//  TGeoVolume* volType2 = new TGeoVolume("belt_type2", pbType2, medGas);
+//  volType2->AddNode(beltAssembly, 1, MakeCombiTrans(299.4, -13.23, -41.5, 82., 0., -90.));
+//  //if (fSetVolumeColors) volType2->SetLineColor(kGreen - 2);
+//
+//  // Type 3
+//  double theta3        = mRot90 - fAlpha;
+//  TGeoSphere* pbType3  = new TGeoSphere("belt_type3_PB", mRadius2, mRadius3, theta3, theta3 + dTheta, phi1, phi2);
+//  TGeoVolume* volType3 = new TGeoVolume("belt_type3", pbType3, medGas);
+//  volType3->AddNode(beltAssembly, 1, MakeCombiTrans(302.5, -13.23, 1.97, 91., 0., -90.));
+//  //if (fSetVolumeColors) volType3->SetLineColor(kGreen - 3);
+//
+//  //// Type 4
+//  //double theta4       = mRot90 + fAlpha / 2. + fMirrorThetaGap * 3. / 4.;
+//  //TGeoSphere* sphere4 = new TGeoSphere("belt_type4_PB_op0", mRadius2, mRadius3, theta4, theta4 + dTheta, phi1, phi2);
+//  //TGeoTubeSeg* tube4  = new TGeoTubeSeg("belt_type4_PB_op1", 0., fPipeOuterRadiusExit, 400., 0., 360.);
+//  //TGeoCompositeShape* sub4_1 = MakeSubtraction("belt_type4_PB_op01", sphere4, tube4, nullptr, MakeCombiTrans(0., 0., -fMirrorOriginY, 90., 0., 90. + fMirrorPhiStep * 0.5));
+//  //TGeoBBox* box4 = new TGeoBBox("belt_type4_PB_op2", 500., richWidthHalf, 10.);
+//  //TGeoCompositeShape* pbType4 = MakeSubtraction("belt_type4_PB", sub4_1, box4, nullptr, MakeTrans(0., 0., -fMirrorOriginY - 10.));
+//  //TGeoVolume* volType4 = new TGeoVolume("belt_type4", pbType4, medGas);
+//  //volType4->AddNode(beltAssembly, 1, MakeCombiTrans(281.0, 0., -113.0, 0., -66., 0.));
+//  ////if (fSetVolumeColors) volType4->SetLineColor(kGreen + 1);
+//  //
+//  ////  Type 5
+//  //double theta5       = mRot90 + fAlpha / 2. + fMirrorThetaGap * 3. / 4.;
+//  //TGeoSphere* sphere5 = new TGeoSphere("belt_type5_PB_op0", mRadius2, mRadius3, theta5, theta5 + dTheta, phi1, phi2);
+//  //TGeoTubeSeg* tube5  = new TGeoTubeSeg("belt_type5_PB_op1", 0., fPipeOuterRadiusExit, 400., 0., 360.);
+//  //TGeoCompositeShape* sub5_1 = MakeSubtraction("belt_type5_PB_op01", sphere5, tube5, nullptr, MakeCombiTrans(0., 0., -fMirrorOriginY, 90., 0., 90. - fMirrorPhiStep * 0.5));
+//  //TGeoBBox* box5 = new TGeoBBox("belt_type5_PB_op2", 500., richWidthHalf, 10.);
+//  //TGeoCompositeShape* pbType5 = MakeSubtraction("belt_type5_PB", sub5_1, box5, nullptr, MakeTrans(0., 0., -fMirrorOriginY - 10.));
+//  //TGeoVolume* volType5 = new TGeoVolume("belt_type5", pbType5, medGas);
+//  //volType5->AddNode(beltAssembly, 1, MakeCombiTrans(281., 0., -113., 0., -114., 180.));
+//  ////if (fSetVolumeColors) volType5->SetLineColor(kGreen + 2);
+//
+//  TGeoVolumeAssembly* contHalf = new TGeoVolumeAssembly("mirror_support_belts_half");
+//  for (int t = 0; t < 4; t++) {
+//    TGeoVolume* mVol = nullptr;
+//    if (t == 1) mVol = volType1;
+//    if (t == 2) mVol = volType2;
+//    if (t == 3) mVol = volType3;
+//    for (int i = 0; i < 10; i++) {
+//      double rotZ = (i - 4.5) * fMirrorPhiStep;
+//      int copyNum = i + 1;
+//      if (t == 0) {
+//        mVol = volType0;
+//        if (i == 4 || i == 5) {  // special case for the 2 middle belts
+//          continue;              //mVol    = (i == 4) ? volType5 : volType4;
+//          copyNum = 1;
+//        }
+//      }
+//      contHalf->AddNode(mVol, copyNum, MakeRot(0., 0., rotZ));
+//    }
+//  }
+//  return contHalf;
+//}
 
 TGeoVolumeAssembly* RichGeoCreator::CreateMainFrame()
 {
@@ -533,20 +708,21 @@ TGeoVolumeAssembly* RichGeoCreator::CreateMainFrame()
   double rotX     = 90 - fCameraFullRotX;
   double lenHalf2 = 23.2919390;
   double lenHalf3 = 20.;
-  double lenHalf5 = richHeightHalf - Tan(rotX * pi / 180.0) * lenHalf3 * 2.0;
-  double lenHalf6 = richLengthHalf - lenHalf2 - lenHalf3;
-  double lenHalf8 = (richWidthHalf - 229.3 / 2) / 2;  // the 229.3 are the width of the shieldingbox
+  double lenHalf5 = richHeightHalf - Tan(rotX * pi / 180.0) * lenHalf3 * 2.0 - fRichCoveringThickness;
+  double lenHalf6 = richLengthHalf - lenHalf2 - lenHalf3 - fRichCoveringThickness - 2 * frameSizeHalf;
+  double lenHalf8 =
+    (richWidthHalf - fRichCoveringThickness - 229.3 / 2) / 2;  // the 229.3 are the width of the shieldingbox
 
   double posY             = richHeightHalf - coverThickness - frameSizeHalf;
-  double posY2            = 90;
+  double posY2            = fRichEntranceHeight / 2 + fRichFlangeThickness + frameSizeHalf;
   double posY3            = posY - Tan(rotX * pi / 180.0) * lenHalf3 * 2.0;
   double posZ1            = -147.779439;
   double posZ2            = posZ1 + lenHalf2 + 2 * lenHalf3;
   double posZ3            = posZ1 + 2 * lenHalf2 + 2 * lenHalf3;
-  double posZ4            = posZ1 + fRichLength;
-  double posX1            = 134.6;
-  double posX2            = (posX1 + richWidthHalf) / 2;
-  double posX3            = richWidthHalf - frameSizeHalf;
+  double posZ4            = posZ1 + fRichLength - fRichCoveringThickness;
+  double posX1            = fRichEntranceWidth / 2 + fRichFlangeThickness + frameSizeHalf;
+  double posX3            = richWidthHalf - frameSizeHalf - fRichCoveringThickness;
+  double posX2            = (posX1 + posX3) / 2;
 
   TGeoBBox* crossingbox =
     new TGeoBBox("crossing", frameSizeHalf, frameSizeHalf,
@@ -555,9 +731,10 @@ TGeoVolumeAssembly* RichGeoCreator::CreateMainFrame()
   TGeoVolumeAssembly* mainFrame = new TGeoVolumeAssembly("mainframe");
 
   // parts along x-axis
-  TGeoBBox* pbGas1 =
-    new TGeoBBox("mainframe1_gas_PB", richWidthHalf - frameSizeHalf * 2, frameSizeHalfGas, frameSizeHalfGas);
-  TGeoBBox* pb1       = new TGeoBBox("mainframe1_PB", richWidthHalf - frameSizeHalf * 2, frameSizeHalf, frameSizeHalf);
+  TGeoBBox* pbGas1    = new TGeoBBox("mainframe1_gas_PB", richWidthHalf - frameSizeHalf * 2 - fRichCoveringThickness,
+                                  frameSizeHalfGas, frameSizeHalfGas);
+  TGeoBBox* pb1       = new TGeoBBox("mainframe1_PB", richWidthHalf - frameSizeHalf * 2 - fRichCoveringThickness,
+                               frameSizeHalf, frameSizeHalf);
   TGeoVolume* volGas1 = new TGeoVolume("mainframe1_gas", pbGas1, medGas);
   TGeoVolume* vol1    = new TGeoVolume("mainframe1", pb1, medAlum);
   //if (fSetVolumeColors) vol1->SetLineColor(kBlue);
@@ -565,9 +742,9 @@ TGeoVolumeAssembly* RichGeoCreator::CreateMainFrame()
   vol1->AddNode(volGas1, 1);
   mainFrame->AddNode(vol1, 1, MakeTrans(0, posY2, posZ1));
   mainFrame->AddNode(vol1, 2, MakeTrans(0, -posY2, posZ1));
-  mainFrame->AddNode(vol1, 3, MakeTrans(0., posY, posZ4));
+  mainFrame->AddNode(vol1, 3, MakeTrans(0., posY, posZ4 - frameSizeHalf));
   mainFrame->AddNode(vol1, 4, MakeTrans(0., posY, posZ3));
-  mainFrame->AddNode(vol1, 5, MakeTrans(0., -posY, posZ4));
+  mainFrame->AddNode(vol1, 5, MakeTrans(0., -posY, posZ4 - frameSizeHalf));
   mainFrame->AddNode(vol1, 6, MakeTrans(0., -posY, posZ3));
 
   // first parts along z-axis (short)
@@ -588,6 +765,7 @@ TGeoVolumeAssembly* RichGeoCreator::CreateMainFrame()
   mainFrame->AddNode(vol2, 8, MakeTrans(-posX3, -posY, posZ2 - frameSizeHalf / 2));
 
   // diagonal parts (y-z)
+  //double gaslencor        = (1 - frameSizeHalfGas / frameSizeHalf) * 3;
   TGeoTrap* pbGas3 =
     new TGeoTrap("mainframe3_gas_PB", frameSizeHalfGas, 0, 0, lenHalf3 - frameSizeHalf - coverThickness, 6.3, 9.3, rotX,
                  lenHalf3 - frameSizeHalf - coverThickness, 6.3, 9.3, rotX);
@@ -646,17 +824,19 @@ TGeoVolumeAssembly* RichGeoCreator::CreateMainFrame()
   //if (fSetVolumeColors) vol4->SetLineColor(kBlue + 3);
   //if (fSetVolumeColors) volGas4->SetLineColor(kBlue + 3);
   vol4->AddNode(volGas4, 1);
-  mainFrame->AddNode(vol4, 1, MakeTrans(-posX3, 0., posZ4));
-  mainFrame->AddNode(vol4, 2, MakeTrans(posX3, 0., posZ4));
+  mainFrame->AddNode(vol4, 1, MakeTrans(-posX3, 0., posZ4 - frameSizeHalf));
+  mainFrame->AddNode(vol4, 2, MakeTrans(posX3, 0., posZ4 - frameSizeHalf));
   mainFrame->AddNode(vol4, 3, MakeTrans(-posX3, 0, posZ3));
   mainFrame->AddNode(vol4, 4, MakeTrans(posX3, 0, posZ3));
 
   // small vertical parts
-  TGeoTrap* pbGas5 = new TGeoTrap("mainframe5_gas_PB", frameSizeHalfGas, 0, 0, frameSizeHalfGas,
-                                  lenHalf5 - 1 / Tan((90 - rotX) * pi / 180) * frameSizeHalf,
-                                  lenHalf5 + 1 / Tan((90 - rotX) * pi / 180) * frameSizeHalf, 0, frameSizeHalfGas,
-                                  lenHalf5 - 1 / Tan((90 - rotX) * pi / 180) * frameSizeHalf,
-                                  lenHalf5 + 1 / Tan((90 - rotX) * pi / 180) * frameSizeHalf, 0);
+  double gaslencor = (frameSizeHalf - frameSizeHalfGas) / Tan((90 - rotX) * pi / 180);
+  TGeoTrap* pbGas5 =
+    new TGeoTrap("mainframe5_gas_PB", frameSizeHalfGas, 0, 0, frameSizeHalfGas,
+                 lenHalf5 - 1 / Tan((90 - rotX) * pi / 180) * frameSizeHalf + gaslencor,
+                 lenHalf5 + 1 / Tan((90 - rotX) * pi / 180) * frameSizeHalf - gaslencor, 0, frameSizeHalfGas,
+                 lenHalf5 - 1 / Tan((90 - rotX) * pi / 180) * frameSizeHalf + gaslencor,
+                 lenHalf5 + 1 / Tan((90 - rotX) * pi / 180) * frameSizeHalf - gaslencor, 0);
   TGeoTrap* pb5    = new TGeoTrap("mainframe5_PB", frameSizeHalf, 0, 0, frameSizeHalf,
                                lenHalf5 - 1 / Tan((90 - rotX) * pi / 180) * frameSizeHalf,
                                lenHalf5 + 1 / Tan((90 - rotX) * pi / 180) * frameSizeHalf, 0, frameSizeHalf,
@@ -684,24 +864,24 @@ TGeoVolumeAssembly* RichGeoCreator::CreateMainFrame()
   //if (fSetVolumeColors) vol6->SetLineColor(kBlue - 2);
   //if (fSetVolumeColors) volGas6->SetLineColor(kBlue - 2);
   vol6->AddNode(volGas6, 1);
-  mainFrame->AddNode(vol6, 1, MakeTrans(-posX2, posY, posZ4 - lenHalf6));
-  mainFrame->AddNode(vol6, 2, MakeTrans(-posX2, -posY, posZ4 - lenHalf6));
-  mainFrame->AddNode(vol6, 3, MakeTrans(posX2, posY, posZ4 - lenHalf6));
-  mainFrame->AddNode(vol6, 4, MakeTrans(posX2, -posY, posZ4 - lenHalf6));
-  mainFrame->AddNode(vol6, 5, MakeTrans(-posX1, posY, posZ4 - lenHalf6));
-  mainFrame->AddNode(vol6, 6, MakeTrans(-posX1, -posY, posZ4 - lenHalf6));
-  mainFrame->AddNode(vol6, 7, MakeTrans(posX1, posY, posZ4 - lenHalf6));
-  mainFrame->AddNode(vol6, 8, MakeTrans(posX1, -posY, posZ4 - lenHalf6));
-  mainFrame->AddNode(vol6, 9, MakeTrans(0., posY, posZ4 - lenHalf6));
-  mainFrame->AddNode(vol6, 10, MakeTrans(0., -posY, posZ4 - lenHalf6));
-  mainFrame->AddNode(vol6, 11, MakeTrans(posX3, posY2, posZ4 - lenHalf6));
-  mainFrame->AddNode(vol6, 12, MakeTrans(posX3, -posY2, posZ4 - lenHalf6));
-  mainFrame->AddNode(vol6, 13, MakeTrans(-posX3, posY2, posZ4 - lenHalf6));
-  mainFrame->AddNode(vol6, 14, MakeTrans(-posX3, -posY2, posZ4 - lenHalf6));
-  mainFrame->AddNode(vol6, 15, MakeTrans(-posX3, posY, posZ4 - lenHalf6));
-  mainFrame->AddNode(vol6, 16, MakeTrans(-posX3, -posY, posZ4 - lenHalf6));
-  mainFrame->AddNode(vol6, 17, MakeTrans(posX3, posY, posZ4 - lenHalf6));
-  mainFrame->AddNode(vol6, 18, MakeTrans(posX3, -posY, posZ4 - lenHalf6));
+  mainFrame->AddNode(vol6, 1, MakeTrans(-posX2, posY, posZ4 - lenHalf6 - frameSizeHalf));
+  mainFrame->AddNode(vol6, 2, MakeTrans(-posX2, -posY, posZ4 - lenHalf6 - frameSizeHalf));
+  mainFrame->AddNode(vol6, 3, MakeTrans(posX2, posY, posZ4 - lenHalf6 - frameSizeHalf));
+  mainFrame->AddNode(vol6, 4, MakeTrans(posX2, -posY, posZ4 - lenHalf6 - frameSizeHalf));
+  mainFrame->AddNode(vol6, 5, MakeTrans(-posX1, posY, posZ4 - lenHalf6 - frameSizeHalf));
+  mainFrame->AddNode(vol6, 6, MakeTrans(-posX1, -posY, posZ4 - lenHalf6 - frameSizeHalf));
+  mainFrame->AddNode(vol6, 7, MakeTrans(posX1, posY, posZ4 - lenHalf6 - frameSizeHalf));
+  mainFrame->AddNode(vol6, 8, MakeTrans(posX1, -posY, posZ4 - lenHalf6 - frameSizeHalf));
+  mainFrame->AddNode(vol6, 9, MakeTrans(0., posY, posZ4 - lenHalf6 - frameSizeHalf));
+  mainFrame->AddNode(vol6, 10, MakeTrans(0., -posY, posZ4 - lenHalf6 - frameSizeHalf));
+  mainFrame->AddNode(vol6, 11, MakeTrans(posX3, posY2, posZ4 - lenHalf6 - frameSizeHalf));
+  mainFrame->AddNode(vol6, 12, MakeTrans(posX3, -posY2, posZ4 - lenHalf6 - frameSizeHalf));
+  mainFrame->AddNode(vol6, 13, MakeTrans(-posX3, posY2, posZ4 - lenHalf6 - frameSizeHalf));
+  mainFrame->AddNode(vol6, 14, MakeTrans(-posX3, -posY2, posZ4 - lenHalf6 - frameSizeHalf));
+  mainFrame->AddNode(vol6, 15, MakeTrans(-posX3, posY, posZ4 - lenHalf6 - frameSizeHalf));
+  mainFrame->AddNode(vol6, 16, MakeTrans(-posX3, -posY, posZ4 - lenHalf6 - frameSizeHalf));
+  mainFrame->AddNode(vol6, 17, MakeTrans(posX3, posY, posZ4 - lenHalf6 - frameSizeHalf));
+  mainFrame->AddNode(vol6, 18, MakeTrans(posX3, -posY, posZ4 - lenHalf6 - frameSizeHalf));
 
 
   // first parts along z-axis (long)
@@ -736,22 +916,20 @@ TGeoVolume* RichGeoCreator::CreateGas()
   double richHeightHalf = fRichHeight / 2.;
 
   double x1 = richWidthHalf - fRichCoveringThickness;
-  double y1 = ((2. * richHeightHalf - fRichEntranceHeight) / 2. - 2. * fRichCoveringThickness) / 2.;
+  double y1 = ((fRichHeight - fRichEntranceHeight) / 4. - fRichCoveringThickness);
   double z1 = fRichAddZ / 2. - fRichCoveringThickness / 2. + fRichEntranceThickness / 2.;
   double y2 = (richHeightHalf + fRichEntranceHeight / 2.) / 2.;
   double z2 = -richLenHalf - fRichAddZ / 2. + fRichCoveringThickness;
 
-  TGeoBBox* op0             = new TGeoBBox("rich_gas_PB_op0", x1, richHeightHalf - fRichCoveringThickness,
-                               richLenHalf - fRichEntranceThickness / 2. - fRichExitThickness / 2.);
+  TGeoBBox* op0 = new TGeoBBox("rich_gas_PB_op0", x1, richHeightHalf - fRichCoveringThickness, richLenHalf + 2);
   TGeoBBox* op1             = new TGeoBBox("rich_gas_PB_op1", x1, y1, z1);
   TGeoCompositeShape* op01  = MakeUnion("rich_gas_PB_op01", op0, op1, nullptr, MakeTrans(0., y2, z2));
-  TGeoBBox* op2             = new TGeoBBox("rich_gas_PB_op2", x1, y1, z1);
-  TGeoCompositeShape* op012 = MakeUnion("rich_gas_PB_op012", op01, op2, nullptr, MakeTrans(0., -y2, z2));
+  //TGeoBBox* op2             = new TGeoBBox("rich_gas_PB_op2", x1, y1, z1);
+  TGeoCompositeShape* op012 = MakeUnion("rich_gas_PB_op012", op01, op1, nullptr, MakeTrans(0., -y2, z2));
 
   TGeoConeSeg* op3          = new TGeoConeSeg("rich_gas_PB_op3", fPipeLength / 2., 0., fPipeOuterRadiusEntrance, 0.,
                                      fPipeOuterRadiusExit, 0., 360.);
-  TGeoTranslation* tr       = MakeTrans(0., 0., -(fRichEntranceThickness - fRichExitThickness) / 2.);
-  TGeoCompositeShape* gasPB = MakeSubtraction("rich_gas_PB", op012, op3, nullptr, tr);
+  TGeoCompositeShape* gasPB = MakeSubtraction("rich_gas_PB", op012, op3, nullptr, nullptr);
   TGeoVolume* gas           = new TGeoVolume("rich_gas", gasPB, fMaterials.GetMedium("RICHgas_CO2_dis"));
   //if (fSetVolumeColors) gas->SetLineColor(kYellow - 10);
   return gas;
@@ -762,16 +940,16 @@ TGeoVolume* RichGeoCreator::CreateRichContainer()
   double y1                = (fRichHeight / 2. + fRichEntranceHeight / 2.) / 2.;
   double z1                = -fRichLength / 2. - fRichAddZ / 2.;
   double y2                = (fRichHeight - fRichEntranceHeight) / 4.;
-  TGeoBBox* op0            = new TGeoBBox("rich_cont_PB_op0", fRichWidth / 2., fRichHeight / 2., fRichLength / 2.);
+
+  TGeoBBox* op0            = new TGeoBBox("rich_cont_PB_op0", fRichWidth / 2., fRichHeight / 2., fRichLength / 2. + 2);
   TGeoBBox* op1            = new TGeoBBox("rich_cont_PB_op1", fRichWidth / 2., y2, fRichAddZ / 2.);
   TGeoCompositeShape* op01 = MakeUnion("rich_cont_PB_op01", op0, op1, nullptr, MakeTrans(0., y1, z1));
-  TGeoBBox* op2            = new TGeoBBox("rich_cont_PB_op2", fRichWidth / 2., y2, fRichAddZ / 2.);
-  TGeoCompositeShape* pb   = MakeUnion("rich_cont_PB", op01, op2, nullptr, MakeTrans(0., -y1, z1));
-  //double richLenHalf       = fRichLength / 2;
+  //TGeoBBox* op2            = new TGeoBBox("rich_cont_PB_op2", fRichWidth / 2., y2, fRichAddZ / 2.);
+  TGeoCompositeShape* pb = MakeUnion("rich_cont_PB", op01, op1, nullptr, MakeTrans(0., -y1, z1));
   TGeoConeSeg* pipePB =
     new TGeoConeSeg("rich_pipe_subtract", fPipeLength / 2., 0, fPipeOuterRadiusEntrance - fPipeThicknessEntrance, 0,
                     fPipeOuterRadiusExit - fPipeThicknessExit, 0., 360.);
-  TGeoCompositeShape* pb2 = MakeSubtraction("rich_cont_PB2", pb, pipePB, nullptr, MakeTrans(0, 0, 0));
+  TGeoCompositeShape* pb2 = MakeSubtraction("rich_cont_PB2", pb, pipePB, nullptr, nullptr);
   TGeoVolume* richCont    = new TGeoVolume("rich_cont", pb2, fMaterials.GetMedium("aluminium"));
   //if (fSetVolumeColors) richCont->SetLineColor(kBlue - 10);
   return richCont;
@@ -779,9 +957,9 @@ TGeoVolume* RichGeoCreator::CreateRichContainer()
 
 TGeoVolume* RichGeoCreator::CreateSensitivePlane()
 {
-  double richLenHalf = fRichLength / 2.;
   TGeoBBox* op0      = new TGeoBBox("sens_plane_PB_op0", 170., 170., 0.05);
-  TGeoTube* op1       = new TGeoTube(0, (fPipeOuterRadiusExit + fPipeOuterRadiusEntrance) / 2, richLenHalf + 0.5);
+  TGeoConeSeg* op1    = new TGeoConeSeg("sens_plane_PB_op1", fPipeLength / 2., 0., fPipeOuterRadiusEntrance, 0.,
+                                     fPipeOuterRadiusExit, 0., 360.);
   TGeoTranslation* tr = MakeTrans(0., 0., (-fSensPlaneZ + (fRichExitThickness - fRichEntranceThickness) / 2.));
   TGeoCompositeShape* sensPlanePB = MakeSubtraction("sens_plane_PB", op0, op1, nullptr, tr);
   TGeoVolume* sensPlane           = new TGeoVolume("sens_plane", sensPlanePB, fMaterials.GetMedium("RICHgas_CO2_dis+"));
@@ -792,21 +970,24 @@ TGeoVolume* RichGeoCreator::CreateSensitivePlane()
 TGeoVolume* RichGeoCreator::CreateRichEntrance()
 {
   double richLenHalf   = fRichLength / 2.;
-  double richFlangeHalfThickness = 5.;
 
-  TGeoBBox* op_flange = new TGeoBBox("rich_entrance_PB_flange_op0", fRichEntranceWidth / 2. + richFlangeHalfThickness,
-                                     fRichEntranceHeight / 2. + richFlangeHalfThickness, 1.);
+  TGeoBBox* op_flange = new TGeoBBox("rich_entrance_PB_flange_op0", fRichEntranceWidth / 2. + fRichFlangeThickness,
+                                     fRichEntranceHeight / 2. + fRichFlangeThickness, 1.);
   TGeoBBox* op1_flange =
     new TGeoBBox("rich_entrance_PB_flange_op1", fRichEntranceWidth / 2., fRichEntranceHeight / 2., 2.);
   TGeoBBox* op0          = new TGeoBBox("rich_entrance_PB_op0", fRichEntranceWidth / 2., fRichEntranceHeight / 2.,
                                fRichEntranceThickness / 2.);
-  TGeoTube* op1          = new TGeoTube(0, fPipeOuterRadiusEntrance, richLenHalf * 1.01);
-  TGeoTranslation* tr    = MakeTrans(0., 0., richLenHalf - fRichEntranceThickness / 2.);
+  TGeoConeSeg* op1       = new TGeoConeSeg("rich_entrance_PB_op1", fPipeLength / 2., 0., fPipeOuterRadiusEntrance, 0.,
+                                     fPipeOuterRadiusExit, 0., 360.);
+  TGeoTranslation* tr    = MakeTrans(0., 0., richLenHalf - fRichEntranceThickness / 2. - fRichCoveringThickness);
   TGeoCompositeShape* pb_flange = MakeSubtraction("rich_entrance_PB_flange", op_flange, op1_flange, nullptr, nullptr);
-  TGeoCompositeShape* pb = MakeSubtraction("rich_entrance_PB", op0, op1, nullptr, tr);
-  TGeoVolume* entrance          = new TGeoVolume("rich_entrance", pb_flange, fMaterials.GetMedium("aluminium"));
-  TGeoVolume* entrance_kapton   = new TGeoVolume("rich_entrance_kapton", pb, fMaterials.GetMedium("kapton"));
-  entrance->AddNode(entrance_kapton, 1);
+  TGeoCompositeShape* pb_foil   = MakeSubtraction("rich_entrance_PB", op0, op1, nullptr, tr);
+  TGeoCompositeShape* pb        = MakeSubtraction("rich_entrance", op_flange, op1, nullptr, tr);
+  TGeoVolume* entrance          = new TGeoVolume("rich_entrance", pb, fMaterials.GetMedium("RICHgas_CO2_dis"));
+  TGeoVolume* entrance_flange   = new TGeoVolume("rich_entrance_flange", pb_flange, fMaterials.GetMedium("aluminium"));
+  TGeoVolume* entrance_foil     = new TGeoVolume("rich_entrance_foil", pb_foil, fMaterials.GetMedium("kapton"));
+  entrance->AddNode(entrance_foil, 1);
+  entrance->AddNode(entrance_flange, 1);
   //if (fSetVolumeColors) entrance->SetLineColor(kGreen - 5);
   return entrance;
 }
@@ -814,19 +995,23 @@ TGeoVolume* RichGeoCreator::CreateRichEntrance()
 TGeoVolume* RichGeoCreator::CreateRichExit()
 {
   double richLenHalf    = fRichLength / 2.;
-  double richFlangeHalfThickness = 5.;
 
-  TGeoBBox* op_flange  = new TGeoBBox("rich_exit_PB_flange_op0", fRichExitWidth / 2. + richFlangeHalfThickness,
-                                     fRichExitHeight / 2. + richFlangeHalfThickness, 1.);
+  TGeoBBox* op_flange  = new TGeoBBox("rich_exit_PB_flange_op0", fRichExitWidth / 2. + fRichFlangeThickness,
+                                     fRichExitHeight / 2. + fRichFlangeThickness, 1.);
   TGeoBBox* op1_flange = new TGeoBBox("rich_exit_PB_flange_op1", fRichExitWidth / 2., fRichExitHeight / 2., 2.);
   TGeoBBox* op0 = new TGeoBBox("rich_exit_PB_op0", fRichExitWidth / 2., fRichExitHeight / 2., fRichExitThickness / 2.);
-  TGeoTube* op1 = new TGeoTube(0, fPipeOuterRadiusExit, richLenHalf * 1.01);
-  TGeoTranslation* tr           = MakeTrans(0., 0., -richLenHalf + fRichExitThickness / 2.);
+  TGeoConeSeg* op1     = new TGeoConeSeg("rich_exit_PB_op1", fPipeLength / 2., 0., fPipeOuterRadiusEntrance, 0.,
+                                     fPipeOuterRadiusExit, 0., 360.);
+  TGeoTranslation* tr  = MakeTrans(0., 0., -richLenHalf + fRichExitThickness / 2.);
   TGeoCompositeShape* pb_flange = MakeSubtraction("rich_exit_PB_flange", op_flange, op1_flange, nullptr, nullptr);
-  TGeoCompositeShape* pb = MakeSubtraction("rich_exit_PB", op0, op1, nullptr, tr);
-  TGeoVolume* exit              = new TGeoVolume("rich_exit", pb_flange, fMaterials.GetMedium("aluminium"));
-  TGeoVolume* exit_innerpart    = new TGeoVolume("rich_exit_innerpart", pb, fMaterials.GetMedium("Polycarbonat"));
-  exit->AddNode(exit_innerpart, 1);
+  TGeoCompositeShape* pb_innerpart = MakeSubtraction("rich_exit_PB_innerpart", op0, op1, nullptr, tr);
+  TGeoCompositeShape* pb           = MakeSubtraction("rich_exit_PB", op_flange, op1, nullptr, tr);
+  TGeoVolume* exit                 = new TGeoVolume("rich_exit", pb, fMaterials.GetMedium("RICHgas_CO2_dis"));
+  TGeoVolume* exit_flange          = new TGeoVolume("rich_exit_flange", pb_flange, fMaterials.GetMedium("aluminium"));
+  TGeoVolume* exit_innerpart =
+    new TGeoVolume("rich_exit_innerpart", pb_innerpart, fMaterials.GetMedium("Polycarbonat"));
+  exit->AddNode(exit_innerpart, 1, MakeTrans(0, 0, 0));
+  exit->AddNode(exit_flange, 1);
   //if (fSetVolumeColors) exit->SetLineColor(kGreen - 5);
   return exit;
 }
@@ -869,24 +1054,24 @@ void RichGeoCreator::CreateRich()
   rich_gas->AddNode(camCont, 2, MakeCombiTrans(0., -camY, camZ, -fCameraFullRotX, 0., 0.));
 
   double mirrorZ   = -fRichOrigZ - richLenHalf + fMirrorOriginZ;
-  double beltsGapZ = 0.5;  // cm
+  //double beltsGapZ = 0.5;  // cm
 
   TGeoVolumeAssembly* mirrorHalf = CreateMirror();
   rich_gas->AddNode(mirrorHalf, 1, MakeCombiTrans(0., fMirrorOriginY + fMirrorGapY / 2., mirrorZ, 0., -90., -90.));
   rich_gas->AddNode(mirrorHalf, 2, MakeCombiTrans(0., -fMirrorOriginY - fMirrorGapY / 2., mirrorZ, 0., -90., 90.));
 
-  TGeoVolumeAssembly* belts_half_container = CreateMirrorSupportBelts();
+  //TGeoVolumeAssembly* belts_half_container = CreateMirrorSupportBelts();
 
-  rich_gas->AddNode(belts_half_container, 1,
-                    MakeCombiTrans(0., fMirrorOriginY + fMirrorGapY, mirrorZ + beltsGapZ, 0., -90., -90.));
-  rich_gas->AddNode(belts_half_container, 2,
-                    MakeCombiTrans(0., -fMirrorOriginY - fMirrorGapY, mirrorZ + beltsGapZ, 0., -90., 90.));
+  //rich_gas->AddNode(belts_half_container, 1,
+  //                  MakeCombiTrans(0., fMirrorOriginY + fMirrorGapY, mirrorZ + beltsGapZ, 0., -90., -90.));
+  //rich_gas->AddNode(belts_half_container, 2,
+  //                  MakeCombiTrans(0., -fMirrorOriginY - fMirrorGapY, mirrorZ + beltsGapZ, 0., -90., 90.));
 
   TGeoVolumeAssembly* pillars = CreateMirrorSupportPillars();
   rich_gas->AddNode(pillars, 1);
 
   TGeoVolume* sensPlane = CreateSensitivePlane();
-  rich_gas->AddNode(sensPlane, 1, MakeTrans(0., 0., fSensPlaneZ));  //-30.));
+  rich_gas->AddNode(sensPlane, 1, MakeTrans(0., 0., fSensPlaneZ));
 
   TGeoVolumeAssembly* mainFrame = CreateMainFrame();
   rich_gas->AddNode(mainFrame, 1, MakeTrans(0., 0., 38.541939));
@@ -898,13 +1083,11 @@ void RichGeoCreator::CreateRich()
     rich_gas->AddNode(shieldingBox, 2, MakeCombiTrans(0., 0., shieldingBoxZ, 0., 0., 180.));
   }
 
-  rich_gas->AddNode(CreateRichEntrance(), 1, MakeTrans(0., 0., -richLenHalf + fRichExitThickness / 2.));
-  rich_gas->AddNode(CreateRichExit(), 1, MakeTrans(0., 0., richLenHalf - fRichEntranceThickness / 2.));
+  rich_gas->AddNode(CreateRichEntrance(), 1, MakeTrans(0., 0., -richLenHalf + fRichEntranceThickness / 2.));
+  rich_gas->AddNode(CreateRichExit(), 1, MakeTrans(0., 0., richLenHalf - fRichExitThickness / 2));
 
   TGeoVolume* richCont = CreateRichContainer();
-  richCont->AddNode(rich_gas, 1, MakeTrans(0., 0., (fRichEntranceThickness - fRichExitThickness) / 2.));
-  //richCont->AddNode(CreateRichEntrance(), 1, MakeTrans(0., 0., -richLenHalf + fRichEntranceThickness / 2.));
-  //richCont->AddNode(CreateRichExit(), 1, MakeTrans(0., 0., richLenHalf - fRichExitThickness / 2.));
+  richCont->AddNode(rich_gas, 1, MakeTrans(0., 0., 0));
   richCont->AddNode(CreatePipe(), 1);
 
   TGeoVolumeAssembly* rich = new TGeoVolumeAssembly(fGeoName.c_str());
@@ -913,20 +1096,20 @@ void RichGeoCreator::CreateRich()
   // See https://git.cbm.gsi.de/CbmSoft/cbmroot_geometry/-/merge_requests/184
   //rich->AddNode(CreatePipeCyl(), 1, MakeTrans(0., 0., -40. + fRichOrigZ - fPipeCylPartLen / 2.));
 
-  TGeoVolume* top = new TGeoVolumeAssembly(fGeoName.c_str());
+  //TGeoVolume* top = new TGeoVolumeAssembly(fGeoName.c_str());
 
-  gGeoManager->SetTopVolume(top);
-  top->AddNode(rich, 1);
+  gGeoManager->SetTopVolume(rich);
+  //top->AddNode(rich, 1);
   gGeoManager->CloseGeometry();
   gGeoManager->CheckOverlaps(0.0001);
   gGeoManager->PrintOverlaps();
   gGeoManager->Test();
 
   string outputFile = fGeoName + ".geo.root";
-  top->Export((outputFile + "?reproducible").c_str());
+  rich->Export((outputFile + "?reproducible").c_str());
   LOG(info) << "Geometry file: " << outputFile;
 
-  //top->Draw("ogl");
+  //rich->Draw("ogl");
   gGeoManager->SetVisLevel(7);
 }
 
@@ -936,50 +1119,50 @@ TGeoVolumeAssembly* RichGeoCreator::CreateShieldingBox()
   // Shielding box is created using a number of boolean operations with shapes
   // All next shape is marked with increased number in name box1 to box 15
 
-  TGeoEltu* box1           = new TGeoEltu("box1", 183.0, 183.0, 61.3);
+  TGeoEltu* box1           = new TGeoEltu("box1", 183.0, 183.0, 70);
   TGeoBBox* box2           = new TGeoBBox("box2", 229.3 / 2., 73.879 / 2., 113.3 / 2.);
   TGeoCompositeShape* box3 = MakeIntersection("box3", box1, box2, nullptr, MakeTrans(0., 146.068, -4.65));
 
   TGeoBBox* box4           = new TGeoBBox("box4", 227.3 / 2., 71.937 / 2., 102.0 / 2.);
   TGeoCompositeShape* box5 = MakeSubtraction("box5", box3, box4, nullptr, MakeTrans(0., 147.097, 0.));
 
-  TGeoEltu* box6           = new TGeoEltu("box6", 172.0, 172.0, 4.65);
-  TGeoCompositeShape* box7 = MakeSubtraction("box7", box5, box6, nullptr, MakeTrans(0., 0., -56.65));
+  TGeoEltu* box6           = new TGeoEltu("box6", 172.0, 172.0, 6);
+  TGeoCompositeShape* box7 = MakeSubtraction("box7", box5, box6, nullptr, MakeTrans(0., 0., -58));
 
   TGeoBBox* box8           = new TGeoBBox("box8", 75.0 / 2., 222.422 / 2., 104.0 / 2.);
   TGeoCompositeShape* box9 = MakeSubtraction("box9", box7, box8, nullptr, MakeTrans(0., -0.082, 0.));
 
   TGeoBBox* box10 = new TGeoBBox("box10", 145.0 / 2., 10.3 / 2., 11.0 / 2.);
   TGeoCompositeShape* box11 =
-    MakeSubtraction("box11", box9, box10, nullptr, MakeCombiTrans(61.1525, 177.2736, -56.15, 0., 0., -31.26911));
+    MakeSubtraction("box11", box9, box10, nullptr, MakeCombiTrans(-61.152, 177.274, -56.15, 0., 0., 31.27));
 
-  TGeoBBox* box12 = new TGeoBBox("box12", 145.0 / 2., 10.3 / 2., 11.0 / 2.);
+  //TGeoBBox* box12 = new TGeoBBox("box12", 145.0 / 2., 10.3 / 2., 11.0 / 2.);
   TGeoCompositeShape* box13 =
-    MakeSubtraction("box13", box11, box12, nullptr, MakeCombiTrans(-61.152, 177.274, -56.15, 0., 0., 31.27));
+    MakeSubtraction("box13", box11, box10, nullptr, MakeCombiTrans(61.152, 177.274, -56.15, 0., 0., -31.27));
 
   TGeoBBox* box14 = new TGeoBBox("box14", 145.0 / 2., 10.3 / 2., 16.0 / 2.);
   TGeoCompositeShape* box15 =
     MakeSubtraction("box15", box13, box14, nullptr, MakeCombiTrans(0., 181.2639, -59.75, -41.3565, 0., 0.));
 
-  TGeoVolume* shBox = new TGeoVolume("shielding_box", box15, fMaterials.GetMedium("iron"));
+  TGeoVolume* shBox = new TGeoVolume("shielding_box_part", box15, fMaterials.GetMedium("iron"));
   //if (fSetVolumeColors) shBox->SetLineColor(kBlue + 4);
 
   // Wing part
   TGeoBBox* wing1 = new TGeoBBox("wing1", 117.0 / 2., 8.9571 / 2., 13.7221 / 2.);
-  TGeoBBox* wing2 = new TGeoBBox("wing2", 117.0 / 2., 8.9571 / 2., 13.7221 / 2.);
+  TGeoBBox* wing2 = new TGeoBBox("wing2", 117.0 / 2., 9.0 / 2., 13.7221 / 2.);
   TGeoCompositeShape* wing3 =
     MakeSubtraction("wing3", wing1, wing2, nullptr, MakeCombiTrans(49.9989, 0., 3.206, 0., 18.90578, 0.));
 
-  TGeoBBox* wing4 = new TGeoBBox("wing4", 117.0 / 2., 8.9571 / 2., 13.7221 / 2.);
+  //TGeoBBox* wing4 = new TGeoBBox("wing4", 117.0 / 2., 8.9571 / 2., 13.7221 / 2.);
   TGeoCompositeShape* wing5 =
-    MakeSubtraction("wing5", wing3, wing4, nullptr, MakeCombiTrans(-49.9989, 0., 3.206, 0., -18.90578, 0.));
+    MakeSubtraction("wing5", wing3, wing2, nullptr, MakeCombiTrans(-49.9989, 0., 3.206, 0., -18.90578, 0.));
 
   TGeoVolume* wing = new TGeoVolume("shieling_wing", wing5, fMaterials.GetMedium("iron"));
   //if (fSetVolumeColors) wing->SetLineColor(kBlue - 1);
 
   TGeoVolumeAssembly* shBoxFinal = new TGeoVolumeAssembly("shielding_box");
   shBoxFinal->AddNode(shBox, 1, MakeCombiTrans(0., 240.7246, 79.4162, 68.06551, 0., -180.0));
-  shBoxFinal->AddNode(wing, 1, MakeCombiTrans(0., 118.3074, 225.1717, -26.70901, 0., 0.));
+  shBoxFinal->AddNode(wing, 1, MakeCombiTrans(0., 118.30, 225.1717, -26.70901, 0., 0.));
 
   return shBoxFinal;
 }
diff --git a/sim/detectors/rich/geo/RichGeoCreator.h b/sim/detectors/rich/geo/RichGeoCreator.h
index ed8fa49d4af4be1c8d00dd19954fb84254a742ca..d1baad3cee8298a7388bc698682b9245607a8a73 100644
--- a/sim/detectors/rich/geo/RichGeoCreator.h
+++ b/sim/detectors/rich/geo/RichGeoCreator.h
@@ -1,10 +1,11 @@
-/* Copyright (C) 2022-2024 UGiessen/GSI, Giessen/Darmstadt
+/* Copyright (C) 2022-2025 UGiessen/GSI, Giessen/Darmstadt
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Semen Lebedev [committer], Simon Neuhaus */
 
 /* to generate geometry version v22a use version of this file and RichGeoCreator.cxx from commit bed4c932
    to generate geometry version v23a use version of this file and RichGeoCreator.cxx from commit c25124a0
-   to generate geometry version v24a use version of this file and RichGeoCreator.cxx from commit current version (update at some point)
+   to generate geometry version v24a use version of this file and RichGeoCreator.cxx from commit eb21a51c
+   to generate geometry version v25a use version of this file and RichGeoCreator.cxx from commit current version (update at some point)
 */
 
 #ifndef RICH_GEO_CREATOR
@@ -34,13 +35,14 @@ public:
   void Create();
 
   void SetGeoName(const std::string& geoName) { fGeoName = geoName; }
+  std::string GetGeoName() { return fGeoName; }
   void SetAddShieldingBox(bool addShildingBox) { fAddShieldingBox = addShildingBox; }
   void SetVolumeColors(bool setVolumeColors) { fSetVolumeColors = setVolumeColors; }
 
 private:
   RichGeoMaterials fMaterials;
 
-  std::string fGeoName  = "rich_v24a";
+  std::string fGeoName  = "rich_v25a";
   bool fAddShieldingBox = true;
   bool fSetVolumeColors = false;
 
@@ -58,9 +60,10 @@ private:
   double fRichEntranceWidth     = 260.;   //cm
   double fRichEntranceHeight    = 175.;   //cm
   double fRichEntranceThickness = 0.025;  //cm
+  double fRichFlangeThickness   = 5.;     //cm
   double fRichExitWidth         = 569.;   //cm
   double fRichExitHeight        = 384.;   //cm
-  double fRichExitThickness     = 1;      //cm
+  double fRichExitThickness     = 1.0;    //cm
 
   // Pipe parameters
   double fPipeOuterRadiusEntrance = 16.4;  //cm
@@ -68,7 +71,7 @@ private:
   double fPipeOuterRadiusExit     = 29.9;  //cm
   double fPipeThicknessExit       = fPipeThicknessEntrance;  //cm
   double fPipeCylPartLen          = 10.0;                    //cm
-  double fPipeLength              = fRichLength + 0.5;       //cm
+  double fPipeLength              = fRichLength + 4;         //cm
 
   // Mirror parameters
   double fMirrorRadius     = 300.;    //cm
@@ -127,10 +130,11 @@ private:
   TGeoVolume* CreatePipe();
   TGeoVolume* CreatePipeCyl();
   TGeoVolumeAssembly* CreateShieldingBox();
-  TGeoVolumeAssembly* CreateBeltAssembly();
-  TGeoVolumeAssembly* CreateMirrorSupportBelts();
+  TGeoVolumeAssembly* CreateMirrorFixing(const std::string& sides = "both");
+  //TGeoVolumeAssembly* CreateBeltAssembly();
+  //TGeoVolumeAssembly* CreateMirrorSupportBelts();
   TGeoVolumeAssembly* CreateMirrorSupportPillars();
-  TGeoVolume* CreateStuds(double zpos, double lenHalf, double angle);
+  TGeoVolume* CreateStuds(double zpos, double lenHalf, double angle, const std::string& mirrorfixing = "both");
   TGeoVolume* CreatePillarConnection();
 
   void CreateRich();