diff --git a/MaterialLib/SolidModels/Ehlers.cpp b/MaterialLib/SolidModels/Ehlers.cpp
index 2cda03b5f9d2ec6f0171092093526a12cba008ac..42c453e6162bd3c0105cd5ee3c04c0c5f12c58cb 100644
--- a/MaterialLib/SolidModels/Ehlers.cpp
+++ b/MaterialLib/SolidModels/Ehlers.cpp
@@ -468,6 +468,40 @@ splitSolutionVector(ResidualVector const& solution)
         solution[size * 2 + 2]);
 }
 
+template <int DisplacementDim>
+SolidEhlers<DisplacementDim>::SolidEhlers(
+    NumLib::NewtonRaphsonSolverParameters nonlinear_solver_parameters,
+    MaterialPropertiesParameters material_properties,
+    std::unique_ptr<DamagePropertiesParameters>&& damage_properties,
+    TangentType tangent_type)
+    : _nonlinear_solver_parameters(std::move(nonlinear_solver_parameters)),
+      _mp(std::move(material_properties)),
+      _damage_properties(std::move(damage_properties)),
+      _tangent_type(tangent_type)
+{
+}
+
+template <int DisplacementDim>
+double SolidEhlers<DisplacementDim>::computeFreeEnergyDensity(
+    double const /*t*/,
+    ProcessLib::SpatialPosition const& /*x*/,
+    double const /*dt*/,
+    KelvinVector const& eps,
+    KelvinVector const& sigma,
+    typename MechanicsBase<DisplacementDim>::MaterialStateVariables const&
+        material_state_variables) const
+{
+    assert(dynamic_cast<StateVariables<DisplacementDim> const*>(
+               &material_state_variables) != nullptr);
+
+    auto const& eps_p = static_cast<StateVariables<DisplacementDim> const&>(
+                            material_state_variables)
+                            .eps_p;
+    using Invariants = MathLib::KelvinVector::Invariants<KelvinVectorSize>;
+    auto const& identity2 = Invariants::identity2;
+    return (eps - eps_p.D - eps_p.V / 3 * identity2).dot(sigma) / 2;
+}
+
 template <int DisplacementDim>
 boost::optional<std::tuple<typename SolidEhlers<DisplacementDim>::KelvinVector,
                            std::unique_ptr<typename MechanicsBase<
diff --git a/MaterialLib/SolidModels/Ehlers.h b/MaterialLib/SolidModels/Ehlers.h
index 22575ca2ef39d686336f968a4211326c4b234787..5121c31c99eacfe2c55985d2e31e28d6b91ecfa1 100644
--- a/MaterialLib/SolidModels/Ehlers.h
+++ b/MaterialLib/SolidModels/Ehlers.h
@@ -297,17 +297,11 @@ public:
         MathLib::KelvinVector::KelvinMatrixType<DisplacementDim>;
 
 public:
-    explicit SolidEhlers(
+    SolidEhlers(
         NumLib::NewtonRaphsonSolverParameters nonlinear_solver_parameters,
         MaterialPropertiesParameters material_properties,
         std::unique_ptr<DamagePropertiesParameters>&& damage_properties,
-        TangentType tangent_type)
-        : _nonlinear_solver_parameters(std::move(nonlinear_solver_parameters)),
-          _mp(std::move(material_properties)),
-          _damage_properties(std::move(damage_properties)),
-          _tangent_type(tangent_type)
-    {
-    }
+        TangentType tangent_type);
 
     double computeFreeEnergyDensity(
         double const /*t*/,
@@ -316,18 +310,7 @@ public:
         KelvinVector const& eps,
         KelvinVector const& sigma,
         typename MechanicsBase<DisplacementDim>::MaterialStateVariables const&
-            material_state_variables) const override
-    {
-        assert(dynamic_cast<StateVariables<DisplacementDim> const*>(
-                   &material_state_variables) != nullptr);
-
-        auto const& eps_p = static_cast<StateVariables<DisplacementDim> const&>(
-                                material_state_variables)
-                                .eps_p;
-        using Invariants = MathLib::KelvinVector::Invariants<KelvinVectorSize>;
-        auto const& identity2 = Invariants::identity2;
-        return (eps - eps_p.D - eps_p.V / 3 * identity2).dot(sigma) / 2;
-    }
+            material_state_variables) const override;
 
     boost::optional<std::tuple<KelvinVector,
                                std::unique_ptr<typename MechanicsBase<