diff --git a/FunctionSpace/TetNodeBasis.cpp b/FunctionSpace/TetNodeBasis.cpp
index ed0b7371af6ad70b293f84c03b48358a25ddedd8..de93f406b15348705eb715c27ad4f45a13f28571 100644
--- a/FunctionSpace/TetNodeBasis.cpp
+++ b/FunctionSpace/TetNodeBasis.cpp
@@ -28,9 +28,9 @@ TetNodeBasis::TetNodeBasis(unsigned int order){
   nFunction = nVertex + nEdge + nFace + nCell;
 
   // Alloc Temporary Space //
-  const unsigned int orderMinus      = order - 1;
-  const unsigned int orderMinusTwo   = order - 2;
-  const unsigned int orderMinusThree = order - 3;
+  const int orderMinus      = order - 1;
+  const int orderMinusTwo   = order - 2;
+  const int orderMinusThree = order - 3;
 
   Polynomial* legendre     = new Polynomial[order];
   Polynomial* sclLegendre  = new Polynomial[order];
@@ -72,11 +72,11 @@ TetNodeBasis::TetNodeBasis(unsigned int order){
   }
 
   // Edge Based //
-  for(unsigned int s = 0; s < 2; s++){
+  for(unsigned int s = 0; s < nRefSpace; s++){
     unsigned int i = nVertex;
 
     for(unsigned int l = 1; l < order; l++){
-      for(unsigned int e = 0; e < 6; e++){
+      for(int e = 0; e < 6; e++){
 	(*(*basis)[s])[i] = 
 	  new Polynomial(intLegendre[l].compose
 			 (lagrange[(*(*edgeV[s])[e])[0]] - 
@@ -84,19 +84,18 @@ TetNodeBasis::TetNodeBasis(unsigned int order){
 			  , 
 			  lagrange[(*(*edgeV[s])[e])[0]] + 
 			  lagrange[(*(*edgeV[s])[e])[1]]));
-	
 	i++;
       }
     }
   }
 
   // Face Based //
-  for(unsigned int s = 0; s < 6; s++){
+  for(unsigned int s = 0; s < nRefSpace; s++){
     unsigned int i = nVertex + nEdge;
 
-    for(unsigned int l1 = 1; l1 < orderMinus; l1++){
-      for(unsigned int l2 = 0; l1 + l2 - 1 < orderMinusTwo; l2++){
-	for(unsigned int f = 0; f < 4; f++){
+    for(int l1 = 1; l1 < orderMinus; l1++){
+      for(int l2 = 0; l1 + l2 - 1 < orderMinusTwo; l2++){
+	for(int f = 0; f < 4; f++){
 	  Polynomial sum = 
 	    lagrange[(*(*faceV[s])[f])[0]] + 
 	    lagrange[(*(*faceV[s])[f])[1]] + 
@@ -116,7 +115,6 @@ TetNodeBasis::TetNodeBasis(unsigned int order){
 			   * 
 			   sclLegendre[l2].compose
 			   (lagrange[(*(*faceV[s])[f])[2]] * 2 - sum, sum));
-	
 	  i++;
 	}
       }
@@ -134,10 +132,9 @@ TetNodeBasis::TetNodeBasis(unsigned int order){
   for(unsigned int s = 0; s < nRefSpace; s++){
     unsigned int i = nVertex + nEdge + nFace;
   
-    for(unsigned int l1 = 1; l1 < orderMinusTwo; l1++){
-      for(unsigned int l2 = 0; l2 + l1 - 1 < orderMinusThree; l2++){
-	for(unsigned int l3 = 0; l3 + l2 + l1 - 1 < orderMinusThree; l3++){
-	  
+    for(int l1 = 1; l1 < orderMinusTwo; l1++){
+      for(int l2 = 0; l2 + l1 - 1 < orderMinusThree; l2++){
+	for(int l3 = 0; l3 + l2 + l1 - 1 < orderMinusThree; l3++){
 	  (*(*basis)[s])[i] = 
 	    new Polynomial(intLegendre[l1].compose(sub, add)             * 
 			   lagrange[2]                                   * 		 
@@ -145,7 +142,6 @@ TetNodeBasis::TetNodeBasis(unsigned int order){
 						   oneMinusFour)         *
 			   lagrange[3]                                   *
 			   legendre[l3].compose(twoFourMinusOne));
-	
 	  i++;
 	}
       }
diff --git a/FunctionSpace/TetReferenceSpace.cpp b/FunctionSpace/TetReferenceSpace.cpp
index 14835bb5b0fc07863025b605d2d774b3381a6f7b..dc8d039c3a1a87b8f9e59f1dc9e2d27260348a5d 100644
--- a/FunctionSpace/TetReferenceSpace.cpp
+++ b/FunctionSpace/TetReferenceSpace.cpp
@@ -1,5 +1,6 @@
 #include <sstream>
 #include "TetReferenceSpace.h"
+#include "MTetrahedron.h"
 
 using namespace std;
 
@@ -11,28 +12,23 @@ TetReferenceSpace::TetReferenceSpace(void){
   nEdge   = 6;
   refEdge = new unsigned int*[nEdge];
 
-  for(unsigned int i = 0; i < nEdge; i++)
-    refEdge[i] = new unsigned int[2];
-
-  refEdge[0][0] = 0; refEdge[0][1] = 1;
-  refEdge[1][0] = 1; refEdge[1][1] = 2;
-  refEdge[2][0] = 2; refEdge[2][1] = 0;
-  refEdge[3][0] = 0; refEdge[3][1] = 3;
-  refEdge[4][0] = 1; refEdge[4][1] = 3;
-  refEdge[5][0] = 2; refEdge[5][1] = 3;
-
+  for(unsigned int i = 0; i < nEdge; i++){
+    refEdge[i]    = new unsigned int[2];
+    refEdge[i][0] = MTetrahedron::edges_tetra(i, 0);
+    refEdge[i][1] = MTetrahedron::edges_tetra(i, 1); 
+  }
+  
   // Face Definition //
   nFace   = 4;
   refFace = new unsigned int*[nFace];
 
-  for(unsigned int i = 0; i < nFace; i++)
-    refFace[i] = new unsigned int[3];
+  for(unsigned int i = 0; i < nFace; i++){
+    refFace[i]    = new unsigned int[3];
+    refFace[i][0] = MTetrahedron::faces_tetra(i, 0); 
+    refFace[i][1] = MTetrahedron::faces_tetra(i, 1); 
+    refFace[i][2] = MTetrahedron::faces_tetra(i, 2);
+  }
 
-  refFace[0][0] = 0; refFace[0][1] = 1; refFace[0][2] = 2; 
-  refFace[1][0] = 0; refFace[1][1] = 1; refFace[1][2] = 3;
-  refFace[2][0] = 1; refFace[2][1] = 2; refFace[2][2] = 3;
-  refFace[3][0] = 2; refFace[3][1] = 0; refFace[3][2] = 3;
-  
   // Init All //
   init();
 }
diff --git a/FunctionSpace/TriEdgeBasis.cpp b/FunctionSpace/TriEdgeBasis.cpp
index 7d22185907cbb9e85ba1438050a54dfc6bb5e24d..b0a705c52c61ca35d3c09368b0f8746c66ab2402 100644
--- a/FunctionSpace/TriEdgeBasis.cpp
+++ b/FunctionSpace/TriEdgeBasis.cpp
@@ -25,8 +25,8 @@ TriEdgeBasis::TriEdgeBasis(unsigned int order){
   nFunction = nVertex + nEdge + nFace + nCell;
 
   // Alloc Some Space //
-  const unsigned int orderPlus  = order + 1;
-  const unsigned int orderMinus = order - 1;
+  const int orderPlus  = order + 1;
+  const int orderMinus = order - 1;
 
   Polynomial* legendre    = new Polynomial[orderPlus];
   Polynomial* intLegendre = new Polynomial[orderPlus];
@@ -57,7 +57,7 @@ TriEdgeBasis::TriEdgeBasis(unsigned int order){
 
   // Edge Based (Nedelec) //
   for(unsigned int s = 0; s < nRefSpace; s++){
-    for(unsigned int e = 0; e < 3; e++){
+    for(int e = 0; e < 3; e++){
       vector<Polynomial> tmp1 = lagrange[(*(*edgeV[s])[e])[1]].gradient();
       vector<Polynomial> tmp2 = lagrange[(*(*edgeV[s])[e])[0]].gradient();
 
@@ -82,8 +82,8 @@ TriEdgeBasis::TriEdgeBasis(unsigned int order){
   for(unsigned int s = 0; s < nRefSpace; s++){
     unsigned int i = 3;
 
-    for(unsigned int l = 1; l < orderPlus; l++){
-      for(unsigned int e = 0; e < 3; e++){
+    for(int l = 1; l < orderPlus; l++){
+      for(int e = 0; e < 3; e++){
 	(*(*basis)[s])[i] = 
 	  new vector<Polynomial>
 	  ((intLegendre[l].compose(lagrange[(*(*edgeV[s])[e])[0]] -
@@ -101,7 +101,7 @@ TriEdgeBasis::TriEdgeBasis(unsigned int order){
   // Preliminaries 
   const Polynomial p = lagrange[2] * 2 - Polynomial(1, 0, 0, 0);
   
-  for(unsigned int l = 0; l < orderPlus; l++){
+  for(int l = 0; l < orderPlus; l++){
     u[l] = intLegendre[l].compose(lagrange[1] - lagrange[0], 
 				  lagrange[0] + lagrange[1]);
     v[l] = legendre[l].compose(p);
@@ -131,7 +131,7 @@ TriEdgeBasis::TriEdgeBasis(unsigned int order){
   
     // Type 1
     for(unsigned int l1 = 1; l1 < order; l1++){
-      for(unsigned int l2 = 0; l2 + l1 - 1 < orderMinus; l2++){
+      for(int l2 = 0; l2 + (int)l1 - 1 < orderMinus; l2++){
 	vector<Polynomial> tmp1 = v[l2].gradient();
 	vector<Polynomial> tmp2 = u[l1].gradient();
 
@@ -155,7 +155,7 @@ TriEdgeBasis::TriEdgeBasis(unsigned int order){
   
     // Type 2
     for(unsigned int l1 = 1; l1 < order; l1++){
-      for(unsigned int l2 = 0; l2 + l1 - 1 < orderMinus; l2++){
+      for(int l2 = 0; l2 + (int)l1 - 1 < orderMinus; l2++){
 	vector<Polynomial> tmp1 = v[l2].gradient();
 	vector<Polynomial> tmp2 = u[l1].gradient();
 	
@@ -178,7 +178,7 @@ TriEdgeBasis::TriEdgeBasis(unsigned int order){
     }
 
     // Type 3
-    for(unsigned int l = 0; l < orderMinus; l++){
+    for(int l = 0; l < orderMinus; l++){
       vector<Polynomial> subGradL1L2V(subGradL1L2);
     
       subGradL1L2V[0].mul(v[l]);
diff --git a/FunctionSpace/TriNodeBasis.cpp b/FunctionSpace/TriNodeBasis.cpp
index 0fab56d2c0cc526d6b5257c05700810af664e954..ae3d6d8e5ea9e427fae7b5b30038fa644b32fb10 100644
--- a/FunctionSpace/TriNodeBasis.cpp
+++ b/FunctionSpace/TriNodeBasis.cpp
@@ -25,7 +25,7 @@ TriNodeBasis::TriNodeBasis(unsigned int order){
   nFunction = nVertex + nEdge + nFace + nCell;
 
   // Alloc Some Space //
-  const unsigned int orderMinus = order - 1;
+  const int orderMinus = order - 1;
 
   Polynomial* legendre    = new Polynomial[order];
   Polynomial* intLegendre = new Polynomial[order];
@@ -64,7 +64,7 @@ TriNodeBasis::TriNodeBasis(unsigned int order){
     unsigned int i = nVertex;
 
     for(unsigned int l = 1; l < order; l++){
-      for(unsigned int e = 0; e < 3; e++){
+      for(int e = 0; e < 3; e++){
 	(*(*basis)[s])[i] = 
 	  new Polynomial(intLegendre[l].compose(lagrange[(*(*edgeV[s])[e])[1]] -
 						lagrange[(*(*edgeV[s])[e])[0]]
@@ -78,16 +78,17 @@ TriNodeBasis::TriNodeBasis(unsigned int order){
   
   // Cell Based //
   const Polynomial p = (lagrange[2] * 2) - Polynomial(1, 0, 0, 0);
-  const unsigned int orderMinusTwo = order - 2;
+  const int orderMinusTwo = order - 2;
   
   for(unsigned int s = 0; s < nRefSpace; s++){
     unsigned int i = nVertex + nEdge;
     
-    for(unsigned int l1 = 1; l1 < orderMinus; l1++){
-      for(unsigned int l2 = 0; l2 + l1 - 1 < orderMinusTwo; l2++){
+    for(int l1 = 1; l1 < orderMinus; l1++){
+      for(int l2 = 0; l2 + l1 - 1 < orderMinusTwo; l2++){
 	(*(*basis)[s])[i] = 
 	  new Polynomial(intLegendre[l1].compose(lagrange[1] - lagrange[0], 
-						 lagrange[1] + lagrange[0]) * 
+						 lagrange[1] + lagrange[0]) 
+			 * 
 			 legendre[l2].compose(p) * lagrange[2]);
 	
 	i++;
diff --git a/FunctionSpace/TriReferenceSpace.cpp b/FunctionSpace/TriReferenceSpace.cpp
index a339a07c6ab6b8028bca4c0b22812ea96c45ceaa..f3b40cd9b598ae136da7d4653f189d75e2f7ab26 100644
--- a/FunctionSpace/TriReferenceSpace.cpp
+++ b/FunctionSpace/TriReferenceSpace.cpp
@@ -1,5 +1,6 @@
 #include <sstream>
 #include "TriReferenceSpace.h"
+#include "MTriangle.h"
 
 using namespace std;
 
@@ -11,12 +12,11 @@ TriReferenceSpace::TriReferenceSpace(void){
   nEdge   = 3;
   refEdge = new unsigned int*[nEdge];
 
-  for(unsigned int i = 0; i < nEdge; i++)
-    refEdge[i] = new unsigned int[2];
-
-  refEdge[0][0] = 0; refEdge[0][1] = 1;
-  refEdge[1][0] = 1; refEdge[1][1] = 2;
-  refEdge[2][0] = 2; refEdge[2][1] = 0;
+  for(unsigned int i = 0; i < nEdge; i++){
+    refEdge[i]    = new unsigned int[2];
+    refEdge[i][0] = MTriangle::edges_tri(i, 0);
+    refEdge[i][1] = MTriangle::edges_tri(i, 1); 
+  }
 
   // Face Definition //
   nFace   = 0;