diff --git a/dune/mmdg/mmdg.hh b/dune/mmdg/mmdg.hh
index 824846fbba385fede657cd677757a457bf5b05ef..03077fd37829e3aa99894dafcd820aad78787c9a 100644
--- a/dune/mmdg/mmdg.hh
+++ b/dune/mmdg/mmdg.hh
@@ -156,6 +156,12 @@ private:
       const auto& iGeo = iElem.geometry();
       const auto& intersct = Base::gridView_.grid().asIntersection(iElem);
 
+      if ( Base::mapper_.index(intersct.inside())
+        > Base::mapper_.index(intersct.outside()) )
+      {
+        std::cout << "INDEX ERROR!\n\n";
+      }
+
       //get basis of the interface coordinate system for evaluation of
       //basis function phi_iElem,i with i=1,...,dim-1
       const InterfaceBasis iFrame =
@@ -410,8 +416,8 @@ private:
       }
 
       //evaluate
-      // int_iElem (Kparallel * grad(phi_iElem,i)) * grad(phi_iElem,j) ds
-      // = int_iElem (Kpar * tau_i) * tau_j ds
+      // int_iElem (Kparallel * grad(d phi_iElem,i)) * grad(d phi_iElem,j) ds
+      // = int_iElem (Kpar * tau_i) * tau_j ds //TODO: terms with grad(d)
       //using a quadrature rule for i,j = 1,...,dim-1
       for (const auto& ip : rule_Kpar)
       {
@@ -420,22 +426,26 @@ private:
 
         const Scalar quadratureFactor =
           ip.weight() * iGeo.integrationElement(qpLocal);
+        Scalar dEvaluation2 = Base::problem_.aperture(qpGlobal);
+        dEvaluation2 *= dEvaluation2;
 
         for (int i = 0; i < dim-1 ; i++)
         {
           Coordinate KparDotTau_i;
           Base::problem_.Kparallel(qpGlobal).mv(iFrame[i], KparDotTau_i);
 
-          for (int j = 0; j <= i; j++)
+          (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE + i + 1] +=
+            quadratureFactor * dEvaluation2 * ( KparDotTau_i * iFrame[i] );
+
+          for (int j = 0; j < i; j++)
           {
-            (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE + j + 1] +=
-              quadratureFactor * ( KparDotTau_i * iFrame[j] );
+            const Scalar interfaceUpdate =
+              quadratureFactor * dEvaluation2 * ( KparDotTau_i * iFrame[j] );
 
-            if (i != j)
-            {
-              (*Base::A)[iElemIdxSLE + j + 1][iElemIdxSLE + i + 1] +=
-                quadratureFactor * ( KparDotTau_i * iFrame[j] );
-            }
+            (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE + j + 1] +=
+              interfaceUpdate;
+            (*Base::A)[iElemIdxSLE + j + 1][iElemIdxSLE + i + 1] +=
+              interfaceUpdate;
           }
         }
       }
@@ -448,13 +458,17 @@ private:
         const auto& normal = intersct.centerUnitOuterNormal();
         Coordinate KparDotTau_i;
 
+        const Scalar dEvaluation = Base::problem_.aperture(center);
+        const Scalar dEvaluation2 = dEvaluation * dEvaluation;
+
         //evaluate the interface term
