diff --git a/dumux/material/fluidmatrixinteractions/mp/mpadapter.hh b/dumux/material/fluidmatrixinteractions/mp/mpadapter.hh
index bb3b4a2c9aa42a940ceefb28d9c582ba68e74a68..afc9e3e09619c7f6a6ec4340a46c4aa8b4e516a7 100644
--- a/dumux/material/fluidmatrixinteractions/mp/mpadapter.hh
+++ b/dumux/material/fluidmatrixinteractions/mp/mpadapter.hh
@@ -107,7 +107,7 @@ namespace Dumux::FluidMatrix {
  * \ingroup Fluidmatrixinteractions
  * \brief An adapter for mpnc to use the capillary pressure-saturation relationships
  */
-template <class MaterialLaw, int numFluidPhases = MaterialLaw::numFluidPhases()>
+template <class MaterialLaw, int numFluidPhases = std::decay_t<MaterialLaw>::numFluidPhases()>
 class MPAdapter
 {
     static_assert(AlwaysFalse<MaterialLaw>::value, "Adapter not implemented for the specified number of phases");
@@ -119,10 +119,10 @@ class MPAdapter<MaterialLaw, 2>
 : public Adapter<MPAdapter<MaterialLaw, 2>, MultiPhasePcKrSw>
 {
 public:
-    using Scalar = typename MaterialLaw::Scalar;
+    using Scalar = typename std::decay_t<MaterialLaw>::Scalar;
 
-    MPAdapter(const MaterialLaw& pcKrS)
-    : pcKrS_(pcKrS)
+    MPAdapter(MaterialLaw&& pcKrS)
+    : pcKrS_(std::forward<MaterialLaw>(pcKrS))
     {}
 
     /*!
@@ -161,9 +161,18 @@ public:
         return values;
     }
 private:
-    const MaterialLaw& pcKrS_;
+    MaterialLaw pcKrS_;
 };
 
+/*!
+ * \ingroup Fluidmatrixinteractions
+ * \brief Deduction guide for the MPAdapter class.
+ *        Makes sure that MPAdapter stores a copy of T if
+ *        the constructor is called with a temporary object.
+ */
+template<typename T>
+MPAdapter(T&&) -> MPAdapter<T>;
+
 } // end namespace Dumux::FluidMatrix
 
 
diff --git a/test/porousmediumflow/mpnc/2p2ccomparison/spatialparams.hh b/test/porousmediumflow/mpnc/2p2ccomparison/spatialparams.hh
index 2478cbe98faadc35620e32d7706f35ba48068084..ab9a55a8ef81a199c3a122bf4e416929d8176af7 100644
--- a/test/porousmediumflow/mpnc/2p2ccomparison/spatialparams.hh
+++ b/test/porousmediumflow/mpnc/2p2ccomparison/spatialparams.hh
@@ -53,7 +53,6 @@ class MPNCComparisonSpatialParams
     using GlobalPosition = typename SubControlVolume::GlobalPosition;
 
     using PcKrSwCurve = FluidMatrix::BrooksCoreyDefault<Scalar>;
-    using MPAdapter = Dumux::FluidMatrix::MPAdapter<PcKrSwCurve, 2>;
 
 public:
     using PermeabilityType = Scalar;
@@ -96,7 +95,7 @@ public:
      */
     auto fluidMatrixInteractionAtPos(const GlobalPosition& globalPos) const
     {
-        return makeFluidMatrixInteraction(MPAdapter(pcKrSw_));
+        return makeFluidMatrixInteraction(FluidMatrix::MPAdapter(pcKrSw_));
     }
 
     /*!
diff --git a/test/porousmediumflow/mpnc/kinetic/spatialparams.hh b/test/porousmediumflow/mpnc/kinetic/spatialparams.hh
index ca8ba66062229e4eb99596cb27a5957d1706b69e..cd381c9ab29b3ea309325ec67e9bb55dc495897b 100644
--- a/test/porousmediumflow/mpnc/kinetic/spatialparams.hh
+++ b/test/porousmediumflow/mpnc/kinetic/spatialparams.hh
@@ -63,7 +63,6 @@ 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,
@@ -248,9 +247,9 @@ public:
     auto fluidMatrixInteractionAtPos(const GlobalPosition &globalPos) const
     {
         if (inFF_(globalPos))
-            return makeFluidMatrixInteraction(MPAdapter(*pcKrSwCurveFF_), *aNsFreeFlow_, *aNwFreeFlow_, *aWs_);
+            return makeFluidMatrixInteraction(FluidMatrix::MPAdapter(*pcKrSwCurveFF_), *aNsFreeFlow_, *aNwFreeFlow_, *aWs_);
         else if (inPM_(globalPos))
-            return makeFluidMatrixInteraction(MPAdapter(*pcKrSwCurvePM_), *aNs_, *aNw_, *aWs_);
+            return makeFluidMatrixInteraction(FluidMatrix::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/obstacle/spatialparams.hh b/test/porousmediumflow/mpnc/obstacle/spatialparams.hh
index 5b60e7488a70c4c66a292578d81aa3df8a947ef3..dac344e23b0a5a782733dbe70294124e105a5585 100644
--- a/test/porousmediumflow/mpnc/obstacle/spatialparams.hh
+++ b/test/porousmediumflow/mpnc/obstacle/spatialparams.hh
@@ -54,7 +54,6 @@ 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
@@ -93,7 +92,7 @@ public:
      */
     auto fluidMatrixInteractionAtPos(const GlobalPosition &globalPos) const
     {
-        return makeFluidMatrixInteraction(MPAdapter(pcKrSwCurve_));
+        return makeFluidMatrixInteraction(FluidMatrix::MPAdapter(pcKrSwCurve_));
     }
 
     /*!
diff --git a/test/porousmediumflow/mpnc/thermalnonequilibrium/spatialparams.hh b/test/porousmediumflow/mpnc/thermalnonequilibrium/spatialparams.hh
index 460d1bbf1afa727ef2343fb7e13889acd4251a1f..6aa521c5274038231b6e0da893fa7d43c273b1f7 100644
--- a/test/porousmediumflow/mpnc/thermalnonequilibrium/spatialparams.hh
+++ b/test/porousmediumflow/mpnc/thermalnonequilibrium/spatialparams.hh
@@ -58,7 +58,6 @@ 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
@@ -195,7 +194,7 @@ public:
      */
     auto fluidMatrixInteractionAtPos(const GlobalPosition &globalPos) const
     {
-        return makeFluidMatrixInteraction(MPAdapter(*pcKrSwCurve_));
+        return makeFluidMatrixInteraction(FluidMatrix::MPAdapter(*pcKrSwCurve_));
     }
 
 private: