diff --git a/test/porousmediumflow/mpnc/implicit/2p2ccomparison/params.input b/test/porousmediumflow/mpnc/implicit/2p2ccomparison/params.input
index 0ca290b1678da0e719fc2776801d042cb33af522..2fe2cab4408eabe4d0376f239cd31d1f91bd29b2 100644
--- a/test/porousmediumflow/mpnc/implicit/2p2ccomparison/params.input
+++ b/test/porousmediumflow/mpnc/implicit/2p2ccomparison/params.input
@@ -6,9 +6,13 @@ TEnd = 1e4 # [s]
 UpperRight = 60 40
 Cells = 24 16
 
+[SpatialParams]
+Swr = 0.2
+BrooksCoreyPcEntry = 1e4
+BrooksCoreyLambda = 2.0
+
 [LinearSolver]
 ResidualReduction = 1e-12
 
 [Problem]
 Name = obstacle
-
diff --git a/test/porousmediumflow/mpnc/implicit/2p2ccomparison/problem.hh b/test/porousmediumflow/mpnc/implicit/2p2ccomparison/problem.hh
index b97fd347eb06a3cad45865deed1cd6e3b4389a6b..14a844f864fefdf1737b1461e107eff33d4efde5 100644
--- a/test/porousmediumflow/mpnc/implicit/2p2ccomparison/problem.hh
+++ b/test/porousmediumflow/mpnc/implicit/2p2ccomparison/problem.hh
@@ -261,20 +261,16 @@ private:
         // set pressure of the gas phase
         fs.setPressure(gasPhaseIdx, 1e5);
         // calulate the capillary pressure
-        const auto& matParams =
-            this->spatialParams().materialLawParamsAtPos(globalPos);
-        PhaseVector pc;
-        using MaterialLaw = typename ParentType::SpatialParams::MaterialLaw;
-        using MPAdapter = MPAdapter<MaterialLaw, numPhases>;
-
+        const auto& fm =
+            this->spatialParams().fluidMatrixInteractionAtPos(globalPos);
         const int wPhaseIdx = this->spatialParams().template wettingPhaseAtPos<FluidSystem>(globalPos);
-        MPAdapter::capillaryPressures(pc, matParams, fs, wPhaseIdx);
+        const auto pc = fm.capillaryPressures(fs, wPhaseIdx);
         fs.setPressure(liquidPhaseIdx,
                        fs.pressure(gasPhaseIdx) + pc[liquidPhaseIdx] - pc[gasPhaseIdx]);
 
         // make the fluid state consistent with local thermodynamic
         // equilibrium
-         using MiscibleMultiPhaseComposition = Dumux::MiscibleMultiPhaseComposition<Scalar, FluidSystem>;
+        using MiscibleMultiPhaseComposition = Dumux::MiscibleMultiPhaseComposition<Scalar, FluidSystem>;
 
         ParameterCache paramCache;
         MiscibleMultiPhaseComposition::solve(fs, paramCache);
diff --git a/test/porousmediumflow/mpnc/implicit/2p2ccomparison/spatialparams.hh b/test/porousmediumflow/mpnc/implicit/2p2ccomparison/spatialparams.hh
index b3697ee9d1fadd515aa16b1bcddddd65f4afae09..2478cbe98faadc35620e32d7706f35ba48068084 100644
--- a/test/porousmediumflow/mpnc/implicit/2p2ccomparison/spatialparams.hh
+++ b/test/porousmediumflow/mpnc/implicit/2p2ccomparison/spatialparams.hh
@@ -27,10 +27,8 @@
 
 #include <dumux/porousmediumflow/properties.hh>
 #include <dumux/material/spatialparams/fv.hh>
