diff --git a/core/detectors/sts/CbmStsParSetModule.h b/core/detectors/sts/CbmStsParSetModule.h
index e2a7bb62f33a90d39f095829a7f12619f8e21511..3f516fc4f4adadb24d882c1d29521141529a3c71 100644
--- a/core/detectors/sts/CbmStsParSetModule.h
+++ b/core/detectors/sts/CbmStsParSetModule.h
@@ -43,14 +43,6 @@ public:
                      const char* context = "Default");
 
 
-  /** @brief Copy constructor (disabled) **/
-  CbmStsParSetModule(const CbmStsParSetModule&) = delete;
-
-
-  /** @brief Move constructor (disabled) **/
-  CbmStsParSetModule(CbmStsParSetModule&&) = delete;
-
-
   /** @brief Destructor **/
   virtual ~CbmStsParSetModule();
 
@@ -89,18 +81,6 @@ public:
   Bool_t IsSet() const { return (fUseGlobal || (!fParams.empty())); }
 
 
-  /** @brief Copy assignment operator (disabled) **/
-  CbmStsParSetModule& operator=(const CbmStsParSetModule&) = delete;
-
-
-  /** @brief Move assignment operator (disabled) **/
-  CbmStsParSetModule& operator=(CbmStsParSetModule&&) = delete;
-
-
-  /** @brief Writing parameters to ASCII. Abstract in base class.
-     **
-     ** An ASCII I/O is not implemented. The method throws an error.
-     **/
   virtual void putParams(FairParamList* parList);
 
 
diff --git a/core/detectors/sts/CbmStsParSetSensor.h b/core/detectors/sts/CbmStsParSetSensor.h
index 30241eef4de0391e391dd5821db6a5c99926b7ee..d44104a5c92049a2ac21dd33c2917911436c9864 100644
--- a/core/detectors/sts/CbmStsParSetSensor.h
+++ b/core/detectors/sts/CbmStsParSetSensor.h
@@ -43,22 +43,14 @@ public:
                      const char* context = "Default");
 
 
-  /** @brief Copy constructor (disabled) **/
-  CbmStsParSetSensor(const CbmStsParSetSensor&) = delete;
-
-
-  /** @brief Move constructor (disabled) **/
-  CbmStsParSetSensor(CbmStsParSetSensor&&) = delete;
+  /** @brief Destructor **/
+  virtual ~CbmStsParSetSensor();
 
 
   /** @brief Reset all parameters **/
   virtual void clear();
 
 
-  /** @brief Destructor **/
-  virtual ~CbmStsParSetSensor();
-
-
   /** @brief Reading parameters from ASCII. Abstract in base class.
      **
      ** An ASCII I/O is not implemented. The method throws an error.
@@ -73,14 +65,6 @@ public:
   const CbmStsParSensor& GetParSensor(UInt_t address);
 
 
-  /** @brief Copy assignment operator (disabled) **/
-  CbmStsParSetSensor& operator=(const CbmStsParSetSensor&) = delete;
-
-
-  /** @brief Move assignment operator (disabled) **/
-  CbmStsParSetSensor& operator=(CbmStsParSetSensor&&) = delete;
-
-
   /** @brief Writing parameters to ASCII. Abstract in base class.
      **
      ** An ASCII I/O is not implemented. The method throws an error.
diff --git a/core/detectors/sts/CbmStsParSetSensorCond.h b/core/detectors/sts/CbmStsParSetSensorCond.h
index 80b9765b9739ac74bbc937b1944ff3dea549b425..d58fd714b8e73276c5dc2635653eb4659bc38be6 100644
--- a/core/detectors/sts/CbmStsParSetSensorCond.h
+++ b/core/detectors/sts/CbmStsParSetSensorCond.h
@@ -43,14 +43,6 @@ public:
                          const char* context = "Default");
 
 
-  /** @brief Copy constructor (disabled) **/
-  CbmStsParSetSensorCond(const CbmStsParSetSensorCond&) = delete;
-
-
-  /** @brief Move constructor (disabled) **/
-  CbmStsParSetSensorCond(CbmStsParSetSensorCond&&) = delete;
-
-
   /** @brief Destructor **/
   virtual ~CbmStsParSetSensorCond();
 
@@ -79,14 +71,6 @@ public:
   Bool_t IsSet() const { return (fGlobal || !fParams.empty()); }
 
 