-        // int_intersct mu^Gamma * jump(phi_iElem,0) * jump(phi_iElem,0) dr
-        (*Base::A)[iElemIdxSLE][iElemIdxSLE] += mu;
+        // int_intersct mu^Gamma * d^2 * jump(phi_iElem,0)
+        //    * jump(phi_iElem,0) dr
+        (*Base::A)[iElemIdxSLE][iElemIdxSLE] += mu * dEvaluation2;
 
         if (intersct.neighbor()) //inner interface edge
         {
-          //evaluate the interface terms
+          //evaluate the interface terms //TODO terms with grad(d)
           // int_intersct mu^Gamma * jump(phi_iElem,i) * jump(phi_iElem,j) dr
           //and
           // -int_intersct avg(Kparallel * grad(phi_iElem,i))
@@ -467,23 +481,23 @@ private:
             const Scalar interfaceUpdate1 = mu * centerI;
             const Scalar interfaceUpdate2 = KparDotTau_i * normal;
             const Scalar interfaceUpdate3 =
-              interfaceUpdate1 - 0.5 * interfaceUpdate2;
+              dEvaluation2 * (interfaceUpdate1 - 0.5 * interfaceUpdate2);
 
             (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE] +=
               interfaceUpdate3;
             (*Base::A)[iElemIdxSLE][iElemIdxSLE + i + 1] +=
               interfaceUpdate3;
             (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE + i + 1] +=
-              centerI * (interfaceUpdate1 - interfaceUpdate2);
+              dEvaluation2 * centerI * (interfaceUpdate1 - interfaceUpdate2);
 
             for (int j = 0; j < i; i++)
             { //NOTE: only relevant for n=3, requires quadrature rule for n=3
               Coordinate KparDotTau_j;
               Base::problem_.Kparallel(center).mv(iFrame[j], KparDotTau_j);
-              const Scalar interfaceUpdate4 =
-                (center * iFrame[j]) * interfaceUpdate1
+              const Scalar interfaceUpdate4 = dEvaluation2 *
+                ((center * iFrame[j]) * interfaceUpdate1
                 - 0.5 * (interfaceUpdate2 * (center * iFrame[j])
-                + (KparDotTau_j * normal) * centerI);
+                + (KparDotTau_j * normal) * centerI));
 
               (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE + j + 1] +=
                 interfaceUpdate4;
@@ -503,7 +517,7 @@ private:
           const int neighborIdxSLE =
             (dim + 1) * Base::gridView_.size(0) + dim * neighborIdx;
 
-          //evaluate the interface terms
+          //evaluate the interface terms //TODO: terms with grad(d)
           // int_intersct mu^Gamma * jump(phi_iElem,i) * jump(phi_neighbor,j) dr
           //and
           // -int_intersct avg(Kparallel * grad(phi_iElem,i))
@@ -512,8 +526,8 @@ private:
           // -int_intersct avg(Kparallel * grad(phi_neighbor,i))
           //    * jump(phi_iElem,j) dr
           //for i,j = 0,...,dim-1
-          (*Base::A)[iElemIdxSLE][neighborIdxSLE] += -mu;
-          (*Base::A)[neighborIdxSLE][iElemIdxSLE] += -mu;
+          (*Base::A)[iElemIdxSLE][neighborIdxSLE] += -mu * dEvaluation2;
+          (*Base::A)[neighborIdxSLE][iElemIdxSLE] += -mu * dEvaluation2;
 
           for (int i = 0; i < dim - 1; i++)
           {
@@ -522,21 +536,21 @@ private:
             const Scalar interfaceUpdate1 = mu * centerI;
             const Scalar interfaceUpdate2 = KparDotTau_i * normal;
             const Scalar interfaceUpdate3 =
-              -interfaceUpdate1 + 0.5 * interfaceUpdate2;
+              dEvaluation2 * (-interfaceUpdate1 + 0.5 * interfaceUpdate2);
             const Scalar interfaceUpdate4 =
-              -interfaceUpdate1 - 0.5 * interfaceUpdate2;
+              dEvaluation2 * (-interfaceUpdate1 - 0.5 * interfaceUpdate2);
 
             (*Base::A)[iElemIdxSLE + i + 1][neighborIdxSLE] +=
               interfaceUpdate3;
             (*Base::A)[neighborIdxSLE][iElemIdxSLE + i + 1] +=
               interfaceUpdate3;
             (*Base::A)[neighborIdxSLE + i + 1][iElemIdxSLE] +=
-              -interfaceUpdate4;
+              interfaceUpdate4;
             (*Base::A)[iElemIdxSLE][neighborIdxSLE + i + 1] +=
-              -interfaceUpdate4;
+              interfaceUpdate4;
 
             (*Base::A)[iElemIdxSLE + i + 1][neighborIdxSLE + i + 1] +=
-              -centerI * interfaceUpdate1;
+              -centerI * dEvaluation2 * interfaceUpdate1;
 
             for (int j = 0; j < i; j++)
             { //NOTE: only relevant for n=3, requires quadrature rule
@@ -547,9 +561,9 @@ private:
               const Scalar interfaceUpdate6 = interfaceUpdate2 *
                 (center * iFrame[j]) - (KparDotTau_j * normal) * centerI;
               const Scalar interfaceUpdate7 =
-                -interfaceUpdate5 - 0.5 * interfaceUpdate6;
+                dEvaluation2 * (-interfaceUpdate5 - 0.5 * interfaceUpdate6);
               const Scalar interfaceUpdate8 =
-                -interfaceUpdate5 + 0.5 * interfaceUpdate6;
+                dEvaluation2 * (-interfaceUpdate5 + 0.5 * interfaceUpdate6);
 
               (*Base::A)[iElemIdxSLE + i + 1][neighborIdxSLE + j + 1] +=
                 interfaceUpdate7;
@@ -574,10 +588,10 @@ private:
           // int_intersct d * g * (mu * phi_iElem,i +
           //      (Kparallel * grad(phi_i,iElem)) * normal) dr
           //for i = 0,...,dim-1
-          const Scalar dEvaluation = Base::problem_.aperture(center);
-          const Scalar dgGamma = dEvaluation * Base::problem_.boundary(center);
+          const Scalar d2gGamma =
+            dEvaluation2 * Base::problem_.interfaceBoundary(center);
 
-          Base::b[iElemIdxSLE] += mu * dgGamma * dEvaluation;
+          Base::b[iElemIdxSLE] += mu * d2gGamma;
 
           for (int i = 0; i < dim - 1; i++)
           {
@@ -586,26 +600,27 @@ private:
             const Scalar interfaceUpdate1 = mu * centerI;
             const Scalar interfaceUpdate2 = KparDotTau_i * normal;
             const Scalar interfaceUpdate3 =
-              interfaceUpdate1 - interfaceUpdate2;
+              dEvaluation2 * (interfaceUpdate1 - interfaceUpdate2);
 
             Base::b[iElemIdxSLE + i + 1] +=
-              dgGamma * dEvaluation * (mu * centerI - interfaceUpdate2);
+              d2gGamma * (mu * centerI - interfaceUpdate2);
 
             (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE] +=
               interfaceUpdate3;
             (*Base::A)[iElemIdxSLE][iElemIdxSLE + i + 1] +=
               interfaceUpdate3;
             (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE + i + 1] +=
-              centerI * (interfaceUpdate1 - 2.0 * interfaceUpdate2);
+              centerI * dEvaluation2 *
+              (interfaceUpdate1 - 2.0 * interfaceUpdate2);
 
             for (int j = 0; j < i; i++)
             { //NOTE: only relevant for n=3, requires quadrature rule for n=3
               Coordinate KparDotTau_j;
               Base::problem_.Kparallel(center).mv(iFrame[j], KparDotTau_j);
-              const Scalar interfaceUpdate4 =
-                (center * iFrame[j]) * interfaceUpdate1
+              const Scalar interfaceUpdate4 = dEvaluation2 *
+                ((center * iFrame[j]) * interfaceUpdate1
                 - (interfaceUpdate2 * (center * iFrame[j])
-                  + (KparDotTau_j * normal) * centerI);
+                  + (KparDotTau_j * normal) * centerI));
 
               (*Base::A)[iElemIdxSLE + i + 1][iElemIdxSLE + j + 1] +=
                 interfaceUpdate4;