-#include <dumux/material/fluidmatrixinteractions/2p/regularizedlinearmaterial.hh>
-#include <dumux/material/fluidmatrixinteractions/2p/efftoabslaw.hh>
-
-#include <dumux/material/fluidmatrixinteractions/2p/regularizedbrookscorey.hh>
+#include <dumux/material/fluidmatrixinteractions/2p/brookscorey.hh>
+#include <dumux/material/fluidmatrixinteractions/mp/mpadapter.hh>
 
 namespace Dumux {
 
@@ -53,14 +51,16 @@ class MPNCComparisonSpatialParams
                                        MPNCComparisonSpatialParams<GridGeometry, Scalar>>;
 
     using GlobalPosition = typename SubControlVolume::GlobalPosition;
-    using EffectiveLaw = RegularizedBrooksCorey<Scalar>;
+
+    using PcKrSwCurve = FluidMatrix::BrooksCoreyDefault<Scalar>;
+    using MPAdapter = Dumux::FluidMatrix::MPAdapter<PcKrSwCurve, 2>;
 
 public:
     using PermeabilityType = Scalar;
-    using MaterialLaw = EffToAbsLaw<EffectiveLaw>;
-    using MaterialLawParams = typename MaterialLaw::Params;
 
-    MPNCComparisonSpatialParams(std::shared_ptr<const GridGeometry> gridGeometry) : ParentType(gridGeometry)
+    MPNCComparisonSpatialParams(std::shared_ptr<const GridGeometry> gridGeometry)
+    : ParentType(gridGeometry)
+    , pcKrSw_("SpatialParams")
     {
         // intrinsic permeabilities
         coarseK_ = 1e-12;
@@ -68,18 +68,6 @@ public:
 
         // the porosity
         porosity_ = 0.3;
-
-        // residual saturations
-        fineMaterialParams_.setSwr(0.2);
-        fineMaterialParams_.setSnr(0.0);
-        coarseMaterialParams_.setSwr(0.2);
-        coarseMaterialParams_.setSnr(0.0);
-
-        // parameters for the Brooks-Corey law
-        fineMaterialParams_.setPe(1e4);
-        coarseMaterialParams_.setPe(1e4);
-        fineMaterialParams_.setLambda(2.0);
-        coarseMaterialParams_.setLambda(2.0);
     }
 
     template<class ElementSolution>
@@ -95,7 +83,6 @@ public:
 
     /*!
      * \brief Defines the porosity \f$[-]\f$ of the soil
-     *
      * \param globalPos The global Position
      */
     Scalar porosityAtPos(const GlobalPosition& globalPos) const
@@ -105,23 +92,16 @@ public:
 
     /*!
      * \brief Function for defining the parameters needed by constitutive relationships (kr-sw, pc-sw, etc.).
-     *
      * \param globalPos The global position of the sub-control volume.
-     * \return The material parameters object
      */
-    const MaterialLawParams& materialLawParamsAtPos(const GlobalPosition& globalPos) const
+    auto fluidMatrixInteractionAtPos(const GlobalPosition& globalPos) const
     {
-        if (isFineMaterial_(globalPos))
-            return fineMaterialParams_;
-        else
-            return coarseMaterialParams_;
+        return makeFluidMatrixInteraction(MPAdapter(pcKrSw_));
     }
 
     /*!
      * \brief Function for defining which phase is to be considered as the wetting phase.
-     *
      * \param globalPos The global position
-     * \return The wetting phase index
      */
     template<class FluidSystem>
     int wettingPhaseAtPos(const GlobalPosition& globalPos) const
@@ -144,8 +124,7 @@ private:
     Scalar coarseK_;
     Scalar fineK_;
     Scalar porosity_;
-    MaterialLawParams fineMaterialParams_;
-    MaterialLawParams coarseMaterialParams_;
+    PcKrSwCurve pcKrSw_;
     static constexpr Scalar eps_ = 1e-6;
 };
 
diff --git a/test/porousmediumflow/mpnc/implicit/kinetic/problem.hh b/test/porousmediumflow/mpnc/implicit/kinetic/problem.hh
index 8423989dd11f3e3ae9ae2c66c3bf6c780d63966b..24ed4fb559c1e6df61bc5fceea64b665a69ae0db 100644
--- a/test/porousmediumflow/mpnc/implicit/kinetic/problem.hh
+++ b/test/porousmediumflow/mpnc/implicit/kinetic/problem.hh
@@ -381,12 +381,10 @@ private:
             equilibriumFluidState.setTemperature(phaseIdx, TInitial_ );
         }
 
-        std::vector<Scalar> capPress(numPhases);
         // obtain pc according to saturation
-        using MPAdapter = FluidMatrix::MPAdapter<numPhases>;
-
         const int wPhaseIdx = this->spatialParams().template wettingPhaseAtPos<FluidSystem>(globalPos);
