diff --git a/FunctionSpace/TriLagrangeReferenceSpace.cpp b/FunctionSpace/TriLagrangeReferenceSpace.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ede923049f4adc316109471299c263bf8d2741e2
--- /dev/null
+++ b/FunctionSpace/TriLagrangeReferenceSpace.cpp
@@ -0,0 +1,58 @@
+#include "TriLagrangeReferenceSpace.h"
+#include "MTriangle.h"
+
+using namespace std;
+
+TriLagrangeReferenceSpace::TriLagrangeReferenceSpace(unsigned int order){
+  // Vertex Definition //
+  nVertex = 3;
+
+  // Edge Definition //
+  nEdge   = 3;
+  refEdge = new unsigned int*[nEdge];
+
+  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      = 1;
+  refFace    = new unsigned int*[nFace];
+  refFace[0] = new unsigned int[3];
+
+  refFace[0][0] = 0;
+  refFace[0][1] = 1;
+  refFace[0][2] = 2;
+
+  // Init ReferenceSpace (Tri Face) //
+  init(0);
+
+  // Get Lagrange Node //
+  nNodePerEdge = 3 * (order - 1) / nEdge;
+  nNodePerFace =     (order - 1) * (order - 2) / 2 / nFace;
+  nNodePerCell = 0;
+
+  nNode =
+    nVertex +
+    nNodePerEdge * nEdge +
+    nNodePerFace * nFace +
+    nNodePerCell;
+
+  getLagrangeNode();
+}
+
+TriLagrangeReferenceSpace::~TriLagrangeReferenceSpace(void){
+  // Delete Ref Edge //
+  for(unsigned int i = 0; i < nEdge; i++)
+    delete[] refEdge[i];
+
+  delete[] refEdge;
+
+  // Delete Ref Face //
+  for(unsigned int i = 0; i < nFace; i++)
+    delete[] refFace[i];
+
+  delete[] refFace;
+}
diff --git a/FunctionSpace/TriLagrangeReferenceSpace.h b/FunctionSpace/TriLagrangeReferenceSpace.h
new file mode 100644
index 0000000000000000000000000000000000000000..bdd26b5cd3c887ad506839a9122bbde3b44d8bf0
--- /dev/null
+++ b/FunctionSpace/TriLagrangeReferenceSpace.h
@@ -0,0 +1,32 @@
+#ifndef _TRILAGRANGEREFERENCESPACE_H_
+#define _TRILAGRANGEREFERENCESPACE_H_
+
+#include "ReferenceSpaceLagrange.h"
+
+/**
+   @class TriLagrangeReferenceSpace
+   @brief ReferenceSpaceLagrange for a Triangle
+
+   This class implements a ReferenceSpaceLagrange
+   for a Triangle.
+ */
+
+class TriLagrangeReferenceSpace: public ReferenceSpaceLagrange{
+ public:
+  TriLagrangeReferenceSpace(unsigned int order);
+  virtual ~TriLagrangeReferenceSpace(void);
+};
+
+/**
+   @fn TriLagrangeReferenceSpace::TriLagrangeReferenceSpace
+   @param order A natural number
+
+   Instatiate a new ReferenceLagrangeSpace for a Triangle
+   of the given order
+   **
+
+   @fn TriReferenceLagrangeSpace::~TriReferenceLagrangeSpace
+   Deletes this TriReferenceSpace
+*/
+
+#endif