-  /** @brief Copy assignment operator (disabled) **/
-  CbmStsParSetSensorCond& operator=(const CbmStsParSetSensorCond&) = delete;
-
-
-  /** @brief Move assignment operator (disabled) **/
-  CbmStsParSetSensorCond& operator=(CbmStsParSetSensorCond&&) = delete;
-
-
   /** @brief Writing parameters to ASCII. Abstract in base class.
      **
      ** An ASCII I/O is not implemented. The method throws an error.
diff --git a/reco/detectors/sts/CbmRecoSts.cxx b/reco/detectors/sts/CbmRecoSts.cxx
index 235f00126327a029970301507162572ed277f72d..3d9d0230b8023f21dfa378e3f5812aba55dff60f 100644
--- a/reco/detectors/sts/CbmRecoSts.cxx
+++ b/reco/detectors/sts/CbmRecoSts.cxx
@@ -75,20 +75,10 @@ UInt_t CbmRecoSts::CreateModules()
     assert(setupSensor);
     Int_t sensorAddress = Int_t(setupSensor->GetAddress());
 
-    // --- Parameter sets from database or user-defined
-    CbmStsParSetModule* modulePars      = (fUserParSetModule ? fUserParSetModule : fParSetModule);
-    CbmStsParSetSensor* sensorPars      = (fUserParSetSensor ? fUserParSetSensor : fParSetSensor);
-    CbmStsParSetSensorCond* sensorConds = (fUserParSetCond ? fUserParSetCond : fParSetCond);
-
     // --- Module parameters
-    const CbmStsParModule& modPar = (fUserParModule ? *fUserParModule : modulePars->GetParModule(moduleAddress));
-
-    // --- Sensor parameters
-    const CbmStsParSensor& sensPar = (fUserParSensor ? *fUserParSensor : sensorPars->GetParSensor(sensorAddress));
-
-    // --- Sensor conditions
-    const CbmStsParSensorCond& sensCond =
-      (fUserParSensorCond ? *fUserParSensorCond : sensorConds->GetParSensor(sensorAddress));
+    const CbmStsParModule& modPar       = fParSetModule->GetParModule(moduleAddress);
+    const CbmStsParSensor& sensPar      = fParSetSensor->GetParSensor(sensorAddress);
+    const CbmStsParSensorCond& sensCond = fParSetCond->GetParSensor(sensorAddress);
 
     // --- Calculate and set average Lorentz shift
     // --- This will be used in hit finding for correcting the position.
@@ -290,18 +280,8 @@ InitStatus CbmRecoSts::Init()
   assert(fParSim);
   LOG(info) << GetName() << ": Sim settings " << fParSim->ToString();
 
-  // --- Module parameters
-  assert(fParSetModule);
-  LOG(info) << GetName() << ": Module parameters " << fParSetModule->ToString();
-
-  // --- Sensor parameters
-  assert(fParSetSensor);
-  LOG(info) << GetName() << ": Sensor parameters " << fParSetModule->ToString();
-
-  // --- Sensor conditions
-  assert(fParSetCond);
-  //assert(fParSetCond->IsSet());
-  LOG(info) << GetName() << ": Sensor conditions " << fParSetCond->ToString();
+  // --- Parameters
+  InitParams();
 
   // --- Initialise STS setup
   fSetup = CbmStsSetup::Instance();
@@ -320,6 +300,70 @@ InitStatus CbmRecoSts::Init()
 // -------------------------------------------------------------------------
 
 
+// -----   Parameter initialisation   --------------------------------------
+void CbmRecoSts::InitParams()
+{
+
+  // --- Module parameters
+  TString sourceModu = "database";
+  assert(fParSetModule);
+  if (fUserParSetModule) {
+    fParSetModule->clear();
+    *fParSetModule = *fUserParSetModule;
+    fParSetModule->setChanged();
+    fParSetModule->setInputVersion(-2, 1);
+    sourceModu = "user-defined";
+  }
+  if (fUserParModule) {  // global settings override
+    fParSetModule->clear();
+    fParSetModule->SetGlobalPar(*fUserParModule);
+    fParSetModule->setChanged();
+    fParSetModule->setInputVersion(-2, 1);
+    sourceModu = "user-defined, global";
+  }
+  LOG(info) << GetName() << ": Module parameters (" << sourceModu << ") " << fParSetModule->ToString();
+
+  // --- Sensor parameters
+  TString sourceSens = "database";
+  assert(fParSetSensor);
+  if (fUserParSetSensor) {
+    fParSetSensor->clear();
+    *fParSetSensor = *fUserParSetSensor;
+    fParSetSensor->setChanged();
+    fParSetSensor->setInputVersion(-2, 1);
+    sourceSens = "user-defined";
+  }
+  if (fUserParSensor) {  // global settings override
+    fParSetSensor->clear();
+    fParSetSensor->SetGlobalPar(*fUserParSensor);
+    fParSetSensor->setChanged();
+    fParSetSensor->setInputVersion(-2, 1);
+    sourceSens = "user-defined, global";
+  }
+  LOG(info) << GetName() << ": Sensor parameters (" << sourceSens << ")" << fParSetSensor->ToString();
+
+  // --- Sensor conditions
+  TString sourceCond = "database";
+  assert(fParSetCond);
+  if (fUserParSetCond) {
+    fParSetCond->clear();
+    *fParSetCond = *fUserParSetCond;
+    fParSetCond->setChanged();
+    fParSetCond->setInputVersion(-2, 1);
+    sourceSens = "user-defined";
+  }
+  if (fUserParCond) {  // global settings override
+    fParSetCond->clear();
+    fParSetCond->SetGlobalPar(*fUserParCond);
+    fParSetCond->setChanged();
+    fParSetCond->setInputVersion(-2, 1);
+    sourceCond = "user-defined, global";
+  }
+  LOG(info) << GetName() << ": Sensor conditions (" << sourceCond << ")" << fParSetCond->ToString();
+}
+// -------------------------------------------------------------------------
+
+
 // -----   Calculate the mean Lorentz shift in a sensor   ------------------
 std::pair<Double_t, Double_t> CbmRecoSts::LorentzShift(const CbmStsParSensorCond& conditions, Double_t dZ, Double_t bY)
 {
diff --git a/reco/detectors/sts/CbmRecoSts.h b/reco/detectors/sts/CbmRecoSts.h
index 0fe9f80c47aec6c2e440c81b79a1e401656494f0..15b5a804cd72927464dbb9f8384677d8b3b51fda 100644
--- a/reco/detectors/sts/CbmRecoSts.h
+++ b/reco/detectors/sts/CbmRecoSts.h
@@ -186,7 +186,7 @@ public:
       ** If defined, these condition parameters will be used for all sensors instead
       ** of those found in the runtimeDb.
       */
