diff --git a/MathLib/Integration/GaussLegendreTet.cpp b/MathLib/Integration/GaussLegendreTet.cpp
index 0ad827751cf406b340520f272d52a9d5dc367df7..c261ffb2299b2526641ef7ac773d778a46d122dd 100644
--- a/MathLib/Integration/GaussLegendreTet.cpp
+++ b/MathLib/Integration/GaussLegendreTet.cpp
@@ -22,7 +22,7 @@ GaussLegendreTet<2>::X = {{ {{1./4., 1./4., 1./4.}},
                             {{1./2., 1./6., 1./6.}},
                             {{1./6., 1./2., 1./6.}},
                             {{1./6., 1./6., 1./2.}} }};
-double const GaussLegendreTet<2>::W[5] = {-0.133333333333333, 0.075, 0.075, 0.075, 0.075};
+double const GaussLegendreTet<2>::W[5] = {-2./15., 0.075, 0.075, 0.075, 0.075};
 
 const std::array<std::array<double, 3>, GaussLegendreTet<3>::NPoints>
 GaussLegendreTet<3>::X = {{ {{1./2., 1./2., 1./2.}},
diff --git a/NumLib/Fem/ShapeFunction/ShapeHex20-impl.h b/NumLib/Fem/ShapeFunction/ShapeHex20-impl.h
index 56c2d256270d9064c9ec736f260afe72c919bd26..23e89c1a86414978199b3019c038c0ea76db0e92 100644
--- a/NumLib/Fem/ShapeFunction/ShapeHex20-impl.h
+++ b/NumLib/Fem/ShapeFunction/ShapeHex20-impl.h
@@ -26,13 +26,10 @@ inline double dShapeFunctionHexHQ_Corner(const double r, const double s, const d
     {
     case 0:
         return 0.125 * (1 + s) * (1 + t) * (2.0 * r + s + t - 1.0);
-        break;
     case 1:
         return 0.125 * (1 + t) * (1 + r) * (2.0 * s + r + t - 1.0);
-        break;
     case 2:
         return 0.125 * (1 + r) * (1 + s) * (2.0 * t + s + r - 1.0);
-        break;
     }
     return 0.0;
 }
@@ -43,13 +40,10 @@ inline double dShapeFunctionHexHQ_Middle(const double r, const double s, const d
     {
     case 0:
         return -0.5 * r * (1 + s) * (1 + t);
-        break;
     case 1:
         return 0.25 * (1 - r * r) * (1 + t);
-        break;
     case 2:
         return 0.25 * (1 - r * r) * (1 + s);
-        break;
     }
     return 0.0;
 }
diff --git a/NumLib/Fem/ShapeFunction/ShapePrism6-impl.h b/NumLib/Fem/ShapeFunction/ShapePrism6-impl.h
index 1bf4456e80ef968be3b95c3a9f14a32d4b725486..63e00a801520a95eda8cf10e69f2bc963d54e399 100644
--- a/NumLib/Fem/ShapeFunction/ShapePrism6-impl.h
+++ b/NumLib/Fem/ShapeFunction/ShapePrism6-impl.h
@@ -32,25 +32,25 @@ void ShapePrism6::computeGradShapeFunction(const T_X &x, T_N &dN)
 	double t = x[2];
 	//  dN/dL1
 	dN[0] = -0.5 * (1.0 - t);
-	dN[1] = 0.5 * (1.0 - t);
+	dN[1] = -dN[0];
 	dN[2] = 0.0;
 	dN[3] = -0.5 * (1.0 + t);
-	dN[4] = 0.5 * (1.0 + t);
+	dN[4] = -dN[3];
 	dN[5] = 0.0;
 	//  dN/dL2
-	dN[6] = -0.5 * (1.0 - t);
+	dN[6] = dN[0];
 	dN[7] = 0.0;
-	dN[8] = 0.5 * (1.0 - t);
-	dN[9] = -0.5 * (1.0 + t);
+	dN[8] = -dN[0];
+	dN[9] = dN[3];
 	dN[10] = 0.0;
-	dN[11] = 0.5 * (1.0 + t);
+	dN[11] = -dN[3];
 	//  dN/dt
 	dN[12] = -0.5 * (1.0 - L1 - L2);
 	dN[13] = -0.5 * L1;
 	dN[14] = -0.5 * L2;
-	dN[15] = 0.5 * (1.0 - L1 - L2);
-	dN[16] = 0.5 * L1;
-	dN[17] = 0.5 * L2;
+	dN[15] = -dN[12];
+	dN[16] = -dN[13];
+	dN[17] = -dN[14];
 }
 
 }
