diff --git a/dumux/multidomain/2cnistokes2p2cni/localoperator.hh b/dumux/multidomain/2cnistokes2p2cni/localoperator.hh
index 343d17ff06a046bc6675ab1cf09bfd1f1963bd19..5a1a653248d383aba08b40381b991b95ec266941 100644
--- a/dumux/multidomain/2cnistokes2p2cni/localoperator.hh
+++ b/dumux/multidomain/2cnistokes2p2cni/localoperator.hh
@@ -263,7 +263,7 @@ public:
 
                 // conductive energy flux
                 Scalar conductiveFlux = bfNormal1.two_norm()
-                                        * evalBoundaryLayerTemperatureGradient(cParams, vertInElem1)
+                                        * this->globalProblem().evalBoundaryLayerTemperatureGradient(cParams, vertInElem1)
                                         * (boundaryVars1.thermalConductivity()
                                            + boundaryVars1.thermalEddyConductivity());
 
@@ -275,11 +275,11 @@ public:
                     if (compIdx != phaseCompIdx1)
                     {
                         Scalar diffusiveFlux = bfNormal1.two_norm()
-                                               * ParentType::evalBoundaryLayerConcentrationGradient(cParams, vertInElem1)
+                                               * this->globalProblem().evalBoundaryLayerConcentrationGradient(cParams, vertInElem1)
                                                * (boundaryVars1.diffusionCoeff(compIdx)
                                                   + boundaryVars1.eddyDiffusivity())
                                                * boundaryVars1.molarDensity()
-                                               * ParentType::evalMassTransferCoefficient(cParams, vertInElem1, vertInElem2);
+                                               * this->globalProblem().evalMassTransferCoefficient(cParams, vertInElem1, vertInElem2);
                         sumDiffusiveFluxes += diffusiveFlux;
                         sumDiffusiveEnergyFlux += diffusiveFlux
                                                   * boundaryVars1.componentEnthalpy(compIdx)
@@ -518,20 +518,14 @@ public:
     /*!
      * \brief Returns the temperature gradient through the boundary layer
      *
-     * \todo This function could be moved to a more model specific place, because
-     *       of its runtime parameters.
-     *
      * \param cParams a parameter container
      * \param scvIdx The local index of the sub-control volume of the Stokes domain
      */
     template<typename CParams>
+    DUNE_DEPRECATED_MSG("evalBoundaryLayerTemperatureGradient() is deprecated.")
     Scalar evalBoundaryLayerTemperatureGradient(CParams cParams, const int scvIdx) const
     {
-        const Scalar temperatureOut = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, FreeFlow, RefTemperature);
-        Scalar normalTemperatureGrad = cParams.elemVolVarsCur1[scvIdx].temperature()
-                                       - temperatureOut;
-        return normalTemperatureGrad
-               / ParentType::evalBoundaryLayerModel(cParams, scvIdx).thermalBoundaryLayerThickness();
+        this->globalProblem().evalBoundaryLayerTemperatureGradient(cParams, scvIdx);
     }
 };
 } // end namespace Dumux
diff --git a/dumux/multidomain/2cnistokes2p2cni/problem.hh b/dumux/multidomain/2cnistokes2p2cni/problem.hh
new file mode 100644
index 0000000000000000000000000000000000000000..05e2420fc5a0bb18304f67060b06dfbbe48b77ca
--- /dev/null
+++ b/dumux/multidomain/2cnistokes2p2cni/problem.hh
@@ -0,0 +1,88 @@
+// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+// vi: set et ts=4 sw=4 sts=4:
+/*****************************************************************************
+ *   See the file COPYING for full copying permissions.                      *
+ *                                                                           *
+ *   This program is free software: you can redistribute it and/or modify    *
+ *   it under the terms of the GNU General Public License as published by    *
+ *   the Free Software Foundation, either version 2 of the License, or       *
+ *   (at your option) any later version.                                     *
+ *                                                                           *
+ *   This program is distributed in the hope that it will be useful,         *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            *
+ *   GNU General Public License for more details.                            *
+ *                                                                           *
+ *   You should have received a copy of the GNU General Public License       *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>.   *
+ *****************************************************************************/
+/*!
+ * \file
+ * \brief The problem class for the coupling of a non-isothermal two-component Stokes
+ *        and a non-isothermal two-phase two-component Darcy model.
+ */
+
+#ifndef DUMUX_2CNI_STOKES_2P2CNI_PROBLEM_HH
+#define DUMUX_2CNI_STOKES_2P2CNI_PROBLEM_HH
+
+#include <dumux/freeflow/stokesncni/properties.hh>
+#include <dumux/multidomain/2cstokes2p2c/problem.hh>
+#include <dumux/porousmediumflow/2p2c/implicit/properties.hh>
+
+#include "properties.hh"
+
+namespace Dumux
+{
+
+/*!
+ * \ingroup TwoPTwoCNIStokesTwoCNIModel
+ * \ingroup TwoPTwoCNIZeroEqTwoCNIModel
+ * \brief The problem class for the coupling of a non-isothermal two-component Stokes
+ *        and a non-isothermal two-phase two-component Darcy model.
+ */
+template <class TypeTag>
+class TwoCNIStokesTwoPTwoCNIProblem : public TwoCStokesTwoPTwoCProblem<TypeTag>
+{
+    typedef TwoCStokesTwoPTwoCProblem<TypeTag> ParentType;
+    typedef typename GET_PROP_TYPE(TypeTag, Problem) Implementation;
+
+    typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
+    typedef typename GET_PROP_TYPE(TypeTag, TimeManager) TimeManager;
+
+public:
+    //! The constructor
+    template<class GridView>
+    TwoCNIStokesTwoPTwoCNIProblem(TimeManager &timeManager,
+                                  GridView gridView)
+    : ParentType(timeManager, gridView)
+    { }
+
+    /*!
+     * \brief Returns the temperature gradient through the boundary layer
+     *
+     * \param cParams a parameter container
+     * \param scvIdx1 The local index of the sub-control volume of the Stokes domain
+     */
+    template<typename CParams>
+    Scalar evalBoundaryLayerTemperatureGradient(CParams cParams, const int scvIdx) const
+    {
+        const Scalar temperatureOut = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, FreeFlow, RefTemperature);
+        Scalar normalTemperatureGrad = cParams.elemVolVarsCur1[scvIdx].temperature()
+                                       - temperatureOut;
+        return normalTemperatureGrad
+               / asImp_().evalBoundaryLayerModel(cParams, scvIdx).thermalBoundaryLayerThickness();
+    }
+
+private:
+    //! Returns the implementation of the problem (i.e. static polymorphism)
+    Implementation &asImp_()
+    { return *static_cast<Implementation *>(this); }
+
+    //! \copydoc asImp_()
+    const Implementation &asImp_() const
+    { return *static_cast<const Implementation *>(this); }
+};
+
+} // namespace Dumux
+
+#endif // DUMUX_2CNI_STOKES_2P2CNI_PROBLEM_HH
diff --git a/dumux/multidomain/2cstokes2p2c/localoperator.hh b/dumux/multidomain/2cstokes2p2c/localoperator.hh
index 3232b9998b412be34eae30509f04637d002bf963..24ff32f4b0356eb5c88bac21cf31f76d0f8f4555 100644
--- a/dumux/multidomain/2cstokes2p2c/localoperator.hh
+++ b/dumux/multidomain/2cstokes2p2c/localoperator.hh
@@ -32,13 +32,13 @@
 #include <dune/pdelab/localoperator/pattern.hh>
 #include <dune/pdelab/localoperator/idefault.hh>
 