-        MPAdapter::capillaryPressures(capPress, this->spatialParams().fluidMatrixInteractionAtPos(globalPos), equilibriumFluidState, wPhaseIdx);
+        const auto& fm = this->spatialParams().fluidMatrixInteractionAtPos(globalPos);
+        const auto capPress = fm.capillaryPressures(equilibriumFluidState, wPhaseIdx);
 
         Scalar p[numPhases];
         if (this->spatialParams().inPM_(globalPos)){
diff --git a/test/porousmediumflow/mpnc/implicit/kinetic/spatialparams.hh b/test/porousmediumflow/mpnc/implicit/kinetic/spatialparams.hh
index 15c3c3863ce5c35f3dcbc1e147fb78aaace69a10..c1c2d0f1fcbcb2774fcf3f8622f2a8efe8ba4c0a 100644
--- a/test/porousmediumflow/mpnc/implicit/kinetic/spatialparams.hh
+++ b/test/porousmediumflow/mpnc/implicit/kinetic/spatialparams.hh
@@ -31,6 +31,7 @@
 
 #include <dumux/material/fluidmatrixinteractions/fluidmatrixinteraction.hh>
 #include <dumux/material/fluidmatrixinteractions/2p/brookscorey.hh>
+#include <dumux/material/fluidmatrixinteractions/mp/mpadapter.hh>
 
 #include <dumux/common/parameters.hh>
 
@@ -62,6 +63,7 @@ class EvaporationAtmosphereSpatialParams
     static constexpr auto dimWorld = GridView::dimensionworld;
 
     using PcKrSwCurve = FluidMatrix::BrooksCoreyDefault<Scalar>;
+    using MPAdapter = Dumux::FluidMatrix::MPAdapter<PcKrSwCurve, 2>;
 
     using NonwettingSolidInterfacialArea = FluidMatrix::InterfacialArea<Scalar,
                                                                         FluidMatrix::InterfacialAreaExponentialCubic,
@@ -246,9 +248,9 @@ public:
     auto fluidMatrixInteractionAtPos(const GlobalPosition &globalPos) const
     {
         if (inFF_(globalPos))
-            return makeFluidMatrixInteraction(*pcKrSwCurveFF_, *aNsFreeFlow_, *aNwFreeFlow_, *aWs_);
+            return makeFluidMatrixInteraction(MPAdapter(*pcKrSwCurveFF_), *aNsFreeFlow_, *aNwFreeFlow_, *aWs_);
         else if (inPM_(globalPos))
-            return makeFluidMatrixInteraction(*pcKrSwCurvePM_, *aNs_, *aNw_, *aWs_);
+            return makeFluidMatrixInteraction(MPAdapter(*pcKrSwCurvePM_), *aNs_, *aNw_, *aWs_);
         else DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dimWorld-1]);
     }
 
diff --git a/test/porousmediumflow/mpnc/implicit/obstacle/problem.hh b/test/porousmediumflow/mpnc/implicit/obstacle/problem.hh
index 71ded1bbe22c15f8293d4f954461214d1dcbbb81..905fed1f690d0c21a984ca7b4a5687c137341cf5 100644
--- a/test/porousmediumflow/mpnc/implicit/obstacle/problem.hh
+++ b/test/porousmediumflow/mpnc/implicit/obstacle/problem.hh
@@ -331,11 +331,8 @@ private:
 
         // calculate the capillary pressure
         const auto fluidMatrixInteraction = this->spatialParams().fluidMatrixInteractionAtPos(globalPos);
-        PhaseVector pc;
-        using MPAdapter = FluidMatrix::MPAdapter<numPhases>;
-
         const int wPhaseIdx = this->spatialParams().template wettingPhaseAtPos<FluidSystem>(globalPos);
-        MPAdapter::capillaryPressures(pc, fluidMatrixInteraction, fs, wPhaseIdx);
+        const auto pc = fluidMatrixInteraction.capillaryPressures(fs, wPhaseIdx);
         fs.setPressure(otherPhaseIdx,
                        fs.pressure(refPhaseIdx)
                        + (pc[otherPhaseIdx] - pc[refPhaseIdx]));
