diff --git a/sim/transport/base/CbmTarget.cxx b/sim/transport/base/CbmTarget.cxx
index c609851c5504f0afe633ac50f0c567b81bce3f3f..239ea3c6b61dcea8078c863099fccb3294fe1a5c 100644
--- a/sim/transport/base/CbmTarget.cxx
+++ b/sim/transport/base/CbmTarget.cxx
@@ -128,7 +128,9 @@ void CbmTarget::ConstructGeometry()
   }
   else if (!fMaterial.IsNull()) {
     targElem = geoMan->GetElementTable()->FindElement(fMaterial.Data());
-    if (!targElem) { LOG(fatal) << GetName() << ": Unknown element " << fMaterial; }
+    if (!targElem) {
+      LOG(fatal) << GetName() << ": Unknown element " << fMaterial;
+    }
     fZ = targElem->Z();
   }
   else {
@@ -144,6 +146,7 @@ void CbmTarget::ConstructGeometry()
                << " available: density must be set explicitly.";
     return;
   }
+  LOG(info) << GetName() << ": Density " << fDensity;
 
   // --- Create target medium
   TGeoMaterial* targMat = new TGeoMaterial("targetMaterial", targElem, fDensity);
@@ -202,6 +205,7 @@ Double_t CbmTarget::GetStandardDensity(Int_t charge) const
   // TODO: Better implementation with array or the like
 
   switch (charge) {
+    case 1: return 0.07085; break;  // Liquid Hydrogen (20ËšK at 1 atm)
     case 4: return 1.848; break;    // Beryllium
     case 6: return 2.260; break;    // Carbon
     case 28: return 8.908; break;   // Nickel
@@ -249,11 +253,13 @@ std::string CbmTarget::ToString() const
 
   std::stringstream ss;
 
-  if (fBuildFromFile) ss << GetName() << ": Geometry file " << fgeoName;
+  if (fBuildFromFile)
+    ss << GetName() << ": Geometry file " << fgeoName;
 
   else {
     ss << GetName() << ": Material " << fMaterial;
-    if (fDensity >= 0.) ss << ", density " << fDensity << " g/cm^3, ";
+    if (fDensity >= 0.)
+      ss << ", density " << fDensity << " g/cm^3, ";
     else
       ss << ", standard density, ";
     ss << "thickness " << fThickness * 10000. << " mum, diameter " << fDiameter << " cm, position (" << fPosX << ", "
diff --git a/sim/transport/steer/CbmTransport.cxx b/sim/transport/steer/CbmTransport.cxx
index babc2725b741367bcf54682c892f56a3899a1ab5..3fc33fbc3e951e1a67f557d488f8939e0bd7cbd8 100644
--- a/sim/transport/steer/CbmTransport.cxx
+++ b/sim/transport/steer/CbmTransport.cxx
@@ -774,10 +774,14 @@ void CbmTransport::SetOutFileName(TString fileName, Bool_t overwrite)
 
 // -----   Define the target   ----------------------------------------------
 void CbmTransport::SetTarget(const char* medium, Double_t thickness, Double_t diameter, Double_t x, Double_t y,
-                             Double_t z, Double_t angle)
+                             Double_t z, Double_t angle, Double_t density)
 {
-
-  fTarget.reset(new CbmTarget(medium, thickness, diameter));
+  if (density >= 0.) {
+    fTarget.reset(new CbmTarget(medium, thickness, diameter, density));
+  }
+  else {
+    fTarget.reset(new CbmTarget(medium, thickness, diameter));
+  }
   fTarget->SetPosition(x, y, z);
   fTarget->SetRotation(angle);
 }
diff --git a/sim/transport/steer/CbmTransport.h b/sim/transport/steer/CbmTransport.h
index 8a2d65a129b95adc79034cd3342cef052bf7d76c..d8a397140990e9d459b89e39956d80df05de8077 100644
--- a/sim/transport/steer/CbmTransport.h
+++ b/sim/transport/steer/CbmTransport.h
@@ -277,13 +277,14 @@ public:
      ** @param y          y position of target centre in global c.s. [cm]
      ** @param z          z position of target centre in global c.s. [cm]
      ** @param rot        Rotation angle around y axis in global c.s. [deg]
+     ** @param density    target material density [g/cm^3], -1 to attempt using a default
      **
      ** The target is a disk with the z axis as symmetry axis.
      ** By default, it is centred at the origin. It can be rotated around
      ** the y axis.
      **/
-  void SetTarget(const char* medium, Double_t thickness, Double_t diameter, Double_t x = 0., Double_t y = 0.,
-                 Double_t z = 0., Double_t rot = 0.);
+  void SetTarget(const char* medium = "Gold", Double_t thickness = 0.025, Double_t diameter = 2.5, Double_t x = 0.,
+                 Double_t y = 0., Double_t z = -44.0, Double_t rot = 0., Double_t density = -1);
 
 
   /** @brief Set the output file name
diff --git a/sim/transport/steer/CbmTransportConfig.cxx b/sim/transport/steer/CbmTransportConfig.cxx
index 9d2a4dbee2bc832afb0aa8b922d22fe97cadf7db..c63be8268430fb1be60153564c3c4d6864ad09cb 100644
--- a/sim/transport/steer/CbmTransportConfig.cxx
+++ b/sim/transport/steer/CbmTransportConfig.cxx
@@ -34,6 +34,7 @@ CbmTransportConfig::TagSet_t CbmTransportConfig::GetValidationTags()
           "target.position.y",
           "target.position.z",
           "target.rotation.y",
+          "target.density",
           "beam.position.x",
           "beam.position.y",
           "beam.position.zFocus",
@@ -174,8 +175,12 @@ bool CbmTransportConfig::SetTarget(CbmTransport& obj, const pt::ptree& moduleTre
   auto y         = moduleTree.get_optional<float>("target.position.y");
   auto z         = moduleTree.get_optional<float>("target.position.z");
   auto rotY      = moduleTree.get_optional<float>("target.rotation.y");
+  auto density   = moduleTree.get_optional<float>("target.density");
   // one can set a target only if all 3 parameters are present in config file
   if (material && thickness && diameter) {
+    if (x && y && z && rotY && density && density.get() >= 0.)
+      obj.SetTarget(material.get().c_str(), thickness.get(), diameter.get(), x.get(), y.get(), z.get(), rotY.get(),
+                    density.get());
     if (x && y && z && rotY)
       obj.SetTarget(material.get().c_str(), thickness.get(), diameter.get(), x.get(), y.get(), z.get(), rotY.get());
     else if (x && y && z)