diff --git a/FunctionSpace/Basis.h b/FunctionSpace/Basis.h
index c9094edb561e1e935c9f195fe96efc83b3671510..e6556f5ca793eea953619e1814a86837fa8cd6da 100644
--- a/FunctionSpace/Basis.h
+++ b/FunctionSpace/Basis.h
@@ -22,62 +22,52 @@ class Basis{
   int dim;
 
  public:
+  //! Deletes this Basis
+  //!
   virtual ~Basis(void);
-  
+
+  //! @return Returns the @em polynomial @em order of the Basis
   int getOrder(void) const;
+
+  //! @return Returns the @em type of the Basis:
+  //! @li 0 for 0-form
+  //! @li 1 for 1-form
+  //! @li 2 for 2-form
+  //! @li 3 for 3-form
+  //! @todo Check if the 'form numbering' is good
   int getType(void) const;
+  
+  //! @return Returns the number of Polynomial%s 
+  //! (or Vector%s of Polynomial%s) in the Basis
   int getSize(void) const;
+
+  //! @return Returns the node number of 
+  //! the @em geometric @em reference @em element
   int getNodeNbr(void) const;
+
+  //! @return Returns the @em dimension 
+  //! (1D, 2D or 3D) of the Basis
   int getDim(void) const;
-  
+
+  //! @return Returns:
+  //! @li @c true, if this is a 
+  //! @em scalar Basis (BasisScalar)
+  //! @li @c false, if this is a
+  //! @em vectorial Basis (BasisVector)
+  //!
+  //! @note
+  //! Scalar basis are sets of 
+  //! Polynomial%s@n
+  //! Vectorial basis are sets of 
+  //! Vector%s of Polynomial%s  
   bool isScalar(void) const;
 
  protected:
+  //! Instantiate a new Basis
+  //! @warning Users can't instantiate a Basis
   Basis(void);
 };
 
-/**
-   @fn Basis::~Basis(void)
-   @return Deletes this Basis
-
-   @fn int Basis::getOrder(void) const
-   @return Returns the @em polynomial @em order of the Basis
-
-   @fn int Basis::getType(void) const
-   @return Returns the @em type of the Basis:
-   @li 0 for 0-form
-   @li 1 for 1-form
-   @li 2 for 2-form
-   @li 3 for 3-form
-
-   @todo Check if the 'form numbering' is good
-   
-   @fn int Basis::getSize(void) const
-   @return Returns the number of Polynomial%s 
-   (or Vector%s of Polynomial%s) in the Basis
-
-   @fn int Basis::getNodeNbr(void) const
-   @return Returns the node number of 
-   the @em geometric @em reference @em element
- 
-   @fn int Basis::getDim(void) const
-   @return Returns the @em dimension 
-   (1D, 2D or 3D) of the Basis
-
-   @fn bool Basis::isScalar(void) const
-   @return Returns:
-   @li @c true, if this is a 
-   @em scalar Basis (BasisScalar)
-   @li @c false, if this is a
-   @em vectorial Basis (BasisVector)
-
-   @note
-   Scalar basis are sets of 
-   Polynomial%s@n
-   Vectorial basis are sets of 
-   Vector%s of Polynomial%s
-*/
-
 //////////////////////
 // Inline Functions //
 //////////////////////
diff --git a/FunctionSpace/BasisScalar.h b/FunctionSpace/BasisScalar.h
index 753e743d2997f09f704f101bd34253b303725fe2..0673f8a1d8f696f3b663698900d65deb1c941382 100644
--- a/FunctionSpace/BasisScalar.h
+++ b/FunctionSpace/BasisScalar.h
@@ -1,6 +1,7 @@
 #ifndef _BASISSCALAR_H_
 #define _BASISSCALAR_H_
 
+#include <vector>
 #include "Basis.h"
 #include "Polynomial.h"
 
@@ -15,33 +16,29 @@
 
 class BasisScalar: public Basis{
  protected:
-  Polynomial* basis;
+  std::vector<Polynomial>* basis;
 
  public:
+  //! Deletes this BasisScalar
+  //!
   virtual ~BasisScalar(void);
-
-  Polynomial* getBasis(void) const;
+  
+  //! @return Returns the set of @em Polynomial%s
+  //! defining this (scalar) Basis
+  const std::vector<Polynomial>& getBasis(void) const;
 
  protected:
+  //! Instantiate a new BasisScalar
+  //! @warning Users can't instantiate a BasisScalar
   BasisScalar(void);
 };
 