-#include <dumux/multidomain/properties.hh>
-#include <dumux/multidomain/2cstokes2p2c/propertydefaults.hh>
 #include <dumux/freeflow/boundarylayermodel.hh>
 #include <dumux/freeflow/masstransfermodel.hh>
 #include <dumux/freeflow/stokesnc/model.hh>
+#include <dumux/multidomain/properties.hh>
 #include <dumux/porousmediumflow/2p2c/implicit/model.hh>
 
+#include "propertydefaults.hh"
 
 namespace Dumux {
 
@@ -559,13 +559,13 @@ public:
                                        * cParams.elemVolVarsCur1[vertInElem1].massFraction(transportCompIdx1);
 
                 Scalar diffusiveFlux = bfNormal1.two_norm()
-                                       * evalBoundaryLayerConcentrationGradient(cParams, vertInElem1)
+                                       * globalProblem_.evalBoundaryLayerConcentrationGradient(cParams, vertInElem1)
                                        * (boundaryVars1.diffusionCoeff(transportCompIdx1)
                                          + boundaryVars1.eddyDiffusivity())
                                        * boundaryVars1.molarDensity()
                                        * FluidSystem::molarMass(transportCompIdx1);
 
-                const Scalar massTransferCoeff = evalMassTransferCoefficient(cParams, vertInElem1, vertInElem2);
+                const Scalar massTransferCoeff = globalProblem_.evalMassTransferCoefficient(cParams, vertInElem1, vertInElem2);
 
                 if (massTransferModel_ && globalProblem_.sdProblem1().isCornerPoint(globalPos1))
                 {
@@ -695,7 +695,7 @@ public:
             {
                 const Scalar diffusiveFlux =
                     bfNormal1.two_norm()
-                    * evalBoundaryLayerConcentrationGradient(cParams, vertInElem1)
+                    * globalProblem_.evalBoundaryLayerConcentrationGradient(cParams, vertInElem1)
                     * (boundaryVars1.diffusionCoeff(transportCompIdx1)
                        + boundaryVars1.eddyDiffusivity())
                     * boundaryVars1.molarDensity()
@@ -703,7 +703,7 @@ public:
 
                 Scalar advectiveFlux = normalMassFlux * cParams.elemVolVarsCur1[vertInElem1].massFraction(transportCompIdx1);
 
-                const Scalar massTransferCoeff = evalMassTransferCoefficient(cParams, vertInElem1, vertInElem2);
+                const Scalar massTransferCoeff = globalProblem_.evalMassTransferCoefficient(cParams, vertInElem1, vertInElem2);
 
                 if (globalProblem_.sdProblem1().isCornerPoint(globalPos1) && massTransferModel_)
                 {
@@ -887,88 +887,41 @@ public:
     /*!
      * \brief Returns a BoundaryLayerModel object
      *
-     * This function is reused in Child LocalOperators and used for extracting
-     * the respective boundary layer thickness.<br>
-     * \todo This function could be moved to a more model specific place, because
-     *       of its runtime parameters.
-     *
      * \param cParams a parameter container
      * \param scvIdx1 The local index of the sub-control volume of the Stokes domain
      */
     template<typename CParams>
+    DUNE_DEPRECATED_MSG("evalBoundaryLayerModel() is deprecated.")
     BoundaryLayerModel<TypeTag> evalBoundaryLayerModel(CParams cParams, const int scvIdx1) const
     {
-        // current position + additional virtual runup distance
-        const Scalar distance = cParams.fvGeometry1.subContVol[scvIdx1].global[0]
-                                + GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, BoundaryLayer, Offset);
-        BoundaryLayerModel<TypeTag> boundaryLayerModel(GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, FreeFlow, RefVelocity),
-                                                       distance,
-                                                       cParams.elemVolVarsCur1[scvIdx1].kinematicViscosity(),
-                                                       blModel_);
-        if (blModel_ == 1)
-            boundaryLayerModel.setConstThickness(GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, BoundaryLayer, ConstThickness));
-        if (blModel_ >= 4)
-            boundaryLayerModel.setYPlus(GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, BoundaryLayer, YPlus));
-        if (blModel_ >= 5)
-            boundaryLayerModel.setRoughnessLength(GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, BoundaryLayer, RoughnessLength));
-        if (blModel_ == 7)
-            boundaryLayerModel.setHydraulicDiameter(GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, BoundaryLayer, HydraulicDiameter));
-
-        return boundaryLayerModel;
+        globalProblem().evalBoundaryLayerModel(cParams, cParams);
     }
 
     /*!
      * \brief Returns the concentration gradient through the boundary layer
      *
-     * \todo This function could be moved to a more model specific place, because
-     *       of its runtime parameters.
-     *
      * \param cParams a parameter container
      * \param scvIdx1 The local index of the sub-control volume of the Stokes domain
      */
     template<typename CParams>
+    DUNE_DEPRECATED_MSG("evalBoundaryLayerConcentrationGradient() is deprecated.")
     Scalar evalBoundaryLayerConcentrationGradient(CParams cParams, const int scvIdx1) const
     {
-        static_assert(numComponents1 == 2,
-                      "This coupling condition is only implemented for two components.");
-        Scalar massFractionOut = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, FreeFlow, RefMassfrac);
-        Scalar M1 = FluidSystem::molarMass(transportCompIdx1);
-        Scalar M2 = FluidSystem::molarMass(phaseCompIdx1);
-        Scalar X2 = 1.0 - massFractionOut;
-        Scalar massToMoleDenominator = M2 + X2*(M1 - M2);
-        Scalar moleFractionOut = massFractionOut * M2 /massToMoleDenominator;
-
-        Scalar normalMoleFracGrad = cParams.elemVolVarsCur1[scvIdx1].moleFraction(transportCompIdx1)
-                                    - moleFractionOut;
-        return normalMoleFracGrad / evalBoundaryLayerModel(cParams, scvIdx1).massBoundaryLayerThickness();
+        globalProblem().evalBoundaryLayerConcentrationGradient(cParams, scvIdx1);
     }
 
     /*!
      * \brief Returns the mass transfer coefficient
      *
-     * This function is reused in Child LocalOperators.
-     * \todo This function could be moved to a more model specific place, because
-     *       of its runtime parameters.
-     *
      * \param cParams a parameter container
      * \param scvIdx1 The local index of the sub-control volume of the Stokes domain
      * \param scvIdx2 The local index of the sub-control volume of the Darcy domain
      */
     template<typename CParams>
+    DUNE_DEPRECATED_MSG("evalMassTransferCoefficient() is deprecated.")
     Scalar evalMassTransferCoefficient(CParams cParams, const int scvIdx1, const int scvIdx2) const
     {
-        MassTransferModel<TypeTag> massTransferModel(cParams.elemVolVarsCur2[scvIdx2].saturation(wPhaseIdx2),
-                                                     cParams.elemVolVarsCur2[scvIdx2].porosity(),
-                                                     evalBoundaryLayerModel(cParams, scvIdx1).massBoundaryLayerThickness(),
-                                                     massTransferModel_);
-        if (massTransferModel_ == 1)
-            massTransferModel.setMassTransferCoeff(GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, MassTransfer, Coefficient));
-        if (massTransferModel_ == 2 || massTransferModel_ == 4)
-            massTransferModel.setCharPoreRadius(GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, MassTransfer, CharPoreRadius));
-        if (massTransferModel_ == 3)
-            massTransferModel.setCapillaryPressure(cParams.elemVolVarsCur2[scvIdx2].capillaryPressure());
-
-        return massTransferModel.massTransferCoefficient();
+        globalProblem().evalMassTransferCoefficient(cParams, scvIdx1, scvIdx2);
     }
 
  protected:
diff --git a/dumux/multidomain/2cstokes2p2c/problem.hh b/dumux/multidomain/2cstokes2p2c/problem.hh
new file mode 100644
index 0000000000000000000000000000000000000000..f6739e16df48cc0acfd166b4213e2e395f093c5b
--- /dev/null
+++ b/dumux/multidomain/2cstokes2p2c/problem.hh
@@ -0,0 +1,172 @@
+// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+// vi: set et ts=4 sw=4 sts=4:
+/*****************************************************************************
+ *   See the file COPYING for full copying permissions.                      *
+ *                                                                           *
+ *   This program is free software: you can redistribute it and/or modify    *
+ *   it under the terms of the GNU General Public License as published by    *
+ *   the Free Software Foundation, either version 2 of the License, or       *
+ *   (at your option) any later version.                                     *
+ *                                                                           *
+ *   This program is distributed in the hope that it will be useful,         *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            *
+ *   GNU General Public License for more details.                            *
+ *                                                                           *
+ *   You should have received a copy of the GNU General Public License       *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>.   *
+ *****************************************************************************/
+/*!
+ * \file
+ * \brief The problem class for the coupling of a isothermal two-component Stokes
+ *        and a isothermal two-phase two-component Darcy model.
+ */
+
+#ifndef DUMUX_2C_STOKES_2P2C_PROBLEM_HH
+#define DUMUX_2C_STOKES_2P2C_PROBLEM_HH
+
+#include <dumux/freeflow/boundarylayermodel.hh>
+#include <dumux/freeflow/masstransfermodel.hh>
+#include <dumux/freeflow/stokesnc/properties.hh>
+#include <dumux/multidomain/problem.hh>
+#include <dumux/porousmediumflow/2p2c/implicit/properties.hh>
+
+#include "properties.hh"
+
+namespace Dumux
+{
+
+/*!
+ * \ingroup TwoPTwoCStokesTwoCModel
+ * \ingroup TwoPTwoCZeroEqTwoCModel
+ * \brief The problem class for the coupling of a isothermal two-component Stokes
+ *        and a isothermal two-phase two-component Darcy model.
+ */
+template <class TypeTag>
+class TwoCStokesTwoPTwoCProblem : public MultiDomainProblem<TypeTag>
+{
+    typedef MultiDomainProblem<TypeTag> ParentType;
+    typedef typename GET_PROP_TYPE(TypeTag, Problem) Implementation;
+
+    typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
+    typedef typename GET_PROP_TYPE(TypeTag, TimeManager) TimeManager;
+    typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem;
+
+    typedef typename GET_PROP_TYPE(TypeTag, SubDomain1TypeTag) Stokes2cTypeTag;
+    typedef typename GET_PROP_TYPE(TypeTag, SubDomain2TypeTag) TwoPTwoCTypeTag;
+    typedef typename GET_PROP_TYPE(Stokes2cTypeTag, Indices) Stokes2cIndices;
+    typedef typename GET_PROP_TYPE(TwoPTwoCTypeTag, Indices) TwoPTwoCIndices;
+
+    // Stokes
+    enum { numComponents1 = Stokes2cIndices::numComponents };
+    enum { // component indices
+        transportCompIdx1 = Stokes2cIndices::transportCompIdx, //!< Index of transported component
+        phaseCompIdx1 = Stokes2cIndices::phaseCompIdx    //!< Index of main component of the phase
+    };
+    // Darcy
+    enum { // phase indices
+        wPhaseIdx2 = TwoPTwoCIndices::wPhaseIdx,         //!< Index for the liquid phase
+    };
+
+public:
+    //! The constructor
+    template<class GridView>
+    TwoCStokesTwoPTwoCProblem(TimeManager &timeManager,
+                              GridView gridView)
+    : ParentType(timeManager, gridView)
+    {
+        blModel_ = GET_PARAM_FROM_GROUP(TypeTag, int, BoundaryLayer, Model);
+        massTransferModel_ = GET_PARAM_FROM_GROUP(TypeTag, int, MassTransfer, Model);
+    }
+
+    /*!
+     * \brief Returns a BoundaryLayerModel object
+     *
+     * \param cParams a parameter container
+     * \param scvIdx1 The local index of the sub-control volume of the Stokes domain
+     */
+    template<typename CParams>
+    BoundaryLayerModel<TypeTag> evalBoundaryLayerModel(CParams cParams, const int scvIdx1) const
+    {
+        // current position + additional virtual runup distance
+        const Scalar distance = cParams.fvGeometry1.subContVol[scvIdx1].global[0]
+                                + GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, BoundaryLayer, Offset);
+        BoundaryLayerModel<TypeTag> boundaryLayerModel(GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, FreeFlow, RefVelocity),
+                                                       distance,
+                                                       cParams.elemVolVarsCur1[scvIdx1].kinematicViscosity(),
+                                                       blModel_);
+        if (blModel_ == 1)
+            boundaryLayerModel.setConstThickness(GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, BoundaryLayer, ConstThickness));
+        if (blModel_ >= 4)
+            boundaryLayerModel.setYPlus(GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, BoundaryLayer, YPlus));
+        if (blModel_ >= 5)
+            boundaryLayerModel.setRoughnessLength(GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, BoundaryLayer, RoughnessLength));
+        if (blModel_ == 7)
+            boundaryLayerModel.setHydraulicDiameter(GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, BoundaryLayer, HydraulicDiameter));
+
+        return boundaryLayerModel;
+    }
+
+    /*!
+     * \brief Returns the concentration gradient through the boundary layer
+     *
+     * \param cParams a parameter container
+     * \param scvIdx1 The local index of the sub-control volume of the Stokes domain
+     */
+    template<typename CParams>
+    Scalar evalBoundaryLayerConcentrationGradient(CParams cParams, const int scvIdx1) const
+    {
+        static_assert(numComponents1 == 2,
+                      "This coupling condition is only implemented for two components.");
+        Scalar massFractionOut = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, FreeFlow, RefMassfrac);
+        Scalar M1 = FluidSystem::molarMass(transportCompIdx1);
+        Scalar M2 = FluidSystem::molarMass(phaseCompIdx1);
+        Scalar X2 = 1.0 - massFractionOut;
+        Scalar massToMoleDenominator = M2 + X2*(M1 - M2);
+        Scalar moleFractionOut = massFractionOut * M2 /massToMoleDenominator;
+
+        Scalar normalMoleFracGrad = cParams.elemVolVarsCur1[scvIdx1].moleFraction(transportCompIdx1)
+                                    - moleFractionOut;
+        return normalMoleFracGrad / asImp_().evalBoundaryLayerModel(cParams, scvIdx1).massBoundaryLayerThickness();
+    }
+
+    /*!
+     * \brief Returns the mass transfer coefficient
+     *
+     * \param cParams a parameter container
+     * \param scvIdx1 The local index of the sub-control volume of the Stokes domain
+     * \param scvIdx1 The local index of the sub-control volume of the Darcy domain
+     */
+    template<typename CParams>
+    Scalar evalMassTransferCoefficient(CParams cParams, const int scvIdx1, const int scvIdx2) const
+    {
+        MassTransferModel<TypeTag> massTransferModel(cParams.elemVolVarsCur2[scvIdx2].saturation(wPhaseIdx2),
+                                                     cParams.elemVolVarsCur2[scvIdx2].porosity(),
+                                                     asImp_().evalBoundaryLayerModel(cParams, scvIdx1).massBoundaryLayerThickness(),
+                                                     massTransferModel_);
+        if (massTransferModel_ == 1)
+            massTransferModel.setMassTransferCoeff(GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, MassTransfer, Coefficient));
+        if (massTransferModel_ == 2 || massTransferModel_ == 4)
+            massTransferModel.setCharPoreRadius(GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, MassTransfer, CharPoreRadius));
+        if (massTransferModel_ == 3)
+            massTransferModel.setCapillaryPressure(cParams.elemVolVarsCur2[scvIdx2].capillaryPressure());
+
+        return massTransferModel.massTransferCoefficient();
+    }
+
+private:
+    //! Returns the implementation of the problem (i.e. static polymorphism)
+    Implementation &asImp_()
+    { return *static_cast<Implementation *>(this); }
+
+    //! \copydoc asImp_()
+    const Implementation &asImp_() const
+    { return *static_cast<const Implementation *>(this); }
+
+    unsigned int blModel_;
+    unsigned int massTransferModel_;
+};
+
+} // namespace Dumux
+
+#endif // DUMUX_2C_STOKES_2P2C_PROBLEM_HH
diff --git a/test/multidomain/2cnistokes2p2cni/2cnistokes2p2cniproblem.hh b/test/multidomain/2cnistokes2p2cni/2cnistokes2p2cniproblem.hh
index b05808c40df5549eca6977862c12e0fd4f7fbeee..4fb12df0b4955a9893fa890b1fab4ef6fc510bdf 100644
--- a/test/multidomain/2cnistokes2p2cni/2cnistokes2p2cniproblem.hh
+++ b/test/multidomain/2cnistokes2p2cni/2cnistokes2p2cniproblem.hh
@@ -38,8 +38,8 @@
 #include <dune/grid/io/file/dgfparser.hh>
 
 #include <dumux/material/fluidsystems/h2oair.hh>
