diff --git a/apps/cpu/Multiphase/Multiphase.cpp b/apps/cpu/Multiphase/Multiphase.cpp
index 69c7efc0076a28c6add1a94ba6ad310bc3febccf..9d91cb857b6f0716ef667b44d3742b1e31223bea 100644
--- a/apps/cpu/Multiphase/Multiphase.cpp
+++ b/apps/cpu/Multiphase/Multiphase.cpp
@@ -82,6 +82,7 @@ void run(string configname)
         SPtr<LBMKernel> kernel;
 
         kernel = SPtr<LBMKernel>(new MultiphaseScratchCumulantLBMKernel());
+  //      kernel = SPtr<LBMKernel>(new MultiphaseCumulantLBMKernel());
 
         kernel->setWithForcing(true);
         kernel->setForcingX1(0.0);
diff --git a/src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.cpp
index f219a432a0535e4045cda7ef224485b97efc4282..e092301175713d16e9397cb1a5890967f83cb1c2 100644
--- a/src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.cpp
+++ b/src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.cpp
@@ -1285,6 +1285,8 @@ void MultiphaseCumulantLBMKernel::findNeighbors(CbArray3D<LBMReal, IndexerX3X2X1
         if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
             phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
         } else {
+
+            phi[k] = 0.;//16.03.2021 quick fix for uninitialized variables, might influence contact angle!
          }
     }
 }
diff --git a/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.cpp
index 9b398cbaafe38a8209cdc4ebff605940334176a1..a5b3bcbca51d51e12805977a7805ff34ea328585 100644
--- a/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.cpp
+++ b/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.cpp
@@ -197,10 +197,14 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
                         LBMReal mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
 
                         LBMReal mfbbb = (*this->zeroDistributionsH)(x1, x2, x3);
-                        (*phaseField)(x1, x2, x3) = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) +
-                                                    (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) +
-                                                    (mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) +
-                                                    (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
+                        (*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca)  + (mfcaa + mfacc))  ) +
+                                                    (((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) +
+                                                    ((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) +
+                                                    (mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb;
+						//(*phaseField)(x1, x2, x3) = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) +
+						//	(mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) +
+						//	(mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) +
+						//	(mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
                     }
                 }
             }
@@ -286,7 +290,7 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 						collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[REST] - phiH) / (phiH - phiL);
 
 
-                        //LBMReal mu = 2 * beta * phi[REST] * (phi[REST] - 1) * (2 * phi[REST] - 1) - kappa * nabla2_phi();
+                        LBMReal mu = 2 * beta * phi[REST] * (phi[REST] - 1) * (2 * phi[REST] - 1) - kappa * nabla2_phi();
 
                         //----------- Calculating Macroscopic Values -------------
                         LBMReal rho = rhoH + rhoToPhi * (phi[REST] - phiH);
@@ -355,6 +359,11 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 				   (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
 				   (mfbbc - mfbba))/rhoRef;
 
+			   ///surface tension force
+			   vvx += mu * dX1_phi*c1o2;
+			   vvy += mu * dX2_phi * c1o2;
+			   vvz += mu * dX3_phi * c1o2;
+
 			   //forcing 
 			   ///////////////////////////////////////////////////////////////////////////////////////////
 			   if (withForcing)
@@ -816,9 +825,9 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 
 			   ////////////////////////////////////////////////////////////////////////////////////
 			   //forcing
-			   //mfbaa = -mfbaa;
-			   //mfaba = -mfaba;
-			   //mfaab = -mfaab;
+			   mfbaa = -mfbaa;
+			   mfaba = -mfaba;
+			   mfaab = -mfaab;
 			   //////////////////////////////////////////////////////////////////////////////////////
 
 			   ////////////////////////////////////////////////////////////////////////////////////