diff --git a/test/porousmediumflow/mpnc/implicit/obstacle/spatialparams.hh b/test/porousmediumflow/mpnc/implicit/obstacle/spatialparams.hh
index 16b9f81b3033c9dd4a3d1c4de5a923c1c9aaa95e..a7843b25266fe4d82952e98c6b82cc572297f1f9 100644
--- a/test/porousmediumflow/mpnc/implicit/obstacle/spatialparams.hh
+++ b/test/porousmediumflow/mpnc/implicit/obstacle/spatialparams.hh
@@ -29,6 +29,7 @@
 #include <dumux/material/spatialparams/fv.hh>
 #include <dumux/material/fluidmatrixinteractions/fluidmatrixinteraction.hh>
 #include <dumux/material/fluidmatrixinteractions/2p/smoothedlinearlaw.hh>
+#include <dumux/material/fluidmatrixinteractions/mp/mpadapter.hh>
 
 namespace Dumux {
 
@@ -53,6 +54,7 @@ class ObstacleSpatialParams
     using GlobalPosition = typename SubControlVolume::GlobalPosition;
 
     using PcKrSwCurve = FluidMatrix::SmoothedLinearLaw<Scalar>;
+    using MPAdapter = Dumux::FluidMatrix::MPAdapter<PcKrSwCurve, 2>;
 
 public:
     //! Export the type used for the permeability
@@ -91,7 +93,7 @@ public:
      */
     auto fluidMatrixInteractionAtPos(const GlobalPosition &globalPos) const
     {
-        return makeFluidMatrixInteraction(pcKrSwCurve_);
+        return makeFluidMatrixInteraction(MPAdapter(pcKrSwCurve_));
     }
 
     /*!
diff --git a/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/problem.hh b/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/problem.hh
index 8b68189255f8de4fdf9a83559ecee61ffe0c8acf..48ffdd6503a6377799d5d636591e3a80765dbad1 100644
--- a/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/problem.hh
+++ b/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/problem.hh
@@ -449,12 +449,11 @@ private:
         //////////////////////////////////////
         priVars[energyEq0Idx] = thisTemperature;
         priVars[energyEqSolidIdx] = thisTemperature;
-        std::array<Scalar, numPhases> capPress;
 
         //obtain pc according to saturation
         const int wettingPhaseIdx = this->spatialParams().template wettingPhaseAtPos<FluidSystem>(globalPos);
-        using MPAdapter = FluidMatrix::MPAdapter<numPhases>;
-        MPAdapter::capillaryPressures(capPress, this->spatialParams().fluidMatrixInteractionAtPos(globalPos), fluidState, wettingPhaseIdx);
+        const auto& fm = this->spatialParams().fluidMatrixInteractionAtPos(globalPos);
+        const auto capPress = fm.capillaryPressures(fluidState, wettingPhaseIdx);
 
         Scalar p[numPhases];
 
diff --git a/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/spatialparams.hh b/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/spatialparams.hh
index fbfd4fca8356a0fd84a3b559d00e3d62ffd1646a..bcef6650c9b90d8578c055e930283ce4ece6080f 100644
--- a/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/spatialparams.hh
+++ b/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/spatialparams.hh
@@ -31,6 +31,7 @@
 
 #include <dumux/material/spatialparams/fvnonequilibrium.hh>
 #include <dumux/material/fluidmatrixinteractions/2p/heatpipelaw.hh>
+#include <dumux/material/fluidmatrixinteractions/mp/mpadapter.hh>
 #include <dumux/material/fluidmatrixinteractions/1pia/fluidsolidinterfacialareashiwang.hh>
 #include <dumux/porousmediumflow/properties.hh>
 #include <dumux/material/spatialparams/fv.hh>
@@ -56,6 +57,7 @@ class CombustionSpatialParams
     using GlobalPosition = typename SubControlVolume::GlobalPosition;
 
     using PcKrSwCurve = FluidMatrix::HeatPipeLaw<Scalar>;
+    using MPAdapter = Dumux::FluidMatrix::MPAdapter<PcKrSwCurve, 2>;
 
 public:
     //! Export the type used for the permeability
@@ -192,7 +194,7 @@ public:
      */
     auto fluidMatrixInteractionAtPos(const GlobalPosition &globalPos) const
     {
-        return makeFluidMatrixInteraction(*pcKrSwCurve_);
+        return makeFluidMatrixInteraction(MPAdapter(*pcKrSwCurve_));
     }
 
 private: