diff --git a/dumux/multidomain/2cnistokes2p2cni/2p2cnicouplinglocalresidual.hh b/dumux/multidomain/2cnistokes2p2cni/2p2cnicouplinglocalresidual.hh
index bc12b54bced74e86b30f7f6d3500418f31e87af7..20ce4baad66cce17ec6d2f821ef2d95aabbc10c8 100644
--- a/dumux/multidomain/2cnistokes2p2cni/2p2cnicouplinglocalresidual.hh
+++ b/dumux/multidomain/2cnistokes2p2cni/2p2cnicouplinglocalresidual.hh
@@ -51,6 +51,7 @@ class TwoPTwoCNICouplingLocalResidual : public NILocalResidual<TypeTag>
     enum { dim = GridView::dimension };
     enum { numEq = GET_PROP_VALUE(TypeTag, NumEq) };
     enum { numPhases = GET_PROP_VALUE(TypeTag, NumPhases) };
+    enum { useMoles = GET_PROP_VALUE(TypeTag, UseMoles) };
     enum {
         pressureIdx = Indices::pressureIdx,
         temperatureIdx = Indices::temperatureIdx
@@ -122,13 +123,22 @@ public:
 
                     const VolumeVariables &volVars = this->curVolVars_()[scvIdx];
 
-                    // set pressure as part of the momentum coupling TODO is it potential bug to use nPhaseIdx?
+                    // set pressure as part of the momentum coupling
+                    static_assert(GET_PROP_VALUE(TypeTag, Formulation) == TwoPTwoCFormulation::pnsw,
+                                  "This coupling condition is only implemented for a pnsw formulation.");
                     if (this->bcTypes_(scvIdx).isCouplingDirichlet(massBalanceIdx))
                         this->residual_[scvIdx][massBalanceIdx] = volVars.pressure(nPhaseIdx);
 
-                    // set mass fraction TODO: add use of moles, check the function arguments: nPhaseIdx, wCompIdx
+                    // set mass/mole fraction for transported component
+                    static_assert(GET_PROP_VALUE(TypeTag, NumComponents) == 2,
+                                  "This coupling condition is only implemented for two components.");
                     if (this->bcTypes_(scvIdx).isCouplingDirichlet(contiWEqIdx))
-                        this->residual_[scvIdx][contiWEqIdx] = volVars.massFraction(nPhaseIdx, wCompIdx);
+                    {
+                        if (useMoles)
+                            this->residual_[scvIdx][contiWEqIdx] = volVars.moleFraction(nPhaseIdx, wCompIdx);
+                        else
+                            this->residual_[scvIdx][contiWEqIdx] = volVars.massFraction(nPhaseIdx, wCompIdx);
+                    }
 
                     // set temperature
                     if (this->bcTypes_(scvIdx).isCouplingDirichlet(energyEqIdx))
diff --git a/dumux/multidomain/2cnistokes2p2cni/stokesncnicouplinglocalresidual.hh b/dumux/multidomain/2cnistokes2p2cni/stokesncnicouplinglocalresidual.hh
index d12b78af3c2750e5aef2636a83a38f31e2b59e77..b359f4cc3d8997aef54ec88ebf20cfe63e5c785d 100644
--- a/dumux/multidomain/2cnistokes2p2cni/stokesncnicouplinglocalresidual.hh
+++ b/dumux/multidomain/2cnistokes2p2cni/stokesncnicouplinglocalresidual.hh
@@ -61,24 +61,13 @@ class StokesncniCouplingLocalResidual : public StokesncniLocalResidual<TypeTag>
     enum {
         //indices of the equations
         massBalanceIdx = Indices::massBalanceIdx, //!< Index of the mass balance
-
         momentumXIdx = Indices::momentumXIdx, //!< Index of the x-component of the momentum balance
         momentumYIdx = Indices::momentumYIdx, //!< Index of the y-component of the momentum balance
         momentumZIdx = Indices::momentumZIdx, //!< Index of the z-component of the momentum balance
         lastMomentumIdx = Indices::lastMomentumIdx, //!< Index of the last component of the momentum balance
-        transportEqIdx = Indices::transportEqIdx,//!< Index of the transport equation
-        energyEqIdx = Indices::energyEqIdx
-    };
-    enum {
-        //indices of phase and transported component
-        phaseIdx = Indices::phaseIdx,
-        transportCompIdx = Indices::transportCompIdx,
-        temperatureIdx = Indices::temperatureIdx
-    };
-    enum {
-        dimXIdx = Indices::dimXIdx, //!< Index for the first component of a vector
-        dimYIdx = Indices::dimYIdx, //!< Index for the second component of a vector
-        dimZIdx = Indices::dimZIdx //!< Index for the third component of a vector
+        transportEqIdx = Indices::transportEqIdx, //!< Index of the transport equation
+        energyEqIdx = Indices::energyEqIdx, //!< Index of the energy equation
+        conti0EqIdx = Indices::conti0EqIdx
     };
 
     typedef typename GridView::ctype CoordScalar;
@@ -169,7 +158,7 @@ public:
                     // set mole fraction for the transported components
                     for (int compIdx = 0; compIdx < numComponents; compIdx++)
                     {
-                        int eqIdx =  dim + compIdx; // TODO: ist das so richtig
+                        int eqIdx =  conti0EqIdx + compIdx;
                         if (eqIdx != massBalanceIdx)
                         {
                             if (bcTypes.isCouplingDirichlet(eqIdx))
diff --git a/dumux/multidomain/2cstokes2p2c/2cstokes2p2clocaloperator.hh b/dumux/multidomain/2cstokes2p2c/2cstokes2p2clocaloperator.hh
index c5a0b36bec017bd0bcfb0775e5a7e7ca435a827a..d2f8e4be1cf76cdad3fe5ca0d6cc3af681e3591a 100644
--- a/dumux/multidomain/2cstokes2p2c/2cstokes2p2clocaloperator.hh
+++ b/dumux/multidomain/2cstokes2p2c/2cstokes2p2clocaloperator.hh
@@ -197,7 +197,7 @@ public:
     enum { numPhases2 = GET_PROP_VALUE(TwoPTwoCTypeTag, NumPhases) };
     enum { // equation indices
         contiWEqIdx2 = TwoPTwoCIndices::contiWEqIdx,     //!< Index of the continuity equation for water component
-        massBalanceIdx2 = TwoPTwoCIndices::contiNEqIdx   //!< Index of the total mass balance (if one comopnent balance is replaced)
+        massBalanceIdx2 = TwoPTwoCIndices::contiNEqIdx   //!< Index of the total mass balance (if one component balance is replaced)
     };
     enum { // component indices
         wCompIdx2 = TwoPTwoCIndices::wCompIdx,           //!< Index of the liquids main component
diff --git a/dumux/multidomain/2cstokes2p2c/2p2ccouplinglocalresidual.hh b/dumux/multidomain/2cstokes2p2c/2p2ccouplinglocalresidual.hh
index 11b2c98e0c90ca722d5f5d7f4c758b0ad220c080..4cf3b7688acc34ea765899e81e3e087bae457c8a 100644
--- a/dumux/multidomain/2cstokes2p2c/2p2ccouplinglocalresidual.hh
+++ b/dumux/multidomain/2cstokes2p2c/2p2ccouplinglocalresidual.hh
@@ -51,6 +51,7 @@ class TwoPTwoCCouplingLocalResidual : public TwoPTwoCLocalResidual<TypeTag>
     enum { dim = GridView::dimension };
     enum { numEq = GET_PROP_VALUE(TypeTag, NumEq) };
     enum { numPhases = GET_PROP_VALUE(TypeTag, NumPhases) };
+    enum { useMoles = GET_PROP_VALUE(TypeTag, UseMoles) };
     enum {
         pressureIdx = Indices::pressureIdx
     };
@@ -122,13 +123,22 @@ public:
 
                     const VolumeVariables &volVars = this->curVolVars_()[scvIdx];
 
-                    // set pressure as part of the momentum coupling TODO is it potential bug to use nPhaseIdx?
+                    // set pressure as part of the momentum coupling
+                    static_assert(GET_PROP_VALUE(TypeTag, Formulation) == TwoPTwoCFormulation::pnsw,
+                                  "This coupling condition is only implemented for a pnsw formulation.");
                     if (this->bcTypes_(scvIdx).isCouplingDirichlet(massBalanceIdx))
                         this->residual_[scvIdx][massBalanceIdx] = volVars.pressure(nPhaseIdx);
 
-                    // set mass fraction TODO: add use of moles, check the function arguments: nPhaseIdx, wCompIdx
+                    // set mass/mole fraction for transported component
+                    static_assert(GET_PROP_VALUE(TypeTag, NumComponents) == 2,
+                                  "This coupling condition is only implemented for two components.");
                     if (this->bcTypes_(scvIdx).isCouplingDirichlet(contiWEqIdx))
-                        this->residual_[scvIdx][contiWEqIdx] = volVars.massFraction(nPhaseIdx, wCompIdx);
+                    {
+                        if (useMoles)
+                            this->residual_[scvIdx][contiWEqIdx] = volVars.moleFraction(nPhaseIdx, wCompIdx);
+                        else
+                            this->residual_[scvIdx][contiWEqIdx] = volVars.massFraction(nPhaseIdx, wCompIdx);
+                    }
                 }
             }
         }
diff --git a/dumux/multidomain/2cstokes2p2c/stokesnccouplinglocalresidual.hh b/dumux/multidomain/2cstokes2p2c/stokesnccouplinglocalresidual.hh
index 8a3701fb70c01d5d4e955c4f6642b045d01b55a3..cfd97aed23bdad391a224d0a65e8fb065f77635c 100644
--- a/dumux/multidomain/2cstokes2p2c/stokesnccouplinglocalresidual.hh
+++ b/dumux/multidomain/2cstokes2p2c/stokesnccouplinglocalresidual.hh
@@ -66,7 +66,8 @@ class StokesncCouplingLocalResidual : public StokesncLocalResidual<TypeTag>
         momentumYIdx = Indices::momentumYIdx, //!< Index of the y-component of the momentum balance
         momentumZIdx = Indices::momentumZIdx, //!< Index of the z-component of the momentum balance
         lastMomentumIdx = Indices::lastMomentumIdx, //!< Index of the last component of the momentum balance
-        transportEqIdx = Indices::transportEqIdx//!< Index of the transport equation
+        transportEqIdx = Indices::transportEqIdx, //!< Index of the transport equation
+        conti0EqIdx = Indices::conti0EqIdx
     };
     enum {
         //indices of phase and transported component
@@ -167,7 +168,7 @@ public:
                     // set mole or mass fraction for the transported components
                     for (int compIdx = 0; compIdx < numComponents; compIdx++)
                     {
-                        int eqIdx = dim + compIdx; // TODO: ist das so richtig
+                        int eqIdx = conti0EqIdx + compIdx;
                         if (eqIdx != massBalanceIdx)
                         {
                             if (bcTypes.isCouplingDirichlet(eqIdx))
diff --git a/dumux/multidomain/common/multidomainassembler.hh b/dumux/multidomain/common/multidomainassembler.hh
index 0794b0190d5b28067c21418dbc48a7247c5dd83c..b43099f5dd470ec292127a2c83370a10cb8b99d7 100644
--- a/dumux/multidomain/common/multidomainassembler.hh
+++ b/dumux/multidomain/common/multidomainassembler.hh
@@ -129,8 +129,6 @@ public:
                                                                      *mdSubProblem1_, *mdSubProblem2_, *mdCoupling_);
 
         matrix_ = std::make_shared<JacobianMatrix>(*mdGridOperator_);
-        *matrix_ = 0;
-
         residual_ = std::make_shared<SolutionVector>(*mdGridFunctionSpace_);
     }