diff --git a/sim/detectors/much/CbmMuchDigitizeGem.cxx b/sim/detectors/much/CbmMuchDigitizeGem.cxx
index a4c9f32cc87249bb2961d9fe7dd14a6028327983..853b8b923a91b55fe9f5bbdc57d073bc5a47fdfe 100644
--- a/sim/detectors/much/CbmMuchDigitizeGem.cxx
+++ b/sim/detectors/much/CbmMuchDigitizeGem.cxx
@@ -348,7 +348,7 @@ InitStatus CbmMuchDigitizeGem::Init()
         geoTag = TString(name(5, name.Length() - 5));
       }
       // geoTag = "v17b"; // modified ekata
-      cout << " geo tag " << geoTag << endl;
+      // cout << " geo tag " << geoTag << endl;
       LOG(info) << fName << ": MUCH geometry tag is " << geoTag;
       break;
     }  //? node is MUCH
@@ -375,7 +375,6 @@ InitStatus CbmMuchDigitizeGem::Init()
     LOG(info) << fName << ": Using flag " << fFlag << (fFlag ? " (mcbm) " : "(standard)");
   }
 
-
   // Initialize GeoScheme
   /// Save old global file and folder pointer to avoid messing with FairRoot
   TFile* oldFile     = gFile;
@@ -391,6 +390,29 @@ InitStatus CbmMuchDigitizeGem::Init()
   gDirectory = oldDir;
   fGeoScheme->Init(stations, fFlag);
 
+  //For X, Y position correction according to different geometry file and its tag.
+  if (fDigiFile.Contains("mcbm")) {
+    if (fDigiFile.Contains("v19a")) {
+      fGemTX = 18.5;
+      fGemTY = 80.5;
+    }
+    else if (fDigiFile.Contains("v20a")) {
+      fGemTX = 18.5;
+      fGemTY = 80.0;
+    }
+    else if (fDigiFile.Contains("v22j")) {  // for high intensity runs during June 2022 mMuCh in acceptance
+      fGemTX = 8.0;
+      fGemTY = 81.5;
+      fRpcTX = 66.25;  //RPC introduced during 2022 data taking
+      fRpcTY = -70.5;
+    }
+    else if (fDigiFile.Contains("v22k")) {  // during benchmark runs. mMuCh is out of acceptance
+      fGemTX = -44.5;
+      fGemTY = 81.5;
+      fRpcTX = 48.0;
+      fRpcTY = -70.0;
+    }
+  }
 
   // Determine drift volume width
   // Double_t driftVolumeWidth = 0.4; // cm - default and will over written by Detector Parameters function.
@@ -939,30 +961,22 @@ hPriElAfterDriftpathrpc->Fill(nElectrons);}
       //------------------------Added by O. Singh 11.12.2017 for mCbm-------------------------
       Double_t r = 0.0, phi = 0.0;
       if (fFlag == 1) {  //mCbm
-        TVector3 nVe;
-        Double_t XX = ve.X();
-        Double_t YY = ve.Y();
-        Double_t ZZ = ve.Z();
-
-        //Transfotamation of MuChpoints to pads position
-        Double_t tX  = 18.5;  // Ajit + OS + Apar -> For miniMUCH setup in March 2019
-        Double_t tY  = 80.0;  // Ajit + OS + Apar -> For miniMUCH setup in March 2019
-        Double_t nXX = XX - tX;
-        Double_t nYY = YY - tY;
-
-        Double_t nZZ = ZZ;
-
-        nVe.SetX(nXX);
-        nVe.SetY(nYY);
-        nVe.SetZ(nZZ);
-        r   = nVe.Perp();
-        phi = nVe.Phi();
-      }
-      else {  //Cbm
-
-        r   = ve.Perp();
-        phi = ve.Phi();
+        if (module->GetDetectorType() == 3)  // GEM
+        {
+          ve.SetX(ve.X() - fGemTX);
+          ve.SetY(ve.Y() - fGemTY);
+        }
+        else if (module->GetDetectorType() == 4)  // RPC
+        {
+          ve.SetX(ve.X() - fRpcTX);
+          ve.SetY(ve.Y() - fRpcTY);
+        }
+        else {
+          LOG(error) << "Unknown detector type";
+        }
       }
+      r   = ve.Perp();
+      phi = ve.Phi();
       //--------------------------------------------------------------------------
       UInt_t ne     = GasGain();  //Number of secondary electrons
       Double_t r1   = r - fSpotRadius;
diff --git a/sim/detectors/much/CbmMuchDigitizeGem.h b/sim/detectors/much/CbmMuchDigitizeGem.h
index 048ca85c2bf8be4e01cc35d6182abd6c7a5889fa..13bb6cffc8f0df19a36ea33accd4739fa9022cb6 100644
--- a/sim/detectors/much/CbmMuchDigitizeGem.h
+++ b/sim/detectors/much/CbmMuchDigitizeGem.h
@@ -6,9 +6,11 @@
  *@author Vikas Singhal <vikas@vecc.gov.in>
  *@since 15.01.2020
  *@version 4.0
- *@description: Using std::vector for digi and match containers. 
- *@author Ekata Nandy (ekata@vecc.gov.in)                                                                                   // @since 21.06.19 : RPC digitization parameters(for 3rd and 4th MUCH station) now have been implemented along with GEM param
- *eters (1st and 2nd station) @author Ekata Nandy (ekata@vecc.gov.in)                                                        
+ *@description: Using std::vector for digi and match containers.
+ *@author Ekata Nandy (ekata@vecc.gov.in)
+ *@since 21.06.19
+ *@description: RPC digitization parameters(for 3rd and 4th MUCH station) now have been implemented along with GEM
+ * parameters (1st and 2nd station)
  *@author Vikas Singhal <vikas@vecc.gov.in>
  *@since 01.10.16
  *@version 3.0
@@ -284,6 +286,15 @@ private:
   void AddCharge(CbmMuchPad* pad, UInt_t charge, Int_t iPoint, Double_t time, Double_t driftTime);
   void Reset();
 
+  //Below variables are applying X, Y correction for different mCBM geometries.
+  //In future we'll remove these and try to read directly from Geometry file.
+  // For GEM
+  Double_t fGemTX = 0.0;
+  Double_t fGemTY = 0.0;
+  // For RPC
+  Double_t fRpcTX = 0.0;
+  Double_t fRpcTY = 0.0;
+
   ClassDef(CbmMuchDigitizeGem, 1)
 };
 #endif