-#include <dumux/multidomain/problem.hh>
 #include <dumux/multidomain/2cnistokes2p2cni/localoperator.hh>
+#include <dumux/multidomain/2cnistokes2p2cni/problem.hh>
 #include <dumux/multidomain/2cnistokes2p2cni/propertydefaults.hh>
 
 #include <dumux/linear/seqsolverbackend.hh>
@@ -53,29 +53,29 @@
 namespace Dumux
 {
 template <class TypeTag>
-class TwoCNIStokesTwoPTwoCNIProblem;
+class TwoCNIStokesTwoPTwoCNITestProblem;
 
 namespace Properties
 {
-NEW_TYPE_TAG(TwoCNIStokesTwoPTwoCNIProblem, INHERITS_FROM(TwoCNIStokesTwoPTwoCNI));
+NEW_TYPE_TAG(TwoCNIStokesTwoPTwoCNITestProblem, INHERITS_FROM(TwoCNIStokesTwoPTwoCNI));
 
 // Set the grid type
-SET_TYPE_PROP(TwoCNIStokesTwoPTwoCNIProblem, Grid, Dune::YaspGrid<2, Dune::TensorProductCoordinates<typename GET_PROP_TYPE(TypeTag, Scalar), 2> >);
+SET_TYPE_PROP(TwoCNIStokesTwoPTwoCNITestProblem, Grid, Dune::YaspGrid<2, Dune::TensorProductCoordinates<typename GET_PROP_TYPE(TypeTag, Scalar), 2> >);
 
 // Set the global problem
-SET_TYPE_PROP(TwoCNIStokesTwoPTwoCNIProblem, Problem, TwoCNIStokesTwoPTwoCNIProblem<TypeTag>);
+SET_TYPE_PROP(TwoCNIStokesTwoPTwoCNITestProblem, Problem, TwoCNIStokesTwoPTwoCNITestProblem<TypeTag>);
 
 // Set the local coupling operator
-SET_TYPE_PROP(TwoCNIStokesTwoPTwoCNIProblem, MultiDomainCouplingLocalOperator,
+SET_TYPE_PROP(TwoCNIStokesTwoPTwoCNITestProblem, MultiDomainCouplingLocalOperator,
               Dumux::TwoCNIStokesTwoPTwoCNILocalOperator<TypeTag>);
 
 // Set the two sub-problems of the global problem
-SET_TYPE_PROP(TwoCNIStokesTwoPTwoCNIProblem, SubDomain1TypeTag, TTAG(Stokes2cniSubProblem));
-SET_TYPE_PROP(TwoCNIStokesTwoPTwoCNIProblem, SubDomain2TypeTag, TTAG(TwoPTwoCNISubProblem));
+SET_TYPE_PROP(TwoCNIStokesTwoPTwoCNITestProblem, SubDomain1TypeTag, TTAG(Stokes2cniSubProblem));
+SET_TYPE_PROP(TwoCNIStokesTwoPTwoCNITestProblem, SubDomain2TypeTag, TTAG(TwoPTwoCNISubProblem));
 
 // Set the global problem in the context of the two sub-problems
-SET_TYPE_PROP(Stokes2cniSubProblem, MultiDomainTypeTag, TTAG(TwoCNIStokesTwoPTwoCNIProblem));
-SET_TYPE_PROP(TwoPTwoCNISubProblem, MultiDomainTypeTag, TTAG(TwoCNIStokesTwoPTwoCNIProblem));
+SET_TYPE_PROP(Stokes2cniSubProblem, MultiDomainTypeTag, TTAG(TwoCNIStokesTwoPTwoCNITestProblem));
+SET_TYPE_PROP(TwoPTwoCNISubProblem, MultiDomainTypeTag, TTAG(TwoCNIStokesTwoPTwoCNITestProblem));
 
 // Set the other sub-problem for each of the two sub-problems
 SET_TYPE_PROP(Stokes2cniSubProblem, OtherSubDomainTypeTag, TTAG(TwoPTwoCNISubProblem));
@@ -85,14 +85,14 @@ SET_TYPE_PROP(TwoPTwoCNISubProblem, OtherSubDomainTypeTag, TTAG(Stokes2cniSubPro
 SET_TYPE_PROP(TwoPTwoCNISubProblem, SpatialParams, Dumux::TwoCNIStokesTwoPTwoCNISpatialParams<TypeTag>);
 
 // Set the fluid system to use complex relations (last argument)
-SET_TYPE_PROP(TwoCNIStokesTwoPTwoCNIProblem, FluidSystem,
+SET_TYPE_PROP(TwoCNIStokesTwoPTwoCNITestProblem, FluidSystem,
               FluidSystems::H2OAir<typename GET_PROP_TYPE(TypeTag, Scalar),
                                    Dumux::H2O<typename GET_PROP_TYPE(TypeTag, Scalar)>, true>);
 
 #ifdef HAVE_PARDISO
-SET_TYPE_PROP(TwoCNIStokesTwoPTwoCNIProblem, LinearSolver, PardisoBackend<TypeTag>);
+SET_TYPE_PROP(TwoCNIStokesTwoPTwoCNITestProblem, LinearSolver, PardisoBackend<TypeTag>);
 #else
-SET_TYPE_PROP(TwoCNIStokesTwoPTwoCNIProblem, LinearSolver, SuperLUBackend<TypeTag>);
+SET_TYPE_PROP(TwoCNIStokesTwoPTwoCNITestProblem, LinearSolver, SuperLUBackend<TypeTag>);
 #endif // HAVE_PARDISO
 }
 
@@ -109,11 +109,11 @@ SET_TYPE_PROP(TwoCNIStokesTwoPTwoCNIProblem, LinearSolver, SuperLUBackend<TypeTa
  * The initial and boundary conditions of the submodels are specified in the two subproblems,
  * 2p2cnisubproblem.hh and stokes2cnisubproblem.hh, which are accessible via the coupled problem.
  */
-template <class TypeTag = TTAG(TwoCNIStokesTwoPTwoCNIProblem) >
-class TwoCNIStokesTwoPTwoCNIProblem : public MultiDomainProblem<TypeTag>
+template <class TypeTag = TTAG(TwoCNIStokesTwoPTwoCNITestProblem) >
+class TwoCNIStokesTwoPTwoCNITestProblem : public TwoCNIStokesTwoPTwoCNIProblem<TypeTag>
 {
-    typedef TwoCNIStokesTwoPTwoCNIProblem<TypeTag> ThisType;
-    typedef MultiDomainProblem<TypeTag> ParentType;
+    typedef TwoCNIStokesTwoPTwoCNITestProblem<TypeTag> ThisType;
+    typedef TwoCNIStokesTwoPTwoCNIProblem<TypeTag> ParentType;
 
     typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
     typedef typename GET_PROP_TYPE(TypeTag, TimeManager) TimeManager;
@@ -134,7 +134,7 @@ public:
      * \param gridView The grid view
      */
     template<class GridView>
-    TwoCNIStokesTwoPTwoCNIProblem(TimeManager &timeManager,
+    TwoCNIStokesTwoPTwoCNITestProblem(TimeManager &timeManager,
                                   GridView gridView)
     : ParentType(timeManager, gridView)
     {
diff --git a/test/multidomain/2cnistokes2p2cni/test_2cnistokes2p2cni.cc b/test/multidomain/2cnistokes2p2cni/test_2cnistokes2p2cni.cc
index 80b9a876721a00633f6376c89fa884db2deedb20..3718717de818bd6f78ee264f01d94ed02c843720 100644
--- a/test/multidomain/2cnistokes2p2cni/test_2cnistokes2p2cni.cc
+++ b/test/multidomain/2cnistokes2p2cni/test_2cnistokes2p2cni.cc
@@ -69,7 +69,7 @@ void printUsage(const char *progName, const std::string &errorMsg)
 int main(int argc, char** argv)
 {
 #if (HAVE_SUPERLU || HAVE_UMFPACK)
-    typedef TTAG(TwoCNIStokesTwoPTwoCNIProblem) ProblemTypeTag;
+    typedef TTAG(TwoCNIStokesTwoPTwoCNITestProblem) ProblemTypeTag;
     return Dumux::start<ProblemTypeTag>(argc, argv, printUsage);
 #else
 #warning "You need to have SuperLU or UMFPack installed to run this test."
diff --git a/test/multidomain/2cnizeroeq2p2cni/2cnizeroeq2p2cniproblem.hh b/test/multidomain/2cnizeroeq2p2cni/2cnizeroeq2p2cniproblem.hh
index e30ffb212ee6b53baa0e0b2d6cf4f0279922d5c3..600bfa48745da4efeb4e72c15c1a3fe3720fbe8d 100644
--- a/test/multidomain/2cnizeroeq2p2cni/2cnizeroeq2p2cniproblem.hh
+++ b/test/multidomain/2cnizeroeq2p2cni/2cnizeroeq2p2cniproblem.hh
@@ -29,8 +29,8 @@
 #include <dune/grid/io/file/dgfparser.hh>
 
 #include <dumux/material/fluidsystems/h2oair.hh>
-#include <dumux/multidomain/problem.hh>
 #include <dumux/multidomain/2cnistokes2p2cni/localoperator.hh>
+#include <dumux/multidomain/2cnistokes2p2cni/problem.hh>
 #include <dumux/multidomain/2cnistokes2p2cni/propertydefaults.hh>
 
 #include "2cnizeroeq2p2cnispatialparameters.hh"
@@ -40,29 +40,29 @@
 namespace Dumux
 {
 template <class TypeTag>
-class TwoCNIZeroEqTwoPTwoCNIProblem;
+class TwoCNIZeroEqTwoPTwoCNITestProblem;
 
 namespace Properties
 {
-NEW_TYPE_TAG(TwoCNIZeroEqTwoPTwoCNIProblem, INHERITS_FROM(TwoCNIStokesTwoPTwoCNI));
+NEW_TYPE_TAG(TwoCNIZeroEqTwoPTwoCNITestProblem, INHERITS_FROM(TwoCNIStokesTwoPTwoCNI));
 
 // Set the grid type
-SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNIProblem, Grid, Dune::YaspGrid<2, Dune::TensorProductCoordinates<typename GET_PROP_TYPE(TypeTag, Scalar), 2> >);
+SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNITestProblem, Grid, Dune::YaspGrid<2, Dune::TensorProductCoordinates<typename GET_PROP_TYPE(TypeTag, Scalar), 2> >);
 
 // Set the global problem
-SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNIProblem, Problem, TwoCNIZeroEqTwoPTwoCNIProblem<TypeTag>);
+SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNITestProblem, Problem, TwoCNIZeroEqTwoPTwoCNITestProblem<TypeTag>);
 
 // Set the local coupling operator
-SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNIProblem, MultiDomainCouplingLocalOperator,
+SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNITestProblem, MultiDomainCouplingLocalOperator,
               Dumux::TwoCNIStokesTwoPTwoCNILocalOperator<TypeTag>);
 
 // Set the two sub-problems of the global problem
-SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNIProblem, SubDomain1TypeTag, TTAG(ZeroEq2cniSubProblem));
-SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNIProblem, SubDomain2TypeTag, TTAG(TwoPTwoCNISubProblem));
+SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNITestProblem, SubDomain1TypeTag, TTAG(ZeroEq2cniSubProblem));
+SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNITestProblem, SubDomain2TypeTag, TTAG(TwoPTwoCNISubProblem));
 
 // Set the global problem in the context of the two sub-problems
-SET_TYPE_PROP(ZeroEq2cniSubProblem, MultiDomainTypeTag, TTAG(TwoCNIZeroEqTwoPTwoCNIProblem));
-SET_TYPE_PROP(TwoPTwoCNISubProblem, MultiDomainTypeTag, TTAG(TwoCNIZeroEqTwoPTwoCNIProblem));
+SET_TYPE_PROP(ZeroEq2cniSubProblem, MultiDomainTypeTag, TTAG(TwoCNIZeroEqTwoPTwoCNITestProblem));
+SET_TYPE_PROP(TwoPTwoCNISubProblem, MultiDomainTypeTag, TTAG(TwoCNIZeroEqTwoPTwoCNITestProblem));
 
 // Set the other sub-problem for each of the two sub-problems
 SET_TYPE_PROP(ZeroEq2cniSubProblem, OtherSubDomainTypeTag, TTAG(TwoPTwoCNISubProblem));
@@ -72,15 +72,15 @@ SET_TYPE_PROP(TwoPTwoCNISubProblem, OtherSubDomainTypeTag, TTAG(ZeroEq2cniSubPro
 SET_TYPE_PROP(TwoPTwoCNISubProblem, SpatialParams, Dumux::TwoCNIZeroEqTwoPTwoCNISpatialParams<TypeTag>);
 
 // Set the fluid system to use complex relations (last argument)
-SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNIProblem, FluidSystem,
+SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNITestProblem, FluidSystem,
               FluidSystems::H2OAir<typename GET_PROP_TYPE(TypeTag, Scalar),
                                    Dumux::H2O<typename GET_PROP_TYPE(TypeTag, Scalar)>, true>);
 
 // If SuperLU is not available, the UMFPack solver is used:
 #ifdef HAVE_SUPERLU
-SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNIProblem, LinearSolver, SuperLUBackend<TypeTag>);
+SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNITestProblem, LinearSolver, SuperLUBackend<TypeTag>);
 #else
-SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNIProblem, LinearSolver, UMFPackBackend<TypeTag>);
+SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNITestProblem, LinearSolver, UMFPackBackend<TypeTag>);
 #endif
 }
 