-  void UseSensorCond(CbmStsParSensorCond* sensorCond) { fUserParSensorCond = sensorCond; }
+  void UseSensorCond(CbmStsParSensorCond* sensorCond) { fUserParCond = sensorCond; }
 
   /** @brief User-defined module parameter set
      ** @param parModule Module parameter set object
@@ -237,6 +237,16 @@ private:
   void GetSensorParameters(CbmStsElement* geoSensor);
 
 
+  /** @brief Initialise parameters
+   **
+   ** For simulated data, the parameters for modules and sensors are retrieved from the
+   ** runtimeDb. They can be overridden by user-specified parameter sets using the respective
+   ** setters. This is necessary when processing experiment data without a prior simulation step.
+   **
+   **/
+  void InitParams();
+
+
   /** @brief Process one time slice or event
      ** @param event  Pointer to CbmEvent object
      **
@@ -260,10 +270,10 @@ private:
   CbmStsParSetSensorCond* fParSetCond = nullptr;  ///< Sensor conditions
 
   // --- User-defined parameters, not from database
-  CbmStsParAsic* fUserParAsic             = nullptr;
-  CbmStsParModule* fUserParModule         = nullptr;
-  CbmStsParSensor* fUserParSensor         = nullptr;
-  CbmStsParSensorCond* fUserParSensorCond = nullptr;
+  CbmStsParAsic* fUserParAsic       = nullptr;
+  CbmStsParModule* fUserParModule   = nullptr;
+  CbmStsParSensor* fUserParSensor   = nullptr;
+  CbmStsParSensorCond* fUserParCond = nullptr;
 
   // --- User-defined parameter sets, not from database
   CbmStsParSetModule* fUserParSetModule   = nullptr;