diff --git a/dumux/material/fluidmatrixinteractions/2p/heatpipelaw.hh b/dumux/material/fluidmatrixinteractions/2p/heatpipelaw.hh
index 001ea496d4bde1b20ebdef9cda0bdab868f6620c..cb27f4ae5b7a5445779a57ff8bd482eb43445332 100644
--- a/dumux/material/fluidmatrixinteractions/2p/heatpipelaw.hh
+++ b/dumux/material/fluidmatrixinteractions/2p/heatpipelaw.hh
@@ -25,150 +25,6 @@
 #ifndef DUMUX_MATERIAL_FLUIDMATRIX_TWOP_HEATPIPELAW_HH
 #define DUMUX_MATERIAL_FLUIDMATRIX_TWOP_HEATPIPELAW_HH
 
-// remove from here after release 3.3 /////////////
-#include "heatpipelawparams.hh"
-
-#include <dumux/common/spline.hh>
-
-#include <algorithm>
-
-#include <math.h>
-#include <assert.h>
-
-namespace Dumux {
-
-/*!
- * \ingroup Fluidmatrixinteractions
- * \brief Implementation of the capillary pressure <-> saturation
- *        relation for the heatpipe problem.
- *
- * This class bundles the "raw" curves as static members and doesn't concern itself
- * converting absolute to effective saturations and vince versa.
- */
-template <class ScalarT, class ParamsT = HeatPipeLawParams<ScalarT> >
-class [[deprecated("Use new material laws and FluidMatrix::HeatPipeLaw instead!")]] HeatPipeLaw
-{
-public:
-    using Params = ParamsT;
-    using Scalar = typename Params::Scalar;
-
-    /*!
-     * \brief The capillary pressure-saturation curve.
-     *
-     * \param params Array of parameters asd
-     * \param Sw Effective saturation of of the wetting phase \f$\mathrm{[\overline{S}_w]}\f$
-     */
-    static Scalar pc(const Params &params, Scalar Sw)
-    {
-        Scalar Sn = 1 - Sw;
-        Scalar p0Gamma = params.p0()*params.gamma();
-
-        // regularization
-        if (Sn >= 1.0) {
-            Scalar y = p0Gamma*(  (1.263*1.0 -   2.120)*1.0 + 1.417)*1.0;
-            Scalar m = p0Gamma*((3*1.263*1.0 - 2*2.120)*1.0 + 1.417);
-            return (Sn - 1)*m + y;
-        }
-        else if (Sn <= 0.0) {
-            Scalar y = 0.0;
-            Scalar m = p0Gamma*1.417;
-            return Sn*m + y;
-        }
-
-        return p0Gamma*((1.263*Sn - 2.120)*Sn + 1.417) * Sn;
-    }
-
-    /*!
-     * \brief The saturation-capillary pressure curve.
-     *
-     * \return The effective saturaion of the wetting phase \f$\mathrm{[\overline{S}_w]}\f$
-     * \param params Array of parameters
-     * \param pC Capillary pressure \f$\mathrm{[p_C]}\f$ in \f$\mathrm{[Pa]}\f$.
-     */
-    static Scalar Sw(const Params &params, Scalar pC)
-    {
-        DUNE_THROW(Dune::NotImplemented, "HeatPipeLaw::Sw");
-    }
-
-    /*!
-     * \brief Returns the partial derivative of the capillary
-     *        pressure to the effective saturation.
-     * \param params Array of parameters
-     * \param Sw Effective saturation of of the wetting phase \f$\mathrm{[\overline{S}_w]}\f$
-     */
-    static Scalar dpC_dSw(const Params &params, Scalar Sw)
-    {
-        Scalar Sn = 1 - Sw;
-        Scalar p0Gamma = params.p0()*params.gamma();
-        if (Sn > 1.0)
-            Sn = 1.0;
-        else if (Sn <= 0.0) {
-            Scalar m = -p0Gamma*1.417;
-            return m;
-        }
-
-        Scalar m = - p0Gamma*((3*1.263*Sn - 2*2.120)*Sn + 1.417);
-        return m;
-    }
-
-    /*!
-     * \brief Returns the partial derivative of the effective
-     *        saturation to the capillary pressure.
-     * \param params Array of parameters
-     * \param pC Capillary pressure \f$\mathrm{[p_C]}\f$ in \f$\mathrm{[Pa]}\f$.
-     */
-    static Scalar dSw_dpC(const Params &params, Scalar pC)
-    {
-        DUNE_THROW(Dune::NotImplemented, "HeatPipeLaw::dSw_dpC");
-    }
-
-    /*!
-     * \brief The relative permeability for the wetting phase.
-     *
-     * \param params Array of parameters
-     * \param Sw The mobile saturation of the wetting phase.
-     */
-    static Scalar krw(const Params &params, Scalar Sw)
-    {
-        return kr_(Sw);
-    }
-
-    /*!
-     * \brief The relative permeability for the nonwetting phase.
-     *
-     * \param params Array of parameters
-     * \param Sw The mobile saturation of the wetting phase.
-     */
-    static Scalar krn(const Params &params, Scalar Sw)
-    {
-        Scalar Sn = 1 - Sw;
-        return kr_(Sn);
-    }
-
-private:
-    static Scalar kr_(Scalar S)
-    {
-        const Scalar eps = 0.95;
-        if (S >= 1)
-            return 1;
-        else if (S <= 0)
-            return 0;
-        else if (S > eps) {
-            // regularize
-            using Spline = Dumux::Spline<Scalar>;
-            Spline sp(eps, 1.0, // x1, x2
-                      eps*eps*eps, 1, // y1, y2
-                      3*eps*eps, 0); // m1, m2
-            return sp.eval(S);
-        }
-
-        return S*S*S;
-    }
-};
-
-} // end namespace Dumux
-// remove until here after release 3.3 /////////////
-
 #include <cmath>
 #include <algorithm>
 
