diff --git a/Environment/DensityFunction.h b/Environment/DensityFunction.h
index a374c34796b5e507ee8b86e5cd0b65712e83a66a..943410afc2a40226de94f9efac61c00af86ab225 100644
--- a/Environment/DensityFunction.h
+++ b/Environment/DensityFunction.h
@@ -18,10 +18,11 @@
 
 namespace corsika::environment {
 
-  template <class TDerivableRho>
-  // TODO make LinearApproximator a template parameter to facilitate exchangability
-  class DensityFunction : public LinearApproximator<DensityFunction<TDerivableRho>> {
-    friend class LinearApproximator<DensityFunction<TDerivableRho>>;
+  template <class TDerivableRho,
+            template <typename> class TApproximator = LinearApproximator>
+  class DensityFunction
+      : public TApproximator<DensityFunction<TDerivableRho, TApproximator>> {
+    friend class TApproximator<DensityFunction<TDerivableRho, TApproximator>>;
 
     TDerivableRho fRho; //!< functor for density