diff --git a/ProcessLib/ThermoRichardsMechanics/CMakeLists.txt b/ProcessLib/ThermoRichardsMechanics/CMakeLists.txt
index cb894af067910371834922577c59481860815c24..a76b69a84f6ba5180951910d0ac328eaf8b485b8 100644
--- a/ProcessLib/ThermoRichardsMechanics/CMakeLists.txt
+++ b/ProcessLib/ThermoRichardsMechanics/CMakeLists.txt
@@ -1,5 +1,7 @@
 get_source_files(SOURCES)
-append_source_files(SOURCES Constitutive)
+
+append_source_files(SOURCES ConstitutiveCommon)
+append_source_files(SOURCES ConstitutiveOriginal)
 
 ogs_add_library(ThermoRichardsMechanics ${SOURCES})
 target_link_libraries(
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqU.cpp b/ProcessLib/ThermoRichardsMechanics/Constitutive/EqU.cpp
deleted file mode 100644
index c000147075bfa27bb7979ee3219b45a72372cf5f..0000000000000000000000000000000000000000
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqU.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * \file
- * \copyright
- * Copyright (c) 2012-2022, OpenGeoSys Community (http://www.opengeosys.org)
- *            Distributed under a Modified BSD License.
- *              See accompanying file LICENSE.txt or
- *              http://www.opengeosys.org/project/license
- *
- */
-
-#include "EqU.h"
-
-namespace ProcessLib::ThermoRichardsMechanics
-{
-template <int DisplacementDim>
-void EqUModel<DisplacementDim>::eval(
-    CapillaryPressureData<DisplacementDim> const& p_cap_data,
-    SaturationDataDeriv const& dS_L_data,
-    BiotData const& biot_data,
-    BishopsData const& bishops_data,
-    LiquidDensityData const& rho_L_data,
-    PorosityData const& poro_data,
-    EqUData<DisplacementDim>& out) const
-{
-    out.J_up_X_BTI2N =
-        -biot_data.alpha *
-        (bishops_data.chi_S_L +
-         bishops_data.dchi_dS_L * p_cap_data.p_cap * dS_L_data.dS_L_dp_cap);
-
-    out.J_up_HT_V_N =
-        poro_data.phi * rho_L_data.rho_LR * dS_L_data.dS_L_dp_cap * b_;
-}
-
-template struct EqUModel<2>;
-template struct EqUModel<3>;
-}  // namespace ProcessLib::ThermoRichardsMechanics
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqU.h b/ProcessLib/ThermoRichardsMechanics/Constitutive/EqU.h
deleted file mode 100644
index 05c1e8df1276af259706b4a95c88ddfb9c293c0f..0000000000000000000000000000000000000000
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqU.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * \file
- * \copyright
- * Copyright (c) 2012-2022, OpenGeoSys Community (http://www.opengeosys.org)
- *            Distributed under a Modified BSD License.
- *              See accompanying file LICENSE.txt or
- *              http://www.opengeosys.org/project/license
- *
- */
-
-#pragma once
-
-#include "LiquidDensity.h"
-#include "Porosity.h"
-#include "Saturation.h"
-
-namespace ProcessLib::ThermoRichardsMechanics
-{
-template <int DisplacementDim>
-struct EqUData
-{
-    GlobalDimVector<DisplacementDim> J_up_HT_V_N = DVnan<DisplacementDim>();
-    double J_up_X_BTI2N = nan;
-};
-
-template <int DisplacementDim>
-struct EqUModel
-{
-    explicit EqUModel(
-        Eigen::Vector<double, DisplacementDim> const& specific_body_force)
-        : b_(specific_body_force)
-    {
-    }
-
-    void eval(CapillaryPressureData<DisplacementDim> const& p_cap_data,
-              SaturationDataDeriv const& dS_L_data,
-              BiotData const& biot_data,
-              BishopsData const& bishops_data,
-              LiquidDensityData const& rho_L_data,
-              PorosityData const& poro_data,
-              EqUData<DisplacementDim>& out) const;
-
-private:
-    /// Gravity vector (specific body force).
-    Eigen::Vector<double, DisplacementDim> const b_;
-};
-
-extern template struct EqUModel<2>;
-extern template struct EqUModel<3>;
-}  // namespace ProcessLib::ThermoRichardsMechanics
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidCompressibility.cpp b/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidCompressibility.cpp
deleted file mode 100644
index aa93d1ad61e9d67372b52ef66223f70bc43698a8..0000000000000000000000000000000000000000
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidCompressibility.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * \file
- * \copyright
- * Copyright (c) 2012-2022, OpenGeoSys Community (http://www.opengeosys.org)
- *            Distributed under a Modified BSD License.
- *              See accompanying file LICENSE.txt or
- *              http://www.opengeosys.org/project/license
- *
- */
-
-#include "SolidCompressibility.h"
-
-namespace ProcessLib::ThermoRichardsMechanics
-{
-template <int DisplacementDim>
-void SolidCompressibilityModel<DisplacementDim>::eval(
-    const SpaceTimeData& x_t,
-    const BiotData& biot_data,
-    const ElasticTangentStiffnessData<DisplacementDim>& C_el_data,
-    SolidCompressibilityData& out) const
-{
-    out.beta_SR = (1 - biot_data.alpha) /
-                  solid_material_.getBulkModulus(x_t.t, x_t.x, &C_el_data.C_el);
-}
-
-template struct SolidCompressibilityModel<2>;
-template struct SolidCompressibilityModel<3>;
-
-}  // namespace ProcessLib::ThermoRichardsMechanics
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Base.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Base.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Base.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Base.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Biot.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Biot.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Biot.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Biot.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Biot.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Biot.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Biot.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Biot.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Bishops.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Bishops.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Bishops.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Bishops.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Bishops.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Bishops.h
similarity index 97%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Bishops.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Bishops.h
index da4dd9bef043a558d81df8145226cc2df3e2c3ce..fc93022afe8e7ae67f507030191a812f9d863902 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/Bishops.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Bishops.h
@@ -10,6 +10,7 @@
 
 #pragma once
 
+#include "Base.h"
 #include "Saturation.h"
 
 namespace ProcessLib::ThermoRichardsMechanics
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/DarcyLaw.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/DarcyLaw.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/DarcyLaw.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.h
similarity index 96%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/DarcyLaw.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.h
index 1fc24f14182eafb0ef1034f51f1d7d1a955b062f..9f584b208ae86ac4d541e813a1b1256b0343b273 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/DarcyLaw.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.h
@@ -11,7 +11,8 @@
 #pragma once
 
 #include "LiquidDensity.h"
-#include "Permeability.h"
+#include "LiquidViscosity.h"
+#include "PermeabilityData.h"
 #include "ThermoOsmosis.h"
 
 namespace ProcessLib::ThermoRichardsMechanics
diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ElasticTangentStiffnessData.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ElasticTangentStiffnessData.h
new file mode 100644
index 0000000000000000000000000000000000000000..ed360ae83d1d601eaccf37c930d7db0ece1bd03e
--- /dev/null
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ElasticTangentStiffnessData.h
@@ -0,0 +1,22 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2022, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#pragma once
+
+#include "Base.h"
+
+namespace ProcessLib::ThermoRichardsMechanics
+{
+template <int DisplacementDim>
+struct ElasticTangentStiffnessData
+{
+    KelvinMatrix<DisplacementDim> C_el;
+};
+}  // namespace ProcessLib::ThermoRichardsMechanics
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqP.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/EqP.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqP.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.h
similarity index 98%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/EqP.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.h
index 67bde1b24e3930ba8c8696e5545094025cd64202..e52e1b1426891db1b0a7f002eb9d3707bce66ed9 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqP.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.h
@@ -13,7 +13,7 @@
 #include "Biot.h"
 #include "FluidThermalExpansion.h"
 #include "LiquidDensity.h"
-#include "Permeability.h"
+#include "PermeabilityData.h"
 #include "Saturation.h"
 #include "TRMStorage.h"
 #include "TRMVaporDiffusion.h"
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqT.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqT.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/EqT.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqT.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/EqT.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqT.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/EqT.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqT.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/FluidThermalExpansion.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/FluidThermalExpansion.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/FluidThermalExpansion.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/FluidThermalExpansion.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/FluidThermalExpansion.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/FluidThermalExpansion.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/FluidThermalExpansion.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/FluidThermalExpansion.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Gravity.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.cpp
similarity index 68%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Gravity.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.cpp
index a1b8db53098dd4d962fe953e88841f09302b2535..cad9183ab6c325e687c46f534ccb799bfabe9066 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/Gravity.cpp
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.cpp
@@ -14,10 +14,9 @@ namespace ProcessLib::ThermoRichardsMechanics
 {
 template <int DisplacementDim>
 void GravityModel<DisplacementDim>::eval(
-    PorosityData const& poro_data,
-    SolidDensityData const& rho_S_data,
-    LiquidDensityData const& rho_L_data,
-    SaturationData const& S_L_data,
+    PorosityData const& poro_data, SolidDensityData const& rho_S_data,
+    LiquidDensityData const& rho_L_data, SaturationData const& S_L_data,
+    SaturationDataDeriv const& dS_L_data,
     GravityData<DisplacementDim>& out) const
 {
     auto const rho_SR = rho_S_data.rho_SR;
@@ -28,6 +27,11 @@ void GravityModel<DisplacementDim>::eval(
 
     double const rho = rho_SR * (1 - phi) + S_L * phi * rho_LR;
     out.volumetric_body_force = rho * b;
+
+    // There is no minus in the Jacobian block, because volumetric_body_force is
+    // subtracted from the residual vector.
+    out.J_up_HT_V_N =
+        poro_data.phi * rho_L_data.rho_LR * dS_L_data.dS_L_dp_cap * b;
 }
 
 template struct GravityModel<2>;
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Gravity.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.h
similarity index 87%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Gravity.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.h
index 0f17831fb92861af1361ff0744337b94d50695a9..5100d4803d519d05e16549fcd3ee45890d6a93aa 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/Gravity.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.h
@@ -19,7 +19,8 @@ namespace ProcessLib::ThermoRichardsMechanics
 template <int DisplacementDim>
 struct GravityData
 {
-    Eigen::Vector<double, DisplacementDim> volumetric_body_force;
+    GlobalDimVector<DisplacementDim> volumetric_body_force;
+    GlobalDimVector<DisplacementDim> J_up_HT_V_N;
 };
 
 template <int DisplacementDim>
@@ -35,6 +36,7 @@ struct GravityModel
               SolidDensityData const& rho_S_data,
               LiquidDensityData const& rho_L_data,
               SaturationData const& S_L_data,
+              SaturationDataDeriv const& dS_L_data,
               GravityData<DisplacementDim>& out) const;
 
 private:
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidDensity.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidDensity.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidDensity.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidDensity.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidDensity.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidDensity.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidDensity.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidDensity.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidViscosity.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidViscosity.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidViscosity.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidViscosity.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidViscosity.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidViscosity.h
similarity index 93%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidViscosity.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidViscosity.h
index 6ccdcd370ac95548118a175fa6e2ea0737153291..ac31025f2abde84d04088f2458886ea32b7f6e81 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/LiquidViscosity.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidViscosity.h
@@ -10,7 +10,7 @@
 
 #pragma once
 
-#include "ProcessLib/ThermoRichardsMechanics/Constitutive/Base.h"
+#include "Base.h"
 
 namespace ProcessLib::ThermoRichardsMechanics
 {
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/MaterialState.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/MaterialState.h
similarity index 58%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/MaterialState.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/MaterialState.h
index a09fd202f1c2f96b736df24adaa7ba5c55d7e235..2cb6cdfceb7321cf41c54d860c707c3eefe192a3 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/MaterialState.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/MaterialState.h
@@ -15,20 +15,19 @@
 namespace ProcessLib::ThermoRichardsMechanics
 {
 template <int DisplacementDim>
-struct MaterialStateData
+class MaterialStateData
 {
-    explicit MaterialStateData(
-        MaterialLib::Solids::MechanicsBase<DisplacementDim> const&
-            solid_material)
-        : material_state_variables(
-              solid_material.createMaterialStateVariables())
+    using MSV = typename MaterialLib::Solids::MechanicsBase<
+        DisplacementDim>::MaterialStateVariables;
+
+public:
+    explicit MaterialStateData(std::unique_ptr<MSV>&& material_state_variables)
+        : material_state_variables(std::move(material_state_variables))
     {
     }
 
     void pushBackState() { material_state_variables->pushBackState(); }
 
-    std::unique_ptr<typename MaterialLib::Solids::MechanicsBase<
-        DisplacementDim>::MaterialStateVariables>
-        material_state_variables;
+    std::unique_ptr<MSV> material_state_variables;
 };
 }  // namespace ProcessLib::ThermoRichardsMechanics
diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityData.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityData.h
new file mode 100644
index 0000000000000000000000000000000000000000..b43cf3bed32c0627f3cce0954fef2da8d2bdbcc6
--- /dev/null
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityData.h
@@ -0,0 +1,24 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2022, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#pragma once
+
+#include "Base.h"
+
+namespace ProcessLib::ThermoRichardsMechanics
+{
+template <int DisplacementDim>
+struct PermeabilityData
+{
+    double k_rel;
+    double dk_rel_dS_L;
+    GlobalDimMatrix<DisplacementDim> Ki_over_mu;
+};
+}  // namespace ProcessLib::ThermoRichardsMechanics
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Porosity.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Porosity.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Porosity.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Porosity.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Saturation.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Saturation.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Saturation.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Saturation.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Saturation.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Saturation.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Saturation.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Saturation.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidCompressibility.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidCompressibility.h
similarity index 62%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidCompressibility.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidCompressibility.h
index 692ef81ac4cc942a6dfbac8105ef201015408f01..ea0331b1a8cf1b1da3269d0ca32ef94b98194a6f 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidCompressibility.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidCompressibility.h
@@ -11,7 +11,7 @@
 #pragma once
 
 #include "Biot.h"
-#include "ElasticTangentStiffness.h"
+#include "ElasticTangentStiffnessData.h"
 
 namespace ProcessLib::ThermoRichardsMechanics
 {
@@ -20,12 +20,10 @@ struct SolidCompressibilityData
     double beta_SR;
 };
 
-template <int DisplacementDim>
+template <int DisplacementDim, typename SolidMaterial>
 struct SolidCompressibilityModel
 {
-    explicit SolidCompressibilityModel(
-        MaterialLib::Solids::MechanicsBase<DisplacementDim> const&
-            solid_material)
+    explicit SolidCompressibilityModel(SolidMaterial const& solid_material)
         : solid_material_(solid_material)
     {
     }
@@ -33,12 +31,14 @@ struct SolidCompressibilityModel
     void eval(SpaceTimeData const& x_t,
               BiotData const& biot_data,
               ElasticTangentStiffnessData<DisplacementDim> const& C_el_data,
-              SolidCompressibilityData& out) const;
+              SolidCompressibilityData& out) const
+    {
+        out.beta_SR =
+            (1 - biot_data.alpha) /
+            solid_material_.getBulkModulus(x_t.t, x_t.x, &C_el_data.C_el);
+    }
 
 private:
-    MaterialLib::Solids::MechanicsBase<DisplacementDim> const& solid_material_;
+    SolidMaterial const& solid_material_;
 };
-
-extern template struct SolidCompressibilityModel<2>;
-extern template struct SolidCompressibilityModel<3>;
 }  // namespace ProcessLib::ThermoRichardsMechanics
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidDensity.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidDensity.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidDensity.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidDensity.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidDensity.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidDensity.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidDensity.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidDensity.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidThermalExpansion.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidThermalExpansion.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidThermalExpansion.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidThermalExpansion.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidThermalExpansion.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidThermalExpansion.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidThermalExpansion.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidThermalExpansion.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Swelling.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Swelling.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Swelling.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.h
similarity index 96%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Swelling.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.h
index 54091d39898e7329a46e1322bbf4c384924035b3..ca44e96e572f16e11e3168dbb6ad9a352c24bfdb 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/Swelling.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.h
@@ -10,8 +10,7 @@
 
 #pragma once
 
-#include "ElasticTangentStiffness.h"
-#include "MathLib/KelvinVector.h"
+#include "ElasticTangentStiffnessData.h"
 #include "Saturation.h"
 
 namespace ProcessLib::ThermoRichardsMechanics
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMHeatStorageAndFlux.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/TRMHeatStorageAndFlux.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMHeatStorageAndFlux.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.h
similarity index 98%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/TRMHeatStorageAndFlux.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.h
index f2f92242bca3e9fce0e419fbbf49531d2cfea6b4..e9c29b2f4ab7b462736a8790363465d14e11d1f8 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMHeatStorageAndFlux.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.h
@@ -12,7 +12,7 @@
 
 #include "DarcyLaw.h"
 #include "LiquidDensity.h"
-#include "Permeability.h"
+#include "PermeabilityData.h"
 #include "Porosity.h"
 #include "SolidDensity.h"
 
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMStorage.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMStorage.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/TRMStorage.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMStorage.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMStorage.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMStorage.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/TRMStorage.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMStorage.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMVaporDiffusion.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMVaporDiffusion.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/TRMVaporDiffusion.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMVaporDiffusion.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/TRMVaporDiffusion.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMVaporDiffusion.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/TRMVaporDiffusion.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMVaporDiffusion.h
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/ThermoOsmosis.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ThermoOsmosis.cpp
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/ThermoOsmosis.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ThermoOsmosis.cpp
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/ThermoOsmosis.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ThermoOsmosis.h
similarity index 100%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/ThermoOsmosis.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ThermoOsmosis.h
diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveData.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveData.h
new file mode 100644
index 0000000000000000000000000000000000000000..12b3a841d77aef2efdb0bb5d384591da5ab45526
--- /dev/null
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveData.h
@@ -0,0 +1,104 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2022, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#pragma once
+
+#include "ProcessLib/Reflection/ReflectionData.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqT.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Saturation.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidDensity.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMStorage.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMVaporDiffusion.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.h"
+
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
+{
+/// Data whose state must be tracked by the TRM process.
+template <int DisplacementDim>
+struct StatefulData
+{
+    SaturationData S_L_data;
+    PorosityData poro_data;
+    TransportPorosityData transport_poro_data;
+    StrainData<DisplacementDim> eps_data;
+    SwellingDataStateful<DisplacementDim> swelling_data;
+    SolidMechanicsDataStateful<DisplacementDim> s_mech_data;
+
+    static auto reflect()
+    {
+        using Self = StatefulData<DisplacementDim>;
+
+        return Reflection::reflectWithoutName(&Self::S_L_data,
+                                              &Self::poro_data,
+                                              &Self::transport_poro_data,
+                                              &Self::eps_data,
+                                              &Self::swelling_data,
+                                              &Self::s_mech_data);
+    }
+};
+
+/// Data that is needed for output purposes, but not directly for the assembly.
+template <int DisplacementDim>
+struct OutputData
+{
+    DarcyLawData<DisplacementDim> darcy_data;
+    LiquidDensityData rho_L_data;
+    LiquidViscosityData mu_L_data;
+    SolidDensityData rho_S_data;
+
+    static auto reflect()
+    {
+        using Self = OutputData<DisplacementDim>;
+
+        return Reflection::reflectWithoutName(&Self::darcy_data,
+                                              &Self::rho_L_data,
+                                              &Self::mu_L_data,
+                                              &Self::rho_S_data);
+    }
+};
+
+/// Data that is needed for the equation system assembly.
+template <int DisplacementDim>
+struct ConstitutiveData
+{
+    SolidMechanicsDataStateless<DisplacementDim> s_mech_data;
+    GravityData<DisplacementDim> grav_data;
+    TRMHeatStorageAndFluxData<DisplacementDim> heat_data;
+    TRMVaporDiffusionData<DisplacementDim> vap_data;
+    TRMStorageData storage_data;
+    EqPData<DisplacementDim> eq_p_data;
+    EqTData<DisplacementDim> eq_T_data;
+    ThermoOsmosisData<DisplacementDim> th_osmosis_data;
+};
+
+/// Data that stores intermediate values, which are not needed outside the
+/// constitutive setting.
+template <int DisplacementDim>
+struct ConstitutiveTempData
+{
+    SwellingDataStateless<DisplacementDim> swelling_data;
+    ElasticTangentStiffnessData<DisplacementDim> C_el_data;
+    BiotData biot_data;
+    SolidCompressibilityData solid_compressibility_data;
+    SaturationDataDeriv dS_L_data;
+    BishopsData bishops_data;
+    // TODO why not usual state tracking for that?
+    BishopsData bishops_data_prev;
+    SolidThermalExpansionData<DisplacementDim> s_therm_exp_data;
+    PermeabilityData<DisplacementDim> perm_data;
+    FluidThermalExpansionData f_therm_exp_data;
+};
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveModels.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveModels.h
new file mode 100644
index 0000000000000000000000000000000000000000..1b3676853c531c6d1ef099f344fe80060041d649
--- /dev/null
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveModels.h
@@ -0,0 +1,70 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2022, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#pragma once
+
+#include "ElasticTangentStiffnessModel.h"
+#include "PermeabilityModel.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/DarcyLaw.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqP.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/EqT.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/FluidThermalExpansion.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Gravity.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidDensity.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMHeatStorageAndFlux.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMStorage.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/TRMVaporDiffusion.h"
+
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
+{
+/// Constitutive models used for assembly.
+template <int DisplacementDim>
+struct ConstitutiveModels
+{
+    template <typename TRMProcessData>
+    explicit ConstitutiveModels(
+        TRMProcessData const& process_data,
+        SolidConstitutiveRelation<DisplacementDim> const& solid_material)
+        : elastic_tangent_stiffness_model(solid_material),
+          solid_compressibility_model(solid_material),
+          s_mech_model(solid_material),
+          grav_model(process_data.specific_body_force),
+          darcy_model(process_data.specific_body_force),
+          eq_p_model(process_data.specific_body_force)
+    {
+    }
+
+    ElasticTangentStiffnessModel<DisplacementDim>
+        elastic_tangent_stiffness_model;
+    BiotModel biot_model;
+    SolidCompressibilityModel<DisplacementDim,
+                              SolidConstitutiveRelation<DisplacementDim>>
+        solid_compressibility_model;
+    SaturationModel<DisplacementDim> S_L_model;
+    BishopsModel bishops_model;
+    PorosityModel<DisplacementDim> poro_model;
+    SwellingModel<DisplacementDim> swelling_model;
+    SolidThermalExpansionModel<DisplacementDim> s_therm_exp_model;
+    SolidMechanicsModel<DisplacementDim> s_mech_model;
+    LiquidDensityModel<DisplacementDim> rho_L_model;
+    SolidDensityModel<DisplacementDim> rho_S_model;
+    GravityModel<DisplacementDim> grav_model;
+    LiquidViscosityModel<DisplacementDim> mu_L_model;
+    PermeabilityModel<DisplacementDim> perm_model;
+    DarcyLawModel<DisplacementDim> darcy_model;
+    TRMHeatStorageAndFluxModel<DisplacementDim> heat_storage_and_flux_model;
+    TRMVaporDiffusionModel<DisplacementDim> vapor_diffusion_model;
+    FluidThermalExpansionModel<DisplacementDim> f_therm_exp_model;
+    TRMStorageModel<DisplacementDim> storage_model;
+    EqPModel<DisplacementDim> eq_p_model;
+    EqTModel<DisplacementDim> eq_T_model;
+    ThermoOsmosisModel<DisplacementDim> th_osmosis_model;
+};
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.cpp
similarity index 94%
rename from ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.cpp
index 3439ae15cc3ae22223a199269ea5f05ba2d34969..34ccac3a66f77d5384cbe1bd560a5f04bf900848 100644
--- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.cpp
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.cpp
@@ -10,7 +10,7 @@
 
 #include "ConstitutiveSetting.h"
 
-namespace ProcessLib::ThermoRichardsMechanics
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
 {
 template <int DisplacementDim>
 void ConstitutiveSetting<DisplacementDim>::eval(
@@ -43,7 +43,7 @@ void ConstitutiveSetting<DisplacementDim>::eval(
     auto& darcy_data = out.darcy_data;
     auto& f_therm_exp_data = tmp.f_therm_exp_data;
 
-    auto& swelling_data = cd.swelling_data;
+    auto& swelling_data = tmp.swelling_data;
     auto& s_mech_data = cd.s_mech_data;
     auto& grav_data = cd.grav_data;
     auto& heat_data = cd.heat_data;
@@ -100,7 +100,7 @@ void ConstitutiveSetting<DisplacementDim>::eval(
 
     models.s_mech_model.eval(
         x_t, s_therm_exp_data, swelling_data, T_data, p_cap_data, biot_data,
-        bishops_data, state.eps_data,
+        bishops_data, dS_L_data, state.eps_data,
         prev_state.eps_data /* TODO why is eps stateful? */, mat_state,
         prev_state.s_mech_data, state.s_mech_data, s_mech_data);
 
@@ -118,10 +118,7 @@ void ConstitutiveSetting<DisplacementDim>::eval(
     models.rho_S_model.eval(x_t, media_data, poro_data, T_data, rho_S_data);
 
     models.grav_model.eval(poro_data, rho_S_data, rho_L_data, S_L_data,
-                           grav_data);
-
-    models.eq_u_model.eval(p_cap_data, dS_L_data, biot_data, bishops_data,
-                           rho_L_data, poro_data, cd.eq_u_data);
+                           dS_L_data, grav_data);
 
     models.mu_L_model.eval(x_t, media_data, T_data, mu_L_data);
 
@@ -166,4 +163,4 @@ void ConstitutiveSetting<DisplacementDim>::eval(
 template struct ConstitutiveSetting<2>;
 template struct ConstitutiveSetting<3>;
 
-}  // namespace ProcessLib::ThermoRichardsMechanics
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.h
new file mode 100644
index 0000000000000000000000000000000000000000..1d1db6c1fb665d01b3f4baa03c603eb99c348418
--- /dev/null
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ConstitutiveSetting.h
@@ -0,0 +1,63 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2022, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#pragma once
+
+#include "ConstitutiveData.h"
+#include "ConstitutiveModels.h"
+
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
+{
+template <int DisplacementDim>
+struct ConstitutiveSetting
+{
+    /// Evaluate the constitutive setting.
+    void eval(ConstitutiveModels<DisplacementDim>& models, double const t,
+              double const dt, ParameterLib::SpatialPosition const& x_position,
+              MaterialPropertyLib::Medium& medium,
+              TemperatureData<DisplacementDim> const& T_data,
+              CapillaryPressureData<DisplacementDim> const& p_cap_data,
+              KelvinVector<DisplacementDim> const& eps_arg,
+              KelvinVector<DisplacementDim> const& eps_prev_arg,
+              StatefulData<DisplacementDim>& state,
+              StatefulData<DisplacementDim> const& prev_state,
+              MaterialStateData<DisplacementDim>& mat_state,
+              ConstitutiveTempData<DisplacementDim>& tmp,
+              OutputData<DisplacementDim>& out,
+              ConstitutiveData<DisplacementDim>& cd);
+
+    static KelvinVector<DisplacementDim> const& totalStress(
+        ConstitutiveData<DisplacementDim> const& cd,
+        StatefulData<DisplacementDim> const& /*state*/)
+    {
+        return cd.s_mech_data.sigma_total;
+    }
+    static KelvinVector<DisplacementDim>& totalStress(
+        ConstitutiveData<DisplacementDim>& cd,
+        StatefulData<DisplacementDim>& /*state*/)
+    {
+        return cd.s_mech_data.sigma_total;
+    }
+
+    static KelvinVector<DisplacementDim> const& statefulStress(
+        StatefulData<DisplacementDim> const& state)
+    {
+        return state.s_mech_data.sigma_eff;
+    }
+    static KelvinVector<DisplacementDim>& statefulStress(
+        StatefulData<DisplacementDim>& state)
+    {
+        return state.s_mech_data.sigma_eff;
+    }
+};
+
+extern template struct ConstitutiveSetting<2>;
+extern template struct ConstitutiveSetting<3>;
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/ElasticTangentStiffness.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ElasticTangentStiffnessModel.cpp
similarity index 89%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/ElasticTangentStiffness.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ElasticTangentStiffnessModel.cpp
index cc330a575c7235f8f31fa6393ae39110fdbfb333..a7f462c1ea895af7b31cb496f09aeda820242da4 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/ElasticTangentStiffness.cpp
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ElasticTangentStiffnessModel.cpp
@@ -8,11 +8,11 @@
  *
  */
 
-#include "ElasticTangentStiffness.h"
+#include "ElasticTangentStiffnessModel.h"
 
 #include "MaterialLib/MPL/Utils/FormEigenTensor.h"
 
-namespace ProcessLib::ThermoRichardsMechanics
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
 {
 template <int DisplacementDim>
 void ElasticTangentStiffnessModel<DisplacementDim>::eval(
@@ -51,4 +51,4 @@ void ElasticTangentStiffnessModel<DisplacementDim>::eval(
 
 template struct ElasticTangentStiffnessModel<2>;
 template struct ElasticTangentStiffnessModel<3>;
-}  // namespace ProcessLib::ThermoRichardsMechanics
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/ElasticTangentStiffness.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ElasticTangentStiffnessModel.h
similarity index 61%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/ElasticTangentStiffness.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ElasticTangentStiffnessModel.h
index fe749935a619350598191e0d5bd2422aaf415f44..bcfd26de1e523248b5e8d162f00dea68378a1f0f 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/ElasticTangentStiffness.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/ElasticTangentStiffnessModel.h
@@ -10,23 +10,17 @@
 
 #pragma once
 
-#include "Base.h"
-#include "MaterialLib/SolidModels/MechanicsBase.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Base.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/ElasticTangentStiffnessData.h"
+#include "TraitsBase.h"
 
-namespace ProcessLib::ThermoRichardsMechanics
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
 {
-template <int DisplacementDim>
-struct ElasticTangentStiffnessData
-{
-    KelvinMatrix<DisplacementDim> C_el;
-};
-
 template <int DisplacementDim>
 struct ElasticTangentStiffnessModel
 {
     explicit ElasticTangentStiffnessModel(
-        MaterialLib::Solids::MechanicsBase<DisplacementDim> const&
-            solid_material)
+        SolidConstitutiveRelation<DisplacementDim> const& solid_material)
         : solid_material_(solid_material)
     {
     }
@@ -36,9 +30,9 @@ struct ElasticTangentStiffnessModel
               ElasticTangentStiffnessData<DisplacementDim>& out) const;
 
 private:
-    MaterialLib::Solids::MechanicsBase<DisplacementDim> const& solid_material_;
+    SolidConstitutiveRelation<DisplacementDim> const& solid_material_;
 };
 
 extern template struct ElasticTangentStiffnessModel<2>;
 extern template struct ElasticTangentStiffnessModel<3>;
-}  // namespace ProcessLib::ThermoRichardsMechanics
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/PermeabilityModel.cpp
similarity index 96%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/PermeabilityModel.cpp
index 03f4229158df7866cfa3cdb7c6f56efa9bdf7f99..4c17578ddb4c9f824ba77459403803ed11f6f92e 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.cpp
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/PermeabilityModel.cpp
@@ -8,11 +8,11 @@
  *
  */
 
-#include "Permeability.h"
+#include "PermeabilityModel.h"
 
 #include "MaterialLib/MPL/Utils/FormEigenTensor.h"
 
-namespace ProcessLib::ThermoRichardsMechanics
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
 {
 template <int DisplacementDim>
 void PermeabilityModel<DisplacementDim>::eval(
@@ -106,4 +106,4 @@ void PermeabilityModel<DisplacementDim>::eval(
 
 template struct PermeabilityModel<2>;
 template struct PermeabilityModel<3>;
-}  // namespace ProcessLib::ThermoRichardsMechanics
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/PermeabilityModel.h
similarity index 78%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/PermeabilityModel.h
index ae3eb3c5b52e33337595fdd38498e81b5781b94b..7e5364f9243c290afd08d774afd2978517cb8055 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/Permeability.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/PermeabilityModel.h
@@ -10,20 +10,13 @@
 
 #pragma once
 
-#include "LiquidViscosity.h"
-#include "Porosity.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/LiquidViscosity.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/PermeabilityData.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Porosity.h"
 #include "SolidMechanics.h"
 
-namespace ProcessLib::ThermoRichardsMechanics
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
 {
-template <int DisplacementDim>
-struct PermeabilityData
-{
-    double k_rel;
-    double dk_rel_dS_L;
-    GlobalDimMatrix<DisplacementDim> Ki_over_mu;
-};
-
 template <int DisplacementDim>
 struct PermeabilityModel
 {
@@ -46,4 +39,4 @@ struct PermeabilityModel
 
 extern template struct PermeabilityModel<2>;
 extern template struct PermeabilityModel<3>;
-}  // namespace ProcessLib::ThermoRichardsMechanics
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidMechanics.cpp b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.cpp
similarity index 82%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidMechanics.cpp
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.cpp
index 5a966d944fdf0bf8492d79082aab26f0c2db94c4..9574cd3ccef1153daf404bd64329cff8bb8e33a9 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidMechanics.cpp
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.cpp
@@ -10,7 +10,7 @@
 
 #include "SolidMechanics.h"
 
-namespace ProcessLib::ThermoRichardsMechanics
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
 {
 template <int DisplacementDim>
 void SolidMechanicsModel<DisplacementDim>::eval(
@@ -21,6 +21,7 @@ void SolidMechanicsModel<DisplacementDim>::eval(
     CapillaryPressureData<DisplacementDim> const& p_cap_data,
     BiotData const& biot_data,
     BishopsData const& bishops_data,
+    SaturationDataDeriv const& dS_L_data,
     StrainData<DisplacementDim> const& eps_data,
     StrainData<DisplacementDim> const& eps_prev_data,
     MaterialStateData<DisplacementDim>& mat_state,
@@ -41,6 +42,7 @@ void SolidMechanicsModel<DisplacementDim>::eval(
 
     variables.mechanical_strain.emplace<KelvinVector<DisplacementDim>>(
         current_state.eps_m);
+    variables.temperature = T_data.T;
 
     MPL::VariableArray variables_prev;
     variables_prev.stress.emplace<KelvinVector<DisplacementDim>>(
@@ -64,14 +66,22 @@ void SolidMechanicsModel<DisplacementDim>::eval(
     auto const& identity2 = MathLib::KelvinVector::Invariants<
         MathLib::KelvinVector::kelvin_vector_dimensions(
             DisplacementDim)>::identity2;
-    out.sigma_total =
+    out.sigma_total.noalias() =
         current_state.sigma_eff +
         biot_data.alpha * bishops_data.chi_S_L * p_cap_data.p_cap * identity2;
 
-    out.J_uT_BT_K_N =  // TODO is this thermal stress?
+    out.J_uT_BT_K_N.noalias() =  // TODO is this thermal stress?
         -out.stiffness_tensor *
         s_therm_exp_data.solid_linear_thermal_expansivity_vector;
 
+    double const J_up_X_BTI2N =
+        -biot_data.alpha *
+        (bishops_data.chi_S_L +
+         bishops_data.dchi_dS_L * p_cap_data.p_cap * dS_L_data.dS_L_dp_cap);
+
+    out.J_up_BT_K_N.noalias() =
+        swelling_data.J_up_BT_K_N + J_up_X_BTI2N * identity2;
+
     out.equivalent_plastic_strain =
         mat_state.material_state_variables->getEquivalentPlasticStrain();
 }
@@ -79,4 +89,4 @@ void SolidMechanicsModel<DisplacementDim>::eval(
 template struct SolidMechanicsModel<2>;
 template struct SolidMechanicsModel<3>;
 
-}  // namespace ProcessLib::ThermoRichardsMechanics
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidMechanics.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.h
similarity index 72%
rename from ProcessLib/ThermoRichardsMechanics/Constitutive/SolidMechanics.h
rename to ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.h
index ec591359a8b72c10606a7dd359f4f8ad090a5d20..f5d26f293a861ae0898166d2690aaa6106750eb1 100644
--- a/ProcessLib/ThermoRichardsMechanics/Constitutive/SolidMechanics.h
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/SolidMechanics.h
@@ -10,14 +10,14 @@
 
 #pragma once
 
-#include "Biot.h"
-#include "Bishops.h"
-#include "MaterialLib/SolidModels/MechanicsBase.h"
-#include "MaterialState.h"
-#include "SolidThermalExpansion.h"
-#include "Swelling.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Biot.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Bishops.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/MaterialState.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/SolidThermalExpansion.h"
+#include "ProcessLib/ThermoRichardsMechanics/ConstitutiveCommon/Swelling.h"
+#include "TraitsBase.h"
 
-namespace ProcessLib::ThermoRichardsMechanics
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
 {
 template <int DisplacementDim>
 struct SolidMechanicsDataStateful
@@ -42,6 +42,7 @@ struct SolidMechanicsDataStateless
     KelvinVector<DisplacementDim> sigma_total = KVnan<DisplacementDim>();
     KelvinMatrix<DisplacementDim> stiffness_tensor = KMnan<DisplacementDim>();
     KelvinVector<DisplacementDim> J_uT_BT_K_N = KVnan<DisplacementDim>();
+    KelvinVector<DisplacementDim> J_up_BT_K_N = KVnan<DisplacementDim>();
     double equivalent_plastic_strain = nan;
 };
 
@@ -49,8 +50,7 @@ template <int DisplacementDim>
 struct SolidMechanicsModel
 {
     explicit SolidMechanicsModel(
-        MaterialLib::Solids::MechanicsBase<DisplacementDim> const&
-            solid_material)
+        SolidConstitutiveRelation<DisplacementDim> const& solid_material)
         : solid_material_(solid_material)
     {
     }
@@ -63,6 +63,7 @@ struct SolidMechanicsModel
         CapillaryPressureData<DisplacementDim> const& p_cap_data,
         BiotData const& biot_data,
         BishopsData const& bishops_data,
+        SaturationDataDeriv const& dS_L_data,
         StrainData<DisplacementDim> const& eps_data,
         StrainData<DisplacementDim> const& eps_prev_data,
         MaterialStateData<DisplacementDim>& mat_state,
@@ -71,9 +72,9 @@ struct SolidMechanicsModel
         SolidMechanicsDataStateless<DisplacementDim>& out) const;
 
 private:
-    MaterialLib::Solids::MechanicsBase<DisplacementDim> const& solid_material_;
+    SolidConstitutiveRelation<DisplacementDim> const& solid_material_;
 };
 
 extern template struct SolidMechanicsModel<2>;
 extern template struct SolidMechanicsModel<3>;
-}  // namespace ProcessLib::ThermoRichardsMechanics
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/TraitsBase.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/TraitsBase.h
new file mode 100644
index 0000000000000000000000000000000000000000..661dfc907f49c4372255592546bd5feb4b3c82a3
--- /dev/null
+++ b/ProcessLib/ThermoRichardsMechanics/ConstitutiveOriginal/TraitsBase.h
@@ -0,0 +1,20 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2022, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#pragma once
+
+#include "MaterialLib/SolidModels/MechanicsBase.h"
+
+namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
+{
+template <int DisplacementDim>
+using SolidConstitutiveRelation =
+    MaterialLib::Solids::MechanicsBase<DisplacementDim>;
+}  // namespace ProcessLib::ThermoRichardsMechanics::ConstitutiveOriginal
diff --git a/ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.h b/ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.h
deleted file mode 100644
index 2df2974fdbaea1d4fa505a0833f13f7c2a1ef3c0..0000000000000000000000000000000000000000
--- a/ProcessLib/ThermoRichardsMechanics/ConstitutiveSetting.h
+++ /dev/null
@@ -1,189 +0,0 @@
-/**
- * \file
- * \copyright
- * Copyright (c) 2012-2022, OpenGeoSys Community (http://www.opengeosys.org)
- *            Distributed under a Modified BSD License.
- *              See accompanying file LICENSE.txt or
- *              http://www.opengeosys.org/project/license
- *
- */
-
-#pragma once
-
-#include <limits>
-
-#include "Constitutive/DarcyLaw.h"
-#include "Constitutive/EqP.h"
-#include "Constitutive/EqT.h"
-#include "Constitutive/EqU.h"
-#include "Constitutive/FluidThermalExpansion.h"
-#include "Constitutive/Gravity.h"
-#include "Constitutive/MaterialState.h"
-#include "Constitutive/Porosity.h"
-#include "Constitutive/Saturation.h"
-#include "Constitutive/SolidMechanics.h"
-#include "Constitutive/TRMHeatStorageAndFlux.h"
-#include "Constitutive/TRMStorage.h"
-#include "Constitutive/TRMVaporDiffusion.h"
-#include "Constitutive/ThermoOsmosis.h"
-#include "ThermoRichardsMechanicsProcessData.h"
-
-namespace ProcessLib::ThermoRichardsMechanics
-{
-
-/// Data whose state must be tracked by the TRM process.
-template <int DisplacementDim>
-struct StatefulData
-{
-    SaturationData S_L_data;
-    PorosityData poro_data;
-    TransportPorosityData transport_poro_data;
-    StrainData<DisplacementDim> eps_data;
-    SwellingDataStateful<DisplacementDim> swelling_data;
-    SolidMechanicsDataStateful<DisplacementDim> s_mech_data;
-
-    static auto reflect()
-    {
-        using Self = StatefulData<DisplacementDim>;
-
-        return ProcessLib::Reflection::reflectWithoutName(
-            &Self::S_L_data,
-            &Self::poro_data,
-            &Self::transport_poro_data,
-            &Self::eps_data,
-            &Self::swelling_data,
-            &Self::s_mech_data);
-    }
-};
-
-/// Data that is needed for output purposes, but not directly for the assembly.
-template <int DisplacementDim>
-struct OutputData
-{
-    DarcyLawData<DisplacementDim> darcy_data;
-    LiquidDensityData rho_L_data;
-    LiquidViscosityData mu_L_data;
-    SolidDensityData rho_S_data;
-
-    static auto reflect()
-    {
-        using Self = OutputData<DisplacementDim>;
-
-        return ProcessLib::Reflection::reflectWithoutName(&Self::darcy_data,
-                                                          &Self::rho_L_data,
-                                                          &Self::mu_L_data,
-                                                          &Self::rho_S_data);
-    }
-};
-
-/// Data that is needed for the equation system assembly.
-template <int DisplacementDim>
-struct ConstitutiveData
-{
-    SwellingDataStateless<DisplacementDim> swelling_data;
-    SolidMechanicsDataStateless<DisplacementDim> s_mech_data;
-    GravityData<DisplacementDim> grav_data;
-    TRMHeatStorageAndFluxData<DisplacementDim> heat_data;
-    TRMVaporDiffusionData<DisplacementDim> vap_data;
-    TRMStorageData storage_data;
-    EqUData<DisplacementDim> eq_u_data;
-    EqPData<DisplacementDim> eq_p_data;
-    EqTData<DisplacementDim> eq_T_data;
-    ThermoOsmosisData<DisplacementDim> th_osmosis_data;
-};
-
-/// Data that stores intermediate values, which are not needed outside the
-/// constitutive setting.
-template <int DisplacementDim>
-struct ConstitutiveTempData
-{
-    ElasticTangentStiffnessData<DisplacementDim> C_el_data;
-    BiotData biot_data;
-    SolidCompressibilityData solid_compressibility_data;
-    SaturationDataDeriv dS_L_data;
-    BishopsData bishops_data;
-    // TODO why not usual state tracking for that?
-    BishopsData bishops_data_prev;
-    SolidThermalExpansionData<DisplacementDim> s_therm_exp_data;
-    PermeabilityData<DisplacementDim> perm_data;
-    FluidThermalExpansionData f_therm_exp_data;
-};
-
-/// Constitutive models used for assembly.
-template <int DisplacementDim>
-struct ConstitutiveModels
-{
-    explicit ConstitutiveModels(
-        ThermoRichardsMechanicsProcessData<DisplacementDim> const& process_data,
-        MaterialLib::Solids::MechanicsBase<DisplacementDim> const&
-            solid_material)
-        : elastic_tangent_stiffness_model(solid_material),
-          solid_compressibility_model(solid_material),
-          s_mech_model(solid_material),
-          grav_model(process_data.specific_body_force),
-          darcy_model(process_data.specific_body_force),
-          eq_u_model(process_data.specific_body_force),
-          eq_p_model(process_data.specific_body_force)
-    {
-    }
-
-    ElasticTangentStiffnessModel<DisplacementDim>
-        elastic_tangent_stiffness_model;
-    BiotModel biot_model;
-    SolidCompressibilityModel<DisplacementDim> solid_compressibility_model;
-    SaturationModel<DisplacementDim> S_L_model;
-    BishopsModel bishops_model;
-    PorosityModel<DisplacementDim> poro_model;
-    SwellingModel<DisplacementDim> swelling_model;
-    SolidThermalExpansionModel<DisplacementDim> s_therm_exp_model;
-    SolidMechanicsModel<DisplacementDim> s_mech_model;
-    LiquidDensityModel<DisplacementDim> rho_L_model;
-    SolidDensityModel<DisplacementDim> rho_S_model;
-    GravityModel<DisplacementDim> grav_model;
-    LiquidViscosityModel<DisplacementDim> mu_L_model;
-    PermeabilityModel<DisplacementDim> perm_model;
-    DarcyLawModel<DisplacementDim> darcy_model;
-    TRMHeatStorageAndFluxModel<DisplacementDim> heat_storage_and_flux_model;
-    TRMVaporDiffusionModel<DisplacementDim> vapor_diffusion_model;
-    FluidThermalExpansionModel<DisplacementDim> f_therm_exp_model;
-    TRMStorageModel<DisplacementDim> storage_model;
-    EqUModel<DisplacementDim> eq_u_model;
-    EqPModel<DisplacementDim> eq_p_model;
-    EqTModel<DisplacementDim> eq_T_model;
-    ThermoOsmosisModel<DisplacementDim> th_osmosis_model;
-};
-
-template <int DisplacementDim>
-struct ConstitutiveSetting
-{
-    explicit ConstitutiveSetting(
-        MaterialLib::Solids::MechanicsBase<DisplacementDim> const&
-            solid_material,
-        ThermoRichardsMechanicsProcessData<DisplacementDim> const& process_data)
-        : process_data_(process_data), solid_material_(solid_material)
-    {
-    }
-
-    /// Evaluate the constitutive setting.
-    void eval(ConstitutiveModels<DisplacementDim>& models, double const t,
-              double const dt, ParameterLib::SpatialPosition const& x_position,
-              MaterialPropertyLib::Medium& medium,
-              TemperatureData<DisplacementDim> const& T_data,
-              CapillaryPressureData<DisplacementDim> const& p_cap_data,
-              KelvinVector<DisplacementDim> const& eps_arg,
-              KelvinVector<DisplacementDim> const& eps_prev_arg,
-              StatefulData<DisplacementDim>& state,
-              StatefulData<DisplacementDim> const& prev_state,
-              MaterialStateData<DisplacementDim>& mat_state,
-              ConstitutiveTempData<DisplacementDim>& tmp,
-              OutputData<DisplacementDim>& out,
-              ConstitutiveData<DisplacementDim>& cd);
-
-private:
-    ThermoRichardsMechanicsProcessData<DisplacementDim> const& process_data_;
-    MaterialLib::Solids::MechanicsBase<DisplacementDim> const& solid_material_;
-};
-
-extern template struct ConstitutiveSetting<2>;
-extern template struct ConstitutiveSetting<3>;
-}  // namespace ProcessLib::ThermoRichardsMechanics