diff --git a/NumLib/Fem/ShapeFunction/ShapePyra13-impl.h b/NumLib/Fem/ShapeFunction/ShapePyra13-impl.h
index ca671eaf7f543c74cbce4e16489732d9c9dedecf..32b94121bd51a672941d312f12b114266b3e1fa7 100644
--- a/NumLib/Fem/ShapeFunction/ShapePyra13-impl.h
+++ b/NumLib/Fem/ShapeFunction/ShapePyra13-impl.h
@@ -49,9 +49,9 @@ void ShapePyra13::computeGradShapeFunction(const T_X &x, T_N &dN)
 	dN[7] = -0.25 * r * (1.0 + s) * (1.0 - t) * (2.0 - s - s * t);
 	dN[8] = -0.125 * (1.0 - s * s) * (1.0 - t) * (1.0 + 2.0 * r - t + 2 * r * t);
 	dN[9] = -0.25 * (1.0 - s) * (1.0 - t * t);
-	dN[10] = 0.25 * (1.0 - s) * (1.0 - t * t);
+	dN[10] = -dN[9];
 	dN[11] = 0.25 * (1.0 + s) * (1.0 - t * t);
-	dN[12] = -0.25 * (1.0 + s) * (1.0 - t * t);
+	dN[12] = -dN[11];
 
 	//---dN/ds
 	dN[13] = 0.0625 * (1.0 - r) * (1.0 - t) * (1.0 + r + 6.0 * s + 4.0 * r * s + t - r * t + 2.0 * s * t + 4.0 * r * s * t);
@@ -65,8 +65,8 @@ void ShapePyra13::computeGradShapeFunction(const T_X &x, T_N &dN)
 	dN[21] = -0.25 * (1.0 - r) * s * (1.0 - t) * (2.0 + r + r * t);
 	dN[22] = -0.25 * (1.0 - r) * (1.0 - t * t);
 	dN[23] = -0.25 * (1.0 + r) * (1.0 - t * t);
-	dN[24] = 0.25 * (1.0 + r) * (1.0 - t * t);
-	dN[25] = 0.25 * (1.0 - r) * (1.0 - t * t);
+	dN[24] = -dN[23];
+	dN[25] = -dN[22];
 
 	//---dN/dt
 	dN[26] = 0.125 * (1.0 - r) * (1.0 - s) * (1.0 + r + s + 2.0 * t + r * t + s * t + 2.0 * r * s * t);
diff --git a/NumLib/Fem/ShapeFunction/ShapePyra5-impl.h b/NumLib/Fem/ShapeFunction/ShapePyra5-impl.h
index ca8192bab3d9909f443cdc6c3297aa508547fee6..96857f970b1cf687107c6b602ca3a0b1eddbacd2 100644
--- a/NumLib/Fem/ShapeFunction/ShapePyra5-impl.h
+++ b/NumLib/Fem/ShapeFunction/ShapePyra5-impl.h
@@ -32,15 +32,15 @@ void ShapePyra5::computeGradShapeFunction(const T_X &x, T_N &dN)
 	const double t = x[2];
 	//  dN/dL1
 	dN[0] = -0.125 * (1.0 - s) * (1.0 - t);
-	dN[1] =  0.125 * (1.0 - s) * (1.0 - t);
+	dN[1] = -dN[0];
 	dN[2] =  0.125 * (1.0 + s) * (1.0 - t);
-	dN[3] = -0.125 * (1.0 + s) * (1.0 - t);
+	dN[3] = -dN[2];
 	dN[4] =  0.0;
 	//  dN/dL2
 	dN[5] = -0.125 * (1.0 - r) * (1.0 - t);
 	dN[6] = -0.125 * (1.0 + r) * (1.0 - t);
-	dN[7] =  0.125 * (1.0 + r) * (1.0 - t);
-	dN[8] =  0.125 * (1.0 - r) * (1.0 - t);
+	dN[7] = -dN[6];
+	dN[8] = -dN[5];
 	dN[9] =  0.0;
 	//  dN/dt
 	dN[10] = -0.125 * (1.0 - r) * (1.0 - s);
diff --git a/NumLib/Fem/ShapeFunction/ShapeQuad8-impl.h b/NumLib/Fem/ShapeFunction/ShapeQuad8-impl.h
index 5dda78834f8383690bb5fbb37d2d69b724669865..453bb5bdd9e5475654521dbec2fd4b1e715a42d4 100644
--- a/NumLib/Fem/ShapeFunction/ShapeQuad8-impl.h
+++ b/NumLib/Fem/ShapeFunction/ShapeQuad8-impl.h
@@ -38,7 +38,7 @@ void ShapeQuad8::computeGradShapeFunction(const T_X &rs, T_N &dNdr)
     dNdr[4] = -r * (1 - s);
     dNdr[5] = (1 - s * s) * 0.5;
     dNdr[6] = -r * (1 + s);
-    dNdr[7] = -(1 - s * s) * 0.5;
+    dNdr[7] = -dNdr[5];
 
     //dN/ds
     dNdr[8] = (1 - r) * (r + 2 * s) * 0.25;
