diff --git a/FunctionSpace/FunctionSpace.cpp b/FunctionSpace/FunctionSpace.cpp
index f7109a9242d9a4a5b1d74e437c02d68a178ba11a..77aa2757f81c22eec853cebbbbc0f7d7f6864daf 100644
--- a/FunctionSpace/FunctionSpace.cpp
+++ b/FunctionSpace/FunctionSpace.cpp
@@ -15,64 +15,9 @@ FunctionSpace::FunctionSpace(void){
 }
 
 FunctionSpace::~FunctionSpace(void){
-  if(self)
-    for(size_t i = 0; i < nGeoType; i++)
-      if(basis[i])
-        delete basis[i];
-}
-
-void FunctionSpace::build(GroupOfElement& goe,
-                          const Basis& basis){
-
-  // Save GroupOfElement & Mesh //
-  this->goe  = &goe;
-  this->mesh = &(goe.getMesh());
-
-  // Check if homogene GoE and get geo type //
-  const vector<size_t>& gType = goe.getTypeStats();
-  const size_t nGType = gType.size();
-  size_t eType = (size_t)(-1);
-
-  for(size_t i = 0; i < nGType; i++)
-    if((eType == (size_t)(-1)) && (gType[i] != 0))
-      eType = i;
-    else if((eType != (size_t)(-1)) && (gType[i] != 0))
-      throw Exception("FunctionSpace needs a uniform mesh");
-
-  // Check if basis is matching type //
-  if(eType != basis.getType())
-    throw Exception("FunctionSpace: Basis is not matching type");
-
-  // Alloc Bases and save given Basis //
-  this->self = false;
-  this->basis.resize(nGeoType, NULL);
-  this->basis[eType] = &basis;
-
-  // Get Number of Function per Entity //
-  // Same for all basis since we have a uniform order
-  MElement& myElement = const_cast<MElement&>(goe.get(0));
-
-  int nVertex = myElement.getNumPrimaryVertices();
-  int nEdge   = myElement.getNumEdges();
-  int nFace   = myElement.getNumFaces();
-
-  // Number of *Per* Entity functions //
-  fPerVertex = this->basis[eType]->getNVertexBased() / nVertex;
-
-  if(nEdge)
-    fPerEdge = this->basis[eType]->getNEdgeBased() / nEdge;
-  else
-    fPerEdge = 0;
-
-  if(nFace)
-    fPerFace = this->basis[eType]->getNFaceBased() / nFace;
-  else
-    fPerFace = 0;
-
-  fPerCell = this->basis[eType]->getNCellBased();
-
-  // Build Dof //
-  buildDof();
+  for(size_t i = 0; i < nGeoType; i++)
+    if(basis[i])
+      delete basis[i];
 }
 
 void FunctionSpace::build(GroupOfElement& goe,
@@ -83,7 +28,6 @@ void FunctionSpace::build(GroupOfElement& goe,
   this->mesh = &(goe.getMesh());
 
   // Alloc Basis Vector for all possible geomtrical types //
-  self = true;
   basis.resize(nGeoType, NULL);
 
   // Generate Bases //
diff --git a/FunctionSpace/FunctionSpace.h b/FunctionSpace/FunctionSpace.h
index 0fb748d7ca109fb73f9e932f8c75886cf9afabcd..72a3da11afe1890d22e3a9ecef94ed9855a448fb 100644
--- a/FunctionSpace/FunctionSpace.h
+++ b/FunctionSpace/FunctionSpace.h
@@ -39,7 +39,6 @@ class FunctionSpace{
   GroupOfElement* goe;
 
   // Basis //
-  bool self;
   std::vector<const Basis*> basis;
 
   size_t fPerVertex;
@@ -73,8 +72,6 @@ class FunctionSpace{
 
  protected:
   FunctionSpace(void);
-
-  void build(GroupOfElement& goe, const Basis& basis);
   void build(GroupOfElement& goe,
              size_t order, size_t form, std::string family);
   void buildDof(void);
diff --git a/FunctionSpace/FunctionSpaceScalar.cpp b/FunctionSpace/FunctionSpaceScalar.cpp
index 1e4f3a9c4ce5a1d11c717770c94182a46c03ccb9..a3c18c54b86e5166267f7ee43e9889288d20e092 100644
--- a/FunctionSpace/FunctionSpaceScalar.cpp
+++ b/FunctionSpace/FunctionSpaceScalar.cpp
@@ -1,15 +1,15 @@
 #include "Mapper.h"
 #include "FunctionSpaceScalar.h"
 
-FunctionSpaceScalar::FunctionSpaceScalar(GroupOfElement& goe,
-                                         const Basis& basis){
+FunctionSpaceScalar::FunctionSpaceScalar(GroupOfElement& goe, size_t order){
   scalar = true;
-  build(goe, basis);
+  build(goe, order, 0, "hierarchical");
 }
 
-FunctionSpaceScalar::FunctionSpaceScalar(GroupOfElement& goe, size_t order){
+FunctionSpaceScalar::FunctionSpaceScalar(GroupOfElement& goe, size_t order,
+                                         std::string family){
   scalar = true;
-  build(goe, order, 0, "hierarchical");
+  build(goe, order, 0, family);
 }
 
 FunctionSpaceScalar::~FunctionSpaceScalar(void){
diff --git a/FunctionSpace/FunctionSpaceScalar.h b/FunctionSpace/FunctionSpaceScalar.h
index dec1f3938ff5ffa799f72a2ed32f0dbeb1725061..ee9b12035ae3efe83ca1f6d23c2575bf062263a5 100644
--- a/FunctionSpace/FunctionSpaceScalar.h
+++ b/FunctionSpace/FunctionSpaceScalar.h
@@ -16,8 +16,8 @@
 
 class FunctionSpaceScalar : public FunctionSpace{
  public:
-  FunctionSpaceScalar(GroupOfElement& goe, const Basis& basis);
   FunctionSpaceScalar(GroupOfElement& goe, size_t order);
+  FunctionSpaceScalar(GroupOfElement& goe, size_t order, std::string family);
 
   virtual ~FunctionSpaceScalar(void);
 
diff --git a/FunctionSpace/FunctionSpaceVector.cpp b/FunctionSpace/FunctionSpaceVector.cpp
index a1ffd51518acfc7a5d9a708e90722863716c770a..b5f6e0043098c4ce3945c2257eb1e563e7053d8e 100644
--- a/FunctionSpace/FunctionSpaceVector.cpp
+++ b/FunctionSpace/FunctionSpaceVector.cpp
@@ -1,10 +1,15 @@
 #include "Mapper.h"
 #include "FunctionSpaceVector.h"
 
-FunctionSpaceVector::FunctionSpaceVector(GroupOfElement& goe,
-                                         const Basis& basis){
+FunctionSpaceVector::FunctionSpaceVector(GroupOfElement& goe, size_t order){
   scalar = false;
-  build(goe, basis);
+  build(goe, order, 1, "hierarchical");
+}
+
+FunctionSpaceVector::FunctionSpaceVector(GroupOfElement& goe, size_t order,
+                                         std::string family){
+  scalar = false;
+  build(goe, order, 1, family);
 }
 
 FunctionSpaceVector::~FunctionSpaceVector(void){
diff --git a/FunctionSpace/FunctionSpaceVector.h b/FunctionSpace/FunctionSpaceVector.h
index d230a37a47a8aaf4f8ad92b727b0aa81678ee77b..4914e888c15b67e7ef5ac0a3eb16ec9c7517304e 100644
--- a/FunctionSpace/FunctionSpaceVector.h
+++ b/FunctionSpace/FunctionSpaceVector.h
@@ -17,7 +17,9 @@
 
 class FunctionSpaceVector : public FunctionSpace{
  public:
-  FunctionSpaceVector(GroupOfElement& goe, const Basis& basis);
+  FunctionSpaceVector(GroupOfElement& goe, size_t order);
+  FunctionSpaceVector(GroupOfElement& goe, size_t order, std::string family);
+
   virtual ~FunctionSpaceVector(void);
 
   fullVector<double>