diff --git a/corsika/detail/media/HomogeneousMedium.inl b/corsika/detail/media/HomogeneousMedium.inl
new file mode 100644
index 0000000000000000000000000000000000000000..adbe03c4f31c4516300030bfbf170122663d4124
--- /dev/null
+++ b/corsika/detail/media/HomogeneousMedium.inl
@@ -0,0 +1,46 @@
+/*
+ * (c) Copyright 2020 CORSIKA Project, corsika-project@lists.kit.edu
+ *
+ * This software is distributed under the terms of the GNU General Public
+ * Licence version 3 (GPL Version 3). See file LICENSE for a full version of
+ * the license.
+ */
+
+#pragma once
+
+#include <corsika/framework/core/PhysicalUnits.hpp>
+#include <corsika/framework/geometry/Line.hpp>
+#include <corsika/framework/geometry/Point.hpp>
+#include <corsika/framework/geometry/Trajectory.hpp>
+#include <corsika/media/NuclearComposition.hpp>
+
+namespace corsika {
+
+  template <typename T>
+  HomogeneousMedium<T>::HomogeneousMedium(units::si::MassDensityType density,
+                                          NuclearComposition nuclComp)
+      : density_(density)
+      , nuclComp_(nuclComp) {}
+
+  template <typename T>
+  units::si::MassDensityType HomogeneousMedium<T>::getMassDensity(Point const&) const {
+    return density_;
+  }
+  template <typename T>
+  NuclearComposition const& HomogeneousMedium<T>::getNuclearComposition() const {
+    return nuclComp_;
+  }
+
+  template <typename T>
+  units::si::GrammageType HomogeneousMedium<T>::integratedGrammage(
+      Trajectory<Line> const&, units::si::LengthType to) const {
+    using namespace units::si;
+    return to * density_;
+  }
+
+  template <typename T>
+  units::si::LengthType HomogeneousMedium<T>::arclengthFromGrammage(
+      Trajectory<Line> const&, units::si::GrammageType grammage) const {
+    return grammage / density_;
+  }
+} // namespace corsika
diff --git a/corsika/media/HomogeneousMedium.hpp b/corsika/media/HomogeneousMedium.hpp
index 81101825ac559bf7b4923827d16f7c4818f22b86..56ea8a25d804c11d468327d83fa7fa7b9a3eeb60 100644
--- a/corsika/media/HomogeneousMedium.hpp
+++ b/corsika/media/HomogeneousMedium.hpp
@@ -8,49 +8,39 @@
 
 #pragma once
 
-#include <corsika/framework/core/ParticleProperties.hpp>
 #include <corsika/framework/core/PhysicalUnits.hpp>
 #include <corsika/framework/geometry/Line.hpp>
 #include <corsika/framework/geometry/Point.hpp>
 #include <corsika/framework/geometry/Trajectory.hpp>
-#include <corsika/framework/random/RNGManager.hpp>
 #include <corsika/media/NuclearComposition.hpp>
 
-#include <corsika/setup/SetupTrajectory.h>
-
-#include <cassert>
-
 /**
  * a homogeneous medium
  */
 
 namespace corsika {
 
-  template <class T>
+  template <typename T>
   class HomogeneousMedium : public T {
-    MassDensityType const fDensity;
-    NuclearComposition const fNuclComp;
+    units::si::MassDensityType const density_;
+    NuclearComposition const nuclComp_;
 
   public:
-    HomogeneousMedium(MassDensityType pDensity, NuclearComposition pNuclComp)
-        : fDensity(pDensity)
-        , fNuclComp(pNuclComp) {}
+    HomogeneousMedium(units::si::MassDensityType density, NuclearComposition nuclComp);
 
-    MassDensityType GetMassDensity(corsika::Point const&) const override {
-      return fDensity;
-    }
+      units::si::MassDensityType getMassDensity(Point const&) const override;
 
-    NuclearComposition const& GetNuclearComposition() const override { return fNuclComp; }
+    NuclearComposition const& getNuclearComposition() const override;
 
-    GrammageType IntegratedGrammage(corsika::Trajectory<corsika::Line> const&,
-                                    LengthType pTo) const override {
-      return pTo * fDensity;
-    }
+    units::si::GrammageType integratedGrammage(
+        Trajectory<Line> const&,
+        units::si::LengthType to) const override;
 
-    LengthType ArclengthFromGrammage(corsika::Trajectory<corsika::Line> const&,
-                                     GrammageType pGrammage) const override {
-      return pGrammage / fDensity;
-    }
+    units::si::LengthType arclengthFromGrammage(
+        Trajectory<Line> const&,
+        units::si::GrammageType grammage) const override;
   };
 
 } // namespace corsika
+
+#include <corsika/detail/media/HomogeneousMedium.inl>