@@ -95,10 +95,11 @@ SET_TYPE_PROP(TwoCNIZeroEqTwoPTwoCNIProblem, LinearSolver, UMFPackBackend<TypeTa
  * The initial and boundary conditions of the submodels are specified in the two subproblems,
  * 2p2csubproblem.hh and zeroeq2csubproblem.hh, which are accessible via the coupled problem.
  */
-template <class TypeTag = TTAG(TwoCNIZeroEqTwoPTwoCNIProblem) >
-class TwoCNIZeroEqTwoPTwoCNIProblem : public MultiDomainProblem<TypeTag>
+template <class TypeTag = TTAG(TwoCNIZeroEqTwoPTwoCNITestProblem) >
+class TwoCNIZeroEqTwoPTwoCNITestProblem : public TwoCNIStokesTwoPTwoCNIProblem<TypeTag>
 {
-    typedef MultiDomainProblem<TypeTag> ParentType;
+    typedef TwoCNIZeroEqTwoPTwoCNITestProblem<TypeTag> ThisType;
+    typedef TwoCNIStokesTwoPTwoCNIProblem<TypeTag> ParentType;
 
     typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
     typedef typename GET_PROP_TYPE(TypeTag, TimeManager) TimeManager;
@@ -119,8 +120,8 @@ public:
      * \param gridView The grid view
      */
     template<class GridView>
-    TwoCNIZeroEqTwoPTwoCNIProblem(TimeManager &timeManager,
-                                  GridView gridView)
+    TwoCNIZeroEqTwoPTwoCNITestProblem(TimeManager &timeManager,
+                                      GridView gridView)
     : ParentType(timeManager, gridView)
     {
         dtInit_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, TimeManager, DtInitial);
diff --git a/test/multidomain/2cnizeroeq2p2cni/test_2cnizeroeq2p2cni.cc b/test/multidomain/2cnizeroeq2p2cni/test_2cnizeroeq2p2cni.cc
index a8928e576ec2e05d8a27f0589e79de33629e51aa..d7d4d24f70e5421282dbd9f22c273c3940278b89 100644
--- a/test/multidomain/2cnizeroeq2p2cni/test_2cnizeroeq2p2cni.cc
+++ b/test/multidomain/2cnizeroeq2p2cni/test_2cnizeroeq2p2cni.cc
@@ -104,7 +104,7 @@ void printUsage(const char *progName, const std::string &errorMsg)
 int main(int argc, char** argv)
 {
 #if (HAVE_SUPERLU || HAVE_UMFPACK)
-    typedef TTAG(TwoCNIZeroEqTwoPTwoCNIProblem) ProblemTypeTag;
+    typedef TTAG(TwoCNIZeroEqTwoPTwoCNITestProblem) ProblemTypeTag;
     return Dumux::start<ProblemTypeTag>(argc, argv, printUsage);
 #else
 #warning "You need to have SuperLU or UMFPack installed to run this test."
diff --git a/test/multidomain/2cstokes2p2c/2cstokes2p2cproblem.hh b/test/multidomain/2cstokes2p2c/2cstokes2p2cproblem.hh
index 391d3a69333ea44a8c0abccfded2fb187daed640..d38dd88f0a7383a5231f936bab3bce6b03444cbc 100644
--- a/test/multidomain/2cstokes2p2c/2cstokes2p2cproblem.hh
+++ b/test/multidomain/2cstokes2p2c/2cstokes2p2cproblem.hh
@@ -38,8 +38,8 @@
 #include <dune/grid/io/file/dgfparser.hh>
 
 #include <dumux/material/fluidsystems/h2oair.hh>
-#include <dumux/multidomain/problem.hh>
 #include <dumux/multidomain/2cstokes2p2c/localoperator.hh>
+#include <dumux/multidomain/2cstokes2p2c/problem.hh>
 #include <dumux/multidomain/2cstokes2p2c/propertydefaults.hh>
 
 #ifdef HAVE_PARDISO
@@ -53,29 +53,29 @@
 namespace Dumux
 {
 template <class TypeTag>
-class TwoCStokesTwoPTwoCProblem;
+class TwoCStokesTwoPTwoCTestProblem;
 
 namespace Properties
 {
-NEW_TYPE_TAG(TwoCStokesTwoPTwoCProblem, INHERITS_FROM(TwoCStokesTwoPTwoC));
+NEW_TYPE_TAG(TwoCStokesTwoPTwoCTestProblem, INHERITS_FROM(TwoCStokesTwoPTwoC));
 
 // Set the grid type
-SET_TYPE_PROP(TwoCStokesTwoPTwoCProblem, Grid, Dune::YaspGrid<2, Dune::TensorProductCoordinates<typename GET_PROP_TYPE(TypeTag, Scalar), 2> >);
+SET_TYPE_PROP(TwoCStokesTwoPTwoCTestProblem, Grid, Dune::YaspGrid<2, Dune::TensorProductCoordinates<typename GET_PROP_TYPE(TypeTag, Scalar), 2> >);
 
 // Set the global problem
-SET_TYPE_PROP(TwoCStokesTwoPTwoCProblem, Problem, Dumux::TwoCStokesTwoPTwoCProblem<TypeTag>);
+SET_TYPE_PROP(TwoCStokesTwoPTwoCTestProblem, Problem, Dumux::TwoCStokesTwoPTwoCTestProblem<TypeTag>);
 
 // Set the local coupling operator
-SET_TYPE_PROP(TwoCStokesTwoPTwoCProblem, MultiDomainCouplingLocalOperator,
+SET_TYPE_PROP(TwoCStokesTwoPTwoCTestProblem, MultiDomainCouplingLocalOperator,
               Dumux::TwoCStokesTwoPTwoCLocalOperator<TypeTag>);
 
 // Set the two sub-problems of the global problem
-SET_TYPE_PROP(TwoCStokesTwoPTwoCProblem, SubDomain1TypeTag, TTAG(Stokes2cSubProblem));
-SET_TYPE_PROP(TwoCStokesTwoPTwoCProblem, SubDomain2TypeTag, TTAG(TwoPTwoCSubProblem));
+SET_TYPE_PROP(TwoCStokesTwoPTwoCTestProblem, SubDomain1TypeTag, TTAG(Stokes2cSubProblem));
+SET_TYPE_PROP(TwoCStokesTwoPTwoCTestProblem, SubDomain2TypeTag, TTAG(TwoPTwoCSubProblem));
 
 // Set the global problem in the context of the two sub-problems
-SET_TYPE_PROP(Stokes2cSubProblem, MultiDomainTypeTag, TTAG(TwoCStokesTwoPTwoCProblem));
-SET_TYPE_PROP(TwoPTwoCSubProblem, MultiDomainTypeTag, TTAG(TwoCStokesTwoPTwoCProblem));
+SET_TYPE_PROP(Stokes2cSubProblem, MultiDomainTypeTag, TTAG(TwoCStokesTwoPTwoCTestProblem));
+SET_TYPE_PROP(TwoPTwoCSubProblem, MultiDomainTypeTag, TTAG(TwoCStokesTwoPTwoCTestProblem));
 
 // Set the other sub-problem for each of the two sub-problems
 SET_TYPE_PROP(Stokes2cSubProblem, OtherSubDomainTypeTag, TTAG(TwoPTwoCSubProblem));
@@ -85,15 +85,15 @@ SET_TYPE_PROP(TwoPTwoCSubProblem, OtherSubDomainTypeTag, TTAG(Stokes2cSubProblem
 SET_TYPE_PROP(TwoPTwoCSubProblem, SpatialParams, Dumux::TwoCStokesTwoPTwoCSpatialParams<TypeTag>);
 
 // Set the fluid system to use simple relations (last argument)
-SET_TYPE_PROP(TwoCStokesTwoPTwoCProblem, FluidSystem,
+SET_TYPE_PROP(TwoCStokesTwoPTwoCTestProblem, FluidSystem,
               FluidSystems::H2OAir<typename GET_PROP_TYPE(TypeTag, Scalar),
                                    Dumux::H2O<typename GET_PROP_TYPE(TypeTag, Scalar)>, false>);
 
 // if you do not have PARDISO, the SuperLU solver is used:
 #ifdef HAVE_PARDISO
-SET_TYPE_PROP(TwoCStokesTwoPTwoCProblem, LinearSolver, PardisoBackend<TypeTag>);
+SET_TYPE_PROP(TwoCStokesTwoPTwoCTestProblem, LinearSolver, PardisoBackend<TypeTag>);
 #else
-SET_TYPE_PROP(TwoCStokesTwoPTwoCProblem, LinearSolver, SuperLUBackend<TypeTag>);
+SET_TYPE_PROP(TwoCStokesTwoPTwoCTestProblem, LinearSolver, SuperLUBackend<TypeTag>);
 #endif // HAVE_PARDISO
 }
 
@@ -110,11 +110,11 @@ SET_TYPE_PROP(TwoCStokesTwoPTwoCProblem, LinearSolver, SuperLUBackend<TypeTag>);
  * The initial and boundary conditions of the submodels are specified in the two subproblems,
  * 2p2csubproblem.hh and stokes2csubproblem.hh, which are accessible via the coupled problem.
  */
-template <class TypeTag = TTAG(TwoCStokesTwoPTwoCProblem) >
-class TwoCStokesTwoPTwoCProblem : public MultiDomainProblem<TypeTag>
+template <class TypeTag = TTAG(TwoCStokesTwoPTwoCTestProblem) >
+class TwoCStokesTwoPTwoCTestProblem : public TwoCStokesTwoPTwoCProblem<TypeTag>
 {
-    typedef TwoCStokesTwoPTwoCProblem<TypeTag> ThisType;
-    typedef MultiDomainProblem<TypeTag> ParentType;
+    typedef TwoCStokesTwoPTwoCTestProblem<TypeTag> ThisType;
+    typedef TwoCStokesTwoPTwoCProblem<TypeTag> ParentType;
 
     typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
     typedef typename GET_PROP_TYPE(TypeTag, TimeManager) TimeManager;
@@ -134,8 +134,8 @@ public:
      * \param gridView The grid view
      */
     template<class GridView>
-    TwoCStokesTwoPTwoCProblem(TimeManager &timeManager,
-                              GridView gridView)
+    TwoCStokesTwoPTwoCTestProblem(TimeManager &timeManager,
+                                  GridView gridView)
     : ParentType(timeManager, gridView)
     {
         interfacePosY_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, Grid, InterfacePosY);
diff --git a/test/multidomain/2cstokes2p2c/test_2cstokes2p2c.cc b/test/multidomain/2cstokes2p2c/test_2cstokes2p2c.cc
index 92207520053ed18b8a741020667a438868a3e680..e9deb26bca2b27a5db4f9d3d7da4ba6a5c6f8144 100644
--- a/test/multidomain/2cstokes2p2c/test_2cstokes2p2c.cc
+++ b/test/multidomain/2cstokes2p2c/test_2cstokes2p2c.cc
@@ -69,7 +69,7 @@ void printUsage(const char *progName, const std::string &errorMsg)
 int main(int argc, char** argv)
 {
 #if (HAVE_SUPERLU || HAVE_PARDISO)
-    typedef TTAG(TwoCStokesTwoPTwoCProblem) ProblemTypeTag;
+    typedef TTAG(TwoCStokesTwoPTwoCTestProblem) ProblemTypeTag;
     return Dumux::start<ProblemTypeTag>(argc, argv, printUsage);
 #else
 #warning "You need to have SuperLU or Pardiso installed to run this test."
diff --git a/test/multidomain/2czeroeq2p2c/2czeroeq2p2cproblem.hh b/test/multidomain/2czeroeq2p2c/2czeroeq2p2cproblem.hh
index d5dea14c09e31eae7ee2249273d2f56ccc91a56c..fa52a6114060b9f90f53f784bfed739a443f4a82 100644
--- a/test/multidomain/2czeroeq2p2c/2czeroeq2p2cproblem.hh
+++ b/test/multidomain/2czeroeq2p2c/2czeroeq2p2cproblem.hh
@@ -29,8 +29,8 @@
 #include <dune/grid/io/file/dgfparser.hh>
 
 #include <dumux/material/fluidsystems/h2oair.hh>
-#include <dumux/multidomain/problem.hh>
 #include <dumux/multidomain/2cstokes2p2c/localoperator.hh>
+#include <dumux/multidomain/2cstokes2p2c/problem.hh>
 #include <dumux/multidomain/2cstokes2p2c/propertydefaults.hh>
 
 #include "2czeroeq2p2cspatialparameters.hh"
@@ -40,29 +40,29 @@
 namespace Dumux
 {
 template <class TypeTag>
-class TwoCZeroEqTwoPTwoCProblem;
+class TwoCZeroEqTwoPTwoCTestProblem;
 
 namespace Properties
 {
-NEW_TYPE_TAG(TwoCZeroEqTwoPTwoCProblem, INHERITS_FROM(TwoCStokesTwoPTwoC));
+NEW_TYPE_TAG(TwoCZeroEqTwoPTwoCTestProblem, INHERITS_FROM(TwoCStokesTwoPTwoC));
 
 // Set the grid type
-SET_TYPE_PROP(TwoCZeroEqTwoPTwoCProblem, Grid, Dune::YaspGrid<2, Dune::TensorProductCoordinates<typename GET_PROP_TYPE(TypeTag, Scalar), 2> >);
+SET_TYPE_PROP(TwoCZeroEqTwoPTwoCTestProblem, Grid, Dune::YaspGrid<2, Dune::TensorProductCoordinates<typename GET_PROP_TYPE(TypeTag, Scalar), 2> >);
 
 // Set the global problem
-SET_TYPE_PROP(TwoCZeroEqTwoPTwoCProblem, Problem, TwoCZeroEqTwoPTwoCProblem<TypeTag>);
+SET_TYPE_PROP(TwoCZeroEqTwoPTwoCTestProblem, Problem, TwoCZeroEqTwoPTwoCTestProblem<TypeTag>);
 
 // Set the two sub-problems of the global problem
-SET_TYPE_PROP(TwoCZeroEqTwoPTwoCProblem, SubDomain1TypeTag, TTAG(ZeroEq2cSubProblem));
-SET_TYPE_PROP(TwoCZeroEqTwoPTwoCProblem, SubDomain2TypeTag, TTAG(TwoPTwoCSubProblem));
+SET_TYPE_PROP(TwoCZeroEqTwoPTwoCTestProblem, SubDomain1TypeTag, TTAG(ZeroEq2cSubProblem));
+SET_TYPE_PROP(TwoCZeroEqTwoPTwoCTestProblem, SubDomain2TypeTag, TTAG(TwoPTwoCSubProblem));
 
 // Set the local coupling operator
-SET_TYPE_PROP(TwoCZeroEqTwoPTwoCProblem, MultiDomainCouplingLocalOperator,
+SET_TYPE_PROP(TwoCZeroEqTwoPTwoCTestProblem, MultiDomainCouplingLocalOperator,
               Dumux::TwoCStokesTwoPTwoCLocalOperator<TypeTag>);
 
 // Set the global problem in the context of the two sub-problems
-SET_TYPE_PROP(ZeroEq2cSubProblem, MultiDomainTypeTag, TTAG(TwoCZeroEqTwoPTwoCProblem));
-SET_TYPE_PROP(TwoPTwoCSubProblem, MultiDomainTypeTag, TTAG(TwoCZeroEqTwoPTwoCProblem));
+SET_TYPE_PROP(ZeroEq2cSubProblem, MultiDomainTypeTag, TTAG(TwoCZeroEqTwoPTwoCTestProblem));
+SET_TYPE_PROP(TwoPTwoCSubProblem, MultiDomainTypeTag, TTAG(TwoCZeroEqTwoPTwoCTestProblem));
 
 // Set the other sub-problem for each of the two sub-problems
 SET_TYPE_PROP(ZeroEq2cSubProblem, OtherSubDomainTypeTag, TTAG(TwoPTwoCSubProblem));
@@ -72,15 +72,15 @@ SET_TYPE_PROP(TwoPTwoCSubProblem, OtherSubDomainTypeTag, TTAG(ZeroEq2cSubProblem
 SET_TYPE_PROP(TwoPTwoCSubProblem, SpatialParams, Dumux::TwoCZeroEqTwoPTwoCSpatialParams<TypeTag>);
 
 // Set the fluid system to use simple relations (last argument)
-SET_TYPE_PROP(TwoCZeroEqTwoPTwoCProblem, FluidSystem,
+SET_TYPE_PROP(TwoCZeroEqTwoPTwoCTestProblem, FluidSystem,
               FluidSystems::H2OAir<typename GET_PROP_TYPE(TypeTag, Scalar),
                                    Dumux::H2O<typename GET_PROP_TYPE(TypeTag, Scalar)>, false>);
 
 // If SuperLU is not available, the UMFPack solver is used:
 #ifdef HAVE_SUPERLU
-SET_TYPE_PROP(TwoCZeroEqTwoPTwoCProblem, LinearSolver, SuperLUBackend<TypeTag>);
+SET_TYPE_PROP(TwoCZeroEqTwoPTwoCTestProblem, LinearSolver, SuperLUBackend<TypeTag>);
 #else
-SET_TYPE_PROP(TwoCZeroEqTwoPTwoCProblem, LinearSolver, UMFPackBackend<TypeTag>);
+SET_TYPE_PROP(TwoCZeroEqTwoPTwoCTestProblem, LinearSolver, UMFPackBackend<TypeTag>);
 #endif
 }
 
@@ -95,10 +95,10 @@ SET_TYPE_PROP(TwoCZeroEqTwoPTwoCProblem, LinearSolver, UMFPackBackend<TypeTag>);
  * The initial and boundary conditions of the submodels are specified in the two subproblems,
  * 2p2csubproblem.hh and zeroeq2csubproblem.hh, which are accessible via the coupled problem.
  */
-template <class TypeTag = TTAG(TwoCZeroEqTwoPTwoCProblem) >
-class TwoCZeroEqTwoPTwoCProblem : public MultiDomainProblem<TypeTag>
+template <class TypeTag = TTAG(TwoCZeroEqTwoPTwoCTestProblem) >
+class TwoCZeroEqTwoPTwoCTestProblem : public TwoCStokesTwoPTwoCProblem<TypeTag>
 {
-    typedef MultiDomainProblem<TypeTag> ParentType;
+    typedef TwoCStokesTwoPTwoCProblem<TypeTag> ParentType;
 
     typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
     typedef typename GET_PROP_TYPE(TypeTag, TimeManager) TimeManager;
@@ -119,7 +119,7 @@ public:
      * \param gridView The grid view
      */
     template<class GridView>
-    TwoCZeroEqTwoPTwoCProblem(TimeManager &timeManager,
+    TwoCZeroEqTwoPTwoCTestProblem(TimeManager &timeManager,
                               GridView gridView)
     : ParentType(timeManager, gridView)
     {
diff --git a/test/multidomain/2czeroeq2p2c/test_2czeroeq2p2c.cc b/test/multidomain/2czeroeq2p2c/test_2czeroeq2p2c.cc
index a43adecf2ba88b49fcb4cc24a8aae83577f3def1..4f006e2b352026086c02350f2c12fe8c1d7dc4aa 100644
--- a/test/multidomain/2czeroeq2p2c/test_2czeroeq2p2c.cc
+++ b/test/multidomain/2czeroeq2p2c/test_2czeroeq2p2c.cc
@@ -94,7 +94,7 @@ void printUsage(const char *progName, const std::string &errorMsg)
 int main(int argc, char** argv)
 {
 #if (HAVE_SUPERLU || HAVE_UMFPACK)
-    typedef TTAG(TwoCZeroEqTwoPTwoCProblem) ProblemTypeTag;
+    typedef TTAG(TwoCZeroEqTwoPTwoCTestProblem) ProblemTypeTag;
     return Dumux::start<ProblemTypeTag>(argc, argv, printUsage);
 #else
 #warning "You need to have SuperLU or UMFPack installed to run this test."