@@ -274,11 +130,11 @@ public:
     /*!
      * \brief The capillary pressure-saturation curve.
      *
-     * \param swe Effective saturation of the wetting phase \f$\mathrm{\overline{S}_w}\f$
+     * \param sw Saturation of the wetting phase \f$\mathrm{S_w}\f$
      */
-    template<class Scalar>
-    Scalar pc(Scalar swe) const
+    Scalar pc(const Scalar sw) const
     {
+        const Scalar swe = EffToAbs::swToSwe(sw, effToAbsParams_);
         const Scalar sne = 1 - swe;
         const Scalar p0Gamma = params_.p0()*params_.gamma();
 
@@ -298,7 +154,6 @@ public:
     /*!
      * \brief The capillary pressure at Swe = 1.0 also called end point capillary pressure
      */
-    template<class Scalar>
     Scalar endPointPc() const
     { return 0.0; }
 
@@ -306,30 +161,30 @@ public:
      * \brief The partial derivative of the capillary
      *        pressure w.r.t. the effective saturation.
      *
-     * \param swe Effective saturation of the wetting phase \f$\mathrm{\overline{S}_w}\f$
+     * \param sw Saturation of the wetting phase \f$\mathrm{S_w}\f$
      */
-    template<class Scalar>
-    Scalar dpc_dswe(Scalar swe) const
+    Scalar dpc_dsw(const Scalar sw) const
     {
+        const Scalar swe = EffToAbs::swToSwe(sw, effToAbsParams_);
         const Scalar sne = 1 - swe;
         const Scalar p0Gamma = params_.p0()*params_.gamma();
         if (sne > 1.0)
             sne = 1.0;
         else if (sne <= 0.0)
-            return -p0Gamma*1.417;
+            return -p0Gamma*1.417*EffToAbs::dswe_dsw(effToAbsParams_);
         else
-            return - p0Gamma*((3*1.263*sne - 2*2.120)*sne + 1.417);
+            return - p0Gamma*((3*1.263*sne - 2*2.120)*sne + 1.417)*EffToAbs::dswe_dsw(effToAbsParams_);
     }
 
     /*!
      * \brief The relative permeability for the wetting phase of
      *        the medium.
      *
-     * \param swe The mobile saturation of the wetting phase.
+     * \param sw Saturation of the wetting phase \f$\mathrm{S_w}\f$
      */
-    template<class Scalar>
-    Scalar krw(Scalar swe) const
+    Scalar krw(const Scalar sw) const
     {
+        const Scalar swe = EffToAbs::swToSwe(sw, effToAbsParams_);
         return kr_(swe);
     }
 
@@ -337,11 +192,11 @@ public:
      * \brief The relative permeability for the non-wetting phase
      *        of the medium.
      *
-     * \param swe The mobile saturation of the wetting phase.
+     * \param sw Saturation of the wetting phase \f$\mathrm{S_w}\f$
      */
-    template<class Scalar>
-    Scalar krn(Scalar swe) const
+    Scalar krn(const Scalar sw) const
     {
+        const Scalar swe = EffToAbs::swToSwe(sw, effToAbsParams_);
         const Scalar sne = 1 - swe; // TODO does this make sense?
         return kr_(sne);
     }