-/**
-   @fn BasisScalar::~BasisScalar
-   @return Deletes this Basis
-
-   @fn BasisScalar::getBasis
-   @return Returns the set of 
-   @em Polynomial%s
-   that defines this Basis
-*/
-
 //////////////////////
 // Inline Functions //
 //////////////////////
 
-inline Polynomial* BasisScalar::getBasis(void) const{
-  return basis;
+inline const std::vector<Polynomial>& BasisScalar::getBasis(void) const{
+  return *basis;
 }
 
 #endif
diff --git a/FunctionSpace/BasisVector.h b/FunctionSpace/BasisVector.h
index 293adb2a446c745b3503a8a1b0556fb6cd7a11f8..1f60d4ef697a40ebe475756b895d5b180b87b051 100644
--- a/FunctionSpace/BasisVector.h
+++ b/FunctionSpace/BasisVector.h
@@ -16,33 +16,29 @@
 
 class BasisVector: public Basis{
  protected:
-  std::vector<Polynomial>* basis;
+  std::vector<std::vector<Polynomial> >* basis;
 
  public:
+  //! Deletes this BasisVector
+  //!
   virtual ~BasisVector(void);
 
-  std::vector<Polynomial>* getBasis(void) const;
+  //! @return Returns the set of @em Polynomial%s
+  //! defining this (vectorial) Basis
+  const std::vector<std::vector<Polynomial> >& getBasis(void) const;
 
  protected:
+  //! Instantiate a new BasisVector
+  //! @warning Users can't instantiate a BasisVector
   BasisVector(void);
 };
 
-/**
-   @fn BasisVector::~BasisVector
-   @return Deletes this Basis
-
-   @fn BasisVector::getBasis
-   @return Returns the set of 
-   @em Vector%s @em of @em Polynomial%s
-   that defines this Basis
-*/
-
 //////////////////////
 // Inline Functions //
 //////////////////////
 
-inline std::vector<Polynomial>* BasisVector::getBasis(void) const{
-  return basis;
+inline const std::vector<std::vector<Polynomial> >& BasisVector::getBasis(void) const{
+  return *basis;
 }
 
 #endif
diff --git a/FunctionSpace/QuadEdgeBasis.cpp b/FunctionSpace/QuadEdgeBasis.cpp
index 9559139687852572d21ecc02f21d5a7f797e6ce9..f403d567f66da59b3eddacd12758ae19a80bf0fb 100644
--- a/FunctionSpace/QuadEdgeBasis.cpp
+++ b/FunctionSpace/QuadEdgeBasis.cpp
@@ -74,10 +74,10 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){
 
 
   // Basis //
-  basis = new std::vector<Polynomial>[size];
+  basis = new std::vector<std::vector<Polynomial> >(size);
 
   for(int i = 0; i < size; i++)
-    basis[i].resize(3);
+    (*basis)[i].resize(3);
 
 
   // Edge Based (Nedelec) // 
@@ -85,16 +85,16 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){
   Polynomial oneHalf(0.5, 0, 0, 0);
 
   for(int e = 0; e < 4; e++){
-    basis[i] = 
+    (*basis)[i] = 
       (liftingSub[e]).gradient();
     
-    basis[i][0].mul(lagrangeSum[e]);
-    basis[i][1].mul(lagrangeSum[e]);
-    basis[i][2].mul(lagrangeSum[e]);
+    (*basis)[i][0].mul(lagrangeSum[e]);
+    (*basis)[i][1].mul(lagrangeSum[e]);
+    (*basis)[i][2].mul(lagrangeSum[e]);
 
-    basis[i][0].mul(oneHalf);
-    basis[i][1].mul(oneHalf);
-    basis[i][2].mul(oneHalf);
+    (*basis)[i][0].mul(oneHalf);
+    (*basis)[i][1].mul(oneHalf);
+    (*basis)[i][2].mul(oneHalf);
 
     i++;
   }
@@ -102,7 +102,7 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){
   // Edge Based (High Order) //
   for(int l = 1; l < orderPlus; l++){
     for(int e = 0; e < 4; e++){
-      basis[i] = 
+      (*basis)[i] = 
 	(intLegendre[l].compose(liftingSub[e]) * lagrangeSum[e]).gradient();
      
       i++;
@@ -128,7 +128,7 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){
   // Cell Based (Type 1) //
   for(int l1 = 1; l1 < orderPlus; l1++){
     for(int l2 = 1; l2 < orderPlus; l2++){
-      basis[i] = (iLegendreX[l1] * iLegendreY[l2]).gradient();
+      (*basis)[i] = (iLegendreX[l1] * iLegendreY[l2]).gradient();
 
       i++;
     }
@@ -137,9 +137,9 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){
   // Cell Based (Type 2) //
   for(int l1 = 1; l1 < orderPlus; l1++){
     for(int l2 = 1; l2 < orderPlus; l2++){
-      basis[i][0] =  legendreX[l1] * iLegendreY[l2];
-      basis[i][1] = iLegendreX[l1] *  legendreY[l2] * -1;
-      basis[i][2] = zero;
+      (*basis)[i][0] =  legendreX[l1] * iLegendreY[l2];
+      (*basis)[i][1] = iLegendreX[l1] *  legendreY[l2] * -1;
+      (*basis)[i][2] = zero;
 
       i++;
     }
@@ -147,13 +147,13 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){
 
   // Cell Based (Type 3) //
   for(int l = 1, iPlus = i + order; l < orderPlus; l++, iPlus++){
-    basis[i][0] = iLegendreY[l];
-    basis[i][1] = zero;
-    basis[i][2] = zero;
+    (*basis)[i][0] = iLegendreY[l];
+    (*basis)[i][1] = zero;
+    (*basis)[i][2] = zero;
 
-    basis[iPlus][0] = zero;
-    basis[iPlus][1] = iLegendreX[l];
-    basis[iPlus][2] = zero;
+    (*basis)[iPlus][0] = zero;
+    (*basis)[iPlus][1] = iLegendreX[l];
+    (*basis)[iPlus][2] = zero;
 
     i++;
   }
@@ -175,7 +175,7 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){
 }
 
 QuadEdgeBasis::~QuadEdgeBasis(void){
-  delete[] basis;
+  delete basis;
 }
 
 /*
@@ -187,7 +187,7 @@ int main(void){
 
   QuadEdgeBasis b(P);
   
-  const std::vector<Polynomial>* basis = b.getBasis();
+  const std::vector<std::vector<Polynomial> >& basis = b.getBasis();
   
   printf("\n");
   printf("clear all;\n");
diff --git a/FunctionSpace/QuadEdgeBasis.h b/FunctionSpace/QuadEdgeBasis.h
index 7f65d404c668ed4270e3fb9a94ee51adc678ffe4..84d089cedbb07694d5c8b998ecab5d59c0decf84 100644
--- a/FunctionSpace/QuadEdgeBasis.h
+++ b/FunctionSpace/QuadEdgeBasis.h
@@ -17,17 +17,13 @@
 
 class QuadEdgeBasis: public BasisVector{
  public:
+  //! Returns a new Edge-Basis for Quads of the given order
+  //! @param order The order of the Basis
   QuadEdgeBasis(const int order);
+  
+  //! Deletes this Basis
+  //!
   virtual ~QuadEdgeBasis(void);
 };
 
-/**
-   @fn QuadEdgeBasis::QuadEdgeBasis(const int order)
-   @param order The order of the Basis
-   @return Returns a new Edge-Basis for Quads of the given order
-
-   @fn QuadEdgeBasis::~QuadEdgeBasis(void)
-   @return Deletes this Basis
-*/
-
 #endif
diff --git a/FunctionSpace/QuadNodeBasis.cpp b/FunctionSpace/QuadNodeBasis.cpp
index 73cecded561e54d8c0183e645558f2e6efb210da..d62a1cc017732e147ae8974c8196c495a113889c 100644
--- a/FunctionSpace/QuadNodeBasis.cpp
+++ b/FunctionSpace/QuadNodeBasis.cpp
@@ -37,22 +37,22 @@ QuadNodeBasis::QuadNodeBasis(const int order){
 
 
   // Basis //
-  basis = new Polynomial[size];
+  basis = new std::vector<Polynomial>(size);
 
   // Vertex Based (Lagrange) // 
-  basis[0] = 
+  (*basis)[0] = 
     (Polynomial(1, 0, 0, 0) - Polynomial(1, 1, 0, 0)) *
     (Polynomial(1, 0, 0, 0) - Polynomial(1, 0, 1, 0));
 
-  basis[1] = 
+  (*basis)[1] = 
     (Polynomial(1, 1, 0, 0)) *
     (Polynomial(1, 0, 0, 0) - Polynomial(1, 0, 1, 0));
 
-  basis[2] = 
+  (*basis)[2] = 
     (Polynomial(1, 1, 0, 0)) *
     (Polynomial(1, 0, 1, 0));
 
-  basis[3] = 
+  (*basis)[3] = 
     (Polynomial(1, 0, 0, 0) - Polynomial(1, 1, 0, 0)) *
     (Polynomial(1, 0, 1, 0));
   
@@ -61,8 +61,8 @@ QuadNodeBasis::QuadNodeBasis(const int order){
 
   for(int l = 1; l < order; l++){
     for(int e1 = 0, e2 = 1; e1 < 4; e1++, e2 = (e2 + 1) % 4){
-      basis[i] = 
-	legendre[l].compose(lifting[e2] - lifting[e1]) * (basis[e1] + basis[e2]);
+      (*basis)[i] = 
+	legendre[l].compose(lifting[e2] - lifting[e1]) * ((*basis)[e1] + (*basis)[e2]);
             
       i++;
     }
@@ -77,7 +77,7 @@ QuadNodeBasis::QuadNodeBasis(const int order){
 
   for(int l1 = 1; l1 < order; l1++){
     for(int l2 = 1; l2 < order; l2++){
-      basis[i] = legendre[l1].compose(px) * legendre[l2].compose(py);
+      (*basis)[i] = legendre[l1].compose(px) * legendre[l2].compose(py);
 
       i++;
     }
@@ -89,7 +89,7 @@ QuadNodeBasis::QuadNodeBasis(const int order){
 }
 
 QuadNodeBasis::~QuadNodeBasis(void){
-  delete[] basis;
+  delete basis;
 }
 
 /*
@@ -100,7 +100,7 @@ int main(void){
 
   QuadNodeBasis b(P);
   
-  const Polynomial* basis = b.getBasis();
+  const std::vector<Polynomial>& basis = b.getBasis();
   
   printf("\n");
   printf("clear all;\n");
diff --git a/FunctionSpace/QuadNodeBasis.h b/FunctionSpace/QuadNodeBasis.h
index e0cbf3c89c67650d7861e5cc1f7f253da277be6d..33b7bb57f455070054b6839bd9c71e877cb510a3 100644
--- a/FunctionSpace/QuadNodeBasis.h
+++ b/FunctionSpace/QuadNodeBasis.h
@@ -17,17 +17,13 @@
 
 class QuadNodeBasis: public BasisScalar{
  public:
+  //! Returns a new Node-Basis for Quads of the given order
+  //! @param order The order of the Basis
   QuadNodeBasis(const int order);
+
+  //! @return Deletes this Basis
+  //!
   virtual ~QuadNodeBasis(void);
 };
 
-/**
-   @fn QuadNodeBasis::QuadNodeBasis(const int order)
-   @param order The order of the Basis
-   @return Returns a new Node-Basis for Quads of the given order
-
-   @fn QuadNodeBasis::~QuadNodeBasis(void)
-   @return Deletes this Basis
-*/
-
 #endif
diff --git a/FunctionSpace/TriEdgeBasis.cpp b/FunctionSpace/TriEdgeBasis.cpp
index c97102565f4cfba4bf903ceab1d8fd48ffafba4c..3cd6fc66e842bd26bfaa6460b429e336c86186fa 100644
--- a/FunctionSpace/TriEdgeBasis.cpp
+++ b/FunctionSpace/TriEdgeBasis.cpp
@@ -48,10 +48,10 @@ TriEdgeBasis::TriEdgeBasis(const int order){
 
 
   // Basis //
-  basis = new std::vector<Polynomial>[size];
+  basis = new std::vector<std::vector<Polynomial> >(size);
 
   for(int i = 0; i < size; i++)
-    basis[i].resize(3);
+    (*basis)[i].resize(3);
 
 
   // Edge Based (Nedelec) //
@@ -63,15 +63,15 @@ TriEdgeBasis::TriEdgeBasis(const int order){
     tmp[1].mul(lagrange[i]);
     tmp[2].mul(lagrange[i]);
 
-    basis[i] = lagrange[i].gradient();
+    (*basis)[i] = lagrange[i].gradient();
 
-    basis[i][0].mul(lagrange[j]);
-    basis[i][1].mul(lagrange[j]);
-    basis[i][2].mul(lagrange[j]);      
+    (*basis)[i][0].mul(lagrange[j]);
+    (*basis)[i][1].mul(lagrange[j]);
+    (*basis)[i][2].mul(lagrange[j]);      
 
-    basis[i][0].sub(tmp[0]);
-    basis[i][1].sub(tmp[1]);
-    basis[i][2].sub(tmp[2]);
+    (*basis)[i][0].sub(tmp[0]);
+    (*basis)[i][1].sub(tmp[1]);
+    (*basis)[i][2].sub(tmp[2]);
 
     i++;
   }
@@ -79,7 +79,7 @@ TriEdgeBasis::TriEdgeBasis(const int order){
   // Edge Based (High Order) //
   for(int l = 1; l < orderPlus; l++){
     for(int e = 0; e < 3; e++){
-      basis[i] = 
+      (*basis)[i] = 
 	(intLegendre[l].compose(lagrangeSub[e], lagrangeSum[e])).gradient();
 
       i++;
@@ -103,15 +103,15 @@ TriEdgeBasis::TriEdgeBasis(const int order){
       tmp[1].mul(u[l1]);
       tmp[2].mul(u[l1]);
 
-      basis[i] = u[l1].gradient();
+      (*basis)[i] = u[l1].gradient();
       
-      basis[i][0].mul(v[l2]);
-      basis[i][1].mul(v[l2]);
-      basis[i][2].mul(v[l2]);
+      (*basis)[i][0].mul(v[l2]);
+      (*basis)[i][1].mul(v[l2]);
+      (*basis)[i][2].mul(v[l2]);
 
-      basis[i][0].add(tmp[0]);
-      basis[i][1].add(tmp[1]);
-      basis[i][2].add(tmp[2]);
+      (*basis)[i][0].add(tmp[0]);
+      (*basis)[i][1].add(tmp[1]);
+      (*basis)[i][2].add(tmp[2]);
       
       i++;
     }
@@ -125,15 +125,15 @@ TriEdgeBasis::TriEdgeBasis(const int order){
       tmp[1].mul(u[l1]);
       tmp[2].mul(u[l1]);
 
-      basis[i] = u[l1].gradient();
+      (*basis)[i] = u[l1].gradient();
 
-      basis[i][0].mul(v[l2]);
-      basis[i][1].mul(v[l2]);
-      basis[i][2].mul(v[l2]);
+      (*basis)[i][0].mul(v[l2]);
+      (*basis)[i][1].mul(v[l2]);
+      (*basis)[i][2].mul(v[l2]);
 
-      basis[i][0].sub(tmp[0]);
-      basis[i][1].sub(tmp[1]);
-      basis[i][2].sub(tmp[2]);
+      (*basis)[i][0].sub(tmp[0]);
+      (*basis)[i][1].sub(tmp[1]);
+      (*basis)[i][2].sub(tmp[2]);
  
       i++;
     }
@@ -141,11 +141,11 @@ TriEdgeBasis::TriEdgeBasis(const int order){
 
   // Cell Based (Type 3) //
   for(int l = 0; l < orderMinus; l++){
-    basis[i] = basis[0];
+    (*basis)[i] = (*basis)[0];
 
-    basis[i][0].mul(v[l]);
-    basis[i][1].mul(v[l]);
-    basis[i][2].mul(v[l]);
+    (*basis)[i][0].mul(v[l]);
+    (*basis)[i][1].mul(v[l]);
+    (*basis)[i][2].mul(v[l]);
     
     i++;
   }
@@ -161,7 +161,7 @@ TriEdgeBasis::TriEdgeBasis(const int order){
 }
 
 TriEdgeBasis::~TriEdgeBasis(void){
-  delete[] basis;
+  delete basis;
 }
 
 /*
@@ -173,7 +173,7 @@ int main(void){
 
   TriEdgeBasis b(P);
   
-  const std::vector<Polynomial>* basis = b.getBasis();
+  const std::vector<std::vector<Polynomial> >& basis = b.getBasis();
   
   printf("\n");
   printf("clear all;\n");
diff --git a/FunctionSpace/TriEdgeBasis.h b/FunctionSpace/TriEdgeBasis.h
index 12f1271792d4780d12e61b6548ffb78f092f5944..120ed864fc72a68e469b8ad93de3b083cbb4c885 100644
--- a/FunctionSpace/TriEdgeBasis.h
+++ b/FunctionSpace/TriEdgeBasis.h
@@ -17,18 +17,13 @@
 
 class TriEdgeBasis: public BasisVector{
  public:
+  //! Returns a new Edge-Basis for Triangles of the given order
+  //! @param order The order of the Basis
   TriEdgeBasis(const int order);
+  
+  //! Deletes this Basis
+  //!
   virtual ~TriEdgeBasis(void);
 };
 
-
-/**
-   @fn TriEdgeBasis::TriEdgeBasis(const int order)
-   @param order The order of the Basis
-   @return Returns a new Edge-Basis for Triangles of the given order
-
-   @fn TriEdgeBasis::~TriEdgeBasis(void)
-   @return Deletes this Basis
-*/
-
 #endif
diff --git a/FunctionSpace/TriNedelecBasis.cpp b/FunctionSpace/TriNedelecBasis.cpp
index d320b29f6a94c873f9a8eee2c5b5abced3e74f24..dba1d667bb6f7f30930a865760e2bc7b27f3372a 100644
--- a/FunctionSpace/TriNedelecBasis.cpp
+++ b/FunctionSpace/TriNedelecBasis.cpp
@@ -21,10 +21,10 @@ TriNedelecBasis::TriNedelecBasis(void){
     Polynomial(1, 0, 1, 0);
 
   // Basis //
-  basis = new std::vector<Polynomial>[size];
+  basis = new std::vector<std::vector<Polynomial> >(size);
 
   for(int i = 0; i < size; i++)
-    basis[i].resize(3);
+    (*basis)[i].resize(3);
 
   for(int i = 0, j = 1; i < 3; i++, j = (j + 1) % 3){
     std::vector<Polynomial> tmp = lagrange[j].gradient();
@@ -32,15 +32,15 @@ TriNedelecBasis::TriNedelecBasis(void){
     tmp[1].mul(lagrange[i]);
     tmp[2].mul(lagrange[i]);
 
-    basis[i] = lagrange[i].gradient();
+    (*basis)[i] = lagrange[i].gradient();
 
-    basis[i][0].mul(lagrange[j]);
-    basis[i][1].mul(lagrange[j]);
-    basis[i][2].mul(lagrange[j]);
+    (*basis)[i][0].mul(lagrange[j]);
+    (*basis)[i][1].mul(lagrange[j]);
+    (*basis)[i][2].mul(lagrange[j]);
    
-    basis[i][0].sub(tmp[0]);
-    basis[i][1].sub(tmp[1]);
-    basis[i][2].sub(tmp[2]);
+    (*basis)[i][0].sub(tmp[0]);
+    (*basis)[i][1].sub(tmp[1]);
+    (*basis)[i][2].sub(tmp[2]);
   }
 
   // Free Temporary Sapce //
@@ -48,7 +48,7 @@ TriNedelecBasis::TriNedelecBasis(void){
 }
 
 TriNedelecBasis::~TriNedelecBasis(void){
-  delete[] basis;
+  delete basis;
 }
 
 /*
@@ -60,7 +60,7 @@ int main(void){
 
   TriNedelecBasis b;
   
-  const std::vector<Polynomial>* basis = b.getBasis();
+  const std::vector<std::vector<Polynomial> >& basis = b.getBasis();
   
   printf("\n");
   printf("clear all;\n");
diff --git a/FunctionSpace/TriNedelecBasis.h b/FunctionSpace/TriNedelecBasis.h
index 65179c78ad0f2fdf2bdaa699bf6ed198058fee89..f23a77e64dbd676b46125d9d425d8895e14936d6 100644
--- a/FunctionSpace/TriNedelecBasis.h
+++ b/FunctionSpace/TriNedelecBasis.h
@@ -13,17 +13,13 @@
 
 class TriNedelecBasis: public BasisVector{
  public:
+  //! Returns a new Nedelec Basis for Triangles
+  //!
   TriNedelecBasis(void);
+  
+  //! Deletes this Basis
+  //!
   virtual ~TriNedelecBasis(void);
 };
 
-
-/**
-   @fn TriNedelecBasis::TriNedelecBasis
-   @return Returns a new Nedelec Basis for Triangles
-
-   @fn TriNedelecBasis::~TriNedelecBasis(void)
-   @return Deletes this Basis
-*/
-
 #endif
diff --git a/FunctionSpace/TriNodeBasis.cpp b/FunctionSpace/TriNodeBasis.cpp
index ef000f573acc80806be24c0c061d8599aa3c6ca7..14e3c49e92d178c6da5ef21e9c13c1e769683943 100644
--- a/FunctionSpace/TriNodeBasis.cpp
+++ b/FunctionSpace/TriNodeBasis.cpp
@@ -24,26 +24,26 @@ TriNodeBasis::TriNodeBasis(const int order){
  
 
   // Basis //
-  basis = new Polynomial[size];
+  basis = new std::vector<Polynomial>(size);
 
   // Vertex Based (Lagrange) // 
-  basis[0] = 
+  (*basis)[0] = 
     Polynomial(1, 0, 0, 0) - Polynomial(1, 1, 0, 0) - Polynomial(1, 0, 1, 0);
 
-  basis[1] = 
+  (*basis)[1] = 
     Polynomial(1, 1, 0, 0);
 
-  basis[2] = 
+  (*basis)[2] = 
     Polynomial(1, 0, 1, 0);
 
   
   // Lagrange Sum //
   for(int i = 0, j = 1; i < 3; i++, j = (j + 1) % 3)
-    lagrangeSum[i] = basis[i] + basis[j];
+    lagrangeSum[i] = (*basis)[i] + (*basis)[j];
 
   // Lagrange Sub //
   for(int i = 0, j = 1; i < 3; i++, j = (j + 1) % 3)
-    lagrangeSub[i] = basis[j] - basis[i];
+    lagrangeSub[i] = (*basis)[j] - (*basis)[i];
 
   
   // Edge Based //
@@ -51,7 +51,7 @@ TriNodeBasis::TriNodeBasis(const int order){
 
   for(int l = 1; l < order; l++){
     for(int e = 0; e < 3; e++){
-      basis[i] = 
+      (*basis)[i] = 
 	intLegendre[l].compose(lagrangeSub[e], lagrangeSum[e]);
             
       i++;
@@ -59,14 +59,14 @@ TriNodeBasis::TriNodeBasis(const int order){
   }
 
   // Cell Based //
-  Polynomial p             = basis[2] * 2 - Polynomial(1, 0, 0, 0);
+  Polynomial p             = (*basis)[2] * 2 - Polynomial(1, 0, 0, 0);
   const int  orderMinusTwo = order - 2;
   
   for(int l1 = 1; l1 < orderMinus; l1++){
     for(int l2 = 0; l2 + l1 - 1 < orderMinusTwo; l2++){
-      basis[i] = 
+      (*basis)[i] = 
 	intLegendre[l1].compose(lagrangeSub[0], lagrangeSum[0]) * 
-	   legendre[l2].compose(p) * basis[2];
+	   legendre[l2].compose(p) * (*basis)[2];
       
       i++;
     }
@@ -80,7 +80,7 @@ TriNodeBasis::TriNodeBasis(const int order){
 }
 
 TriNodeBasis::~TriNodeBasis(void){
-  delete[] basis;
+  delete basis;
 }
 
 /*
@@ -91,7 +91,7 @@ int main(void){
 
   TriNodeBasis b(P);
   
-  const Polynomial* basis = b.getBasis();
+  const std::vector<Polynomial>& basis = b.getBasis();
   
   printf("\n");
   printf("clear all;\n");
diff --git a/FunctionSpace/TriNodeBasis.h b/FunctionSpace/TriNodeBasis.h
index 2f39e7969dbd80dcb948e8ccf338e627b65ac69d..b3e85528f6157f68f80548421a564db72069807f 100644
--- a/FunctionSpace/TriNodeBasis.h
+++ b/FunctionSpace/TriNodeBasis.h
@@ -17,17 +17,13 @@
 
 class TriNodeBasis: public BasisScalar{
  public:
+  //! Returns a new Node-Basis for Triangles of the given order
+  //! @param order The order of the Basis
   TriNodeBasis(const int order);
+  
+  //! Deletes this Basis
+  //!
   virtual ~TriNodeBasis(void);
 };
 
-/**
-   @fn TriNodeBasis::TriNodeBasis(const int order)
-   @param order The order of the Basis
-   @return Returns a new Node-Basis for Triangles of the given order
-
-   @fn TriNodeBasis::~TriNodeBasis(void)
-   @return Deletes this Basis
-*/
-
 #endif