@@ -2317,40 +2326,61 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 LBMReal MultiphaseScratchCumulantLBMKernel::gradX1_phi()
 {
     using namespace D3Q27System;
-    LBMReal sum = 0.0;
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-        sum += WEIGTH[k] * DX1[k] * phi[k];
-    }
-    return 3.0 * sum;
+	return 3.0* ((WEIGTH[TNE] * (((phi[TNE] - phi[BSW]) + (phi[BSE] - phi[TNW])) + ((phi[TSE] - phi[BNW]) + (phi[BNE] - phi[TSW])))
+		+ WEIGTH[NE] * (((phi[TE] - phi[BW]) + (phi[BE] - phi[TW])) + ((phi[SE] - phi[NW]) + (phi[NE] - phi[SW])))) +
+		+WEIGTH[N] * (phi[E] - phi[W]));
+    //LBMReal sum = 0.0;
+    //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
+    //    sum += WEIGTH[k] * DX1[k] * phi[k];
+    //}
+    //return 3.0 * sum;
 }
 
 LBMReal MultiphaseScratchCumulantLBMKernel::gradX2_phi()
 {
     using namespace D3Q27System;
-    LBMReal sum = 0.0;
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-        sum += WEIGTH[k] * DX2[k] * phi[k];
-    }
-    return 3.0 * sum;
+	return 3.0 * ((WEIGTH[TNE] * (((phi[TNE] - phi[BSW]) - (phi[BSE] - phi[TNW])) + ((phi[BNE] - phi[TSW])- (phi[TSE] - phi[BNW])))
+		+ WEIGTH[NE] * (((phi[TN] - phi[BS]) + (phi[BN] - phi[TS])) + ((phi[NE] - phi[SW])- (phi[SE] - phi[NW])))) +
+		+WEIGTH[N] * (phi[N] - phi[S]));
+    //LBMReal sum = 0.0;
+    //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
+    //    sum += WEIGTH[k] * DX2[k] * phi[k];
+    //}
+    //return 3.0 * sum;
 }
 
 LBMReal MultiphaseScratchCumulantLBMKernel::gradX3_phi()
 {
     using namespace D3Q27System;
-    LBMReal sum = 0.0;
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-        sum += WEIGTH[k] * DX3[k] * phi[k];
-    }
-    return 3.0 * sum;
+	return 3.0 * ((WEIGTH[TNE] * (((phi[TNE] - phi[BSW]) - (phi[BSE] - phi[TNW])) + ((phi[TSE] - phi[BNW]) - (phi[BNE] - phi[TSW])))
+		+ WEIGTH[NE] * (((phi[TE] - phi[BW]) - (phi[BE] - phi[TW])) + ((phi[TS] - phi[BN]) + (phi[TN] - phi[BS])))) +
+		+WEIGTH[N] * (phi[T] - phi[B]));
+    //LBMReal sum = 0.0;
+    //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
+    //    sum += WEIGTH[k] * DX3[k] * phi[k];
+    //}
+    //return 3.0 * sum;
 }
 
 LBMReal MultiphaseScratchCumulantLBMKernel::nabla2_phi()
 {
     using namespace D3Q27System;
     LBMReal sum = 0.0;
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-        sum += WEIGTH[k] * (phi[k] - phi[REST]);
-    }
+	sum += WEIGTH[TNE] * ((((phi[TNE] - phi[REST]) + (phi[BSW] - phi[REST])) + ((phi[TSW] - phi[REST]) + (phi[BNE] - phi[REST])))
+		+ (((phi[TNW] - phi[REST]) + (phi[BSE] - phi[REST])) + ((phi[TSE] - phi[REST]) + (phi[BNW] - phi[REST]))));
+	sum += WEIGTH[TN] * (
+			(((phi[TN] - phi[REST]) + (phi[BS] - phi[REST])) + ((phi[TS] - phi[REST]) + (phi[BN] - phi[REST])))
+		+	(((phi[TE] - phi[REST]) + (phi[BW] - phi[REST])) + ((phi[TW] - phi[REST]) + (phi[BE] - phi[REST])))
+		+	(((phi[NE] - phi[REST]) + (phi[SW] - phi[REST])) + ((phi[NW] - phi[REST]) + (phi[SW] - phi[REST])))
+		);
+	sum += WEIGTH[T] * (
+			((phi[T] - phi[REST]) + (phi[B] - phi[REST]))
+		+	((phi[N] - phi[REST]) + (phi[S] - phi[REST]))
+		+	((phi[E] - phi[REST]) + (phi[W] - phi[REST]))
+		);
+    //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
+    //    sum += WEIGTH[k] * (phi[k] - phi[REST]);
+    //}
     return 6.0 * sum;
 }
 
@@ -2425,6 +2455,7 @@ void MultiphaseScratchCumulantLBMKernel::findNeighbors(CbArray3D<LBMReal, Indexe
         if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
             phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
         } else {
+			phi[k] = 0.0;
          }
     }
 }