@@ -47,7 +47,7 @@ void ShapeQuad8::computeGradShapeFunction(const T_X &rs, T_N &dNdr)
     dNdr[11] = -(1 - r) * (r - 2 * s) * 0.25;
     dNdr[12] = -(1 - r * r) * 0.5;
     dNdr[13] = -(1 + r) * s;
-    dNdr[14] = (1 - r * r) * 0.5;
+    dNdr[14] = -dNdr[12];
     dNdr[15] = -(1 - r) * s;
 }
 
diff --git a/NumLib/Fem/ShapeFunction/ShapeQuad9-impl.h b/NumLib/Fem/ShapeFunction/ShapeQuad9-impl.h
index 77924e002ee1b281eb1e2a070187fe20872ba265..184187cce0ddf3f94bd8cbb071c6ed91e6be48f0 100644
--- a/NumLib/Fem/ShapeFunction/ShapeQuad9-impl.h
+++ b/NumLib/Fem/ShapeFunction/ShapeQuad9-impl.h
@@ -30,7 +30,7 @@ void ShapeQuad9::computeGradShapeFunction(const T_X &r, T_N &dNdr)
     dNdr[8] = -2.0 * r[0] * (1.0 - r[1] * r[1]);
     dNdr[7] = +0.5 * (1.0 - r[1] * r[1]) - 0.5 * dNdr[8];
     dNdr[6] = -1.0 * r[0] * (1.0 - r[1]) - 0.5 * dNdr[8];
-    dNdr[5] = -0.5 * (1.0 - r[1] * r[1]) - 0.5 * dNdr[8];
+    dNdr[5] = -dNdr[7];
     dNdr[4] = -1.0 * r[0] * (1.0 + r[1]) - 0.5 * dNdr[8];
     dNdr[3] = +0.25 * (1 - r[1]) - 0.5 * dNdr[6] - 0.5 * dNdr[7] - 0.25 * dNdr[8];
     dNdr[2] = -0.25 * (1 - r[1]) - 0.5 * dNdr[5] - 0.5 * dNdr[6] - 0.25 * dNdr[8];
@@ -41,7 +41,7 @@ void ShapeQuad9::computeGradShapeFunction(const T_X &r, T_N &dNdr)
     dNdr[16] = -1.0 * r[1] * (1.0 + r[0]) - 0.5 * dNdr[17];
     dNdr[15] = -0.5 * (1.0 - r[0] * r[0]) - 0.5 * dNdr[17];
     dNdr[14] = -1.0 * r[1] * (1.0 - r[0]) - 0.5 * dNdr[17];
-    dNdr[13] = +0.5 * (1 - r[0] * r[0]) - 0.5 * dNdr[17];
+    dNdr[13] = -dNdr[15];
     dNdr[12] = -0.25 * (1 + r[0]) - 0.5 * dNdr[15] - 0.5 * dNdr[16] - 0.25 * dNdr[17];
     dNdr[11] = -0.25 * (1 - r[0]) - 0.5 * dNdr[14] - 0.5 * dNdr[15] - 0.25 * dNdr[17];
     dNdr[10] = +0.25 * (1 - r[0]) - 0.5 * dNdr[13] - 0.5 * dNdr[14] - 0.25 * dNdr[17];
diff --git a/NumLib/Fem/ShapeFunction/ShapeTri6-impl.h b/NumLib/Fem/ShapeFunction/ShapeTri6-impl.h
index 70c793d22e4c03e1ca335dc2a1eca521bc8cd65c..63b1ae22c7f505649708f99fe1aad92ccefd3a60 100644
--- a/NumLib/Fem/ShapeFunction/ShapeTri6-impl.h
+++ b/NumLib/Fem/ShapeFunction/ShapeTri6-impl.h
@@ -25,7 +25,7 @@ template <class T_X, class T_N>
 void ShapeTri6::computeGradShapeFunction(const T_X &r, T_N &dNdr)
 {
     dNdr[0] = 4. * (r[0] + r[1]) - 3.;     // dN1/dL1
-    dNdr[6] = 4. * (r[0] + r[1]) - 3.;     // dN1/dL2
+    dNdr[6] = dNdr[0];                     // dN1/dL2
 
     dNdr[1] = 4. * r[0] - 1.;              // dN2/dL1
     dNdr[7] = 0.;                          // dN2/dL2
@@ -37,9 +37,9 @@ void ShapeTri6::computeGradShapeFunction(const T_X &r, T_N &dNdr)
     dNdr[9] = -4. * r[0];                  // dN4/dL2
 
     dNdr[4] = 4. * r[1];                   // dN5/dL1
-    dNdr[10] = 4. * r[0];                  // dN5/dL2
+    dNdr[10] = -dNdr[9];                   // dN5/dL2
 
-    dNdr[5] = -4. * r[1];                  // dN6/dL1
+    dNdr[5] = -dNdr[4];                  // dN6/dL1
     dNdr[11] = 4. * (1 - r[0] - 2. * r[1]); // dN6/dL2
 }