diff --git a/FunctionSpace/FunctionSpace.cpp b/FunctionSpace/FunctionSpace.cpp
index 77aa2757f81c22eec853cebbbbc0f7d7f6864daf..434fbce0ec29f0ff3e51b8995618c7425f88922d 100644
--- a/FunctionSpace/FunctionSpace.cpp
+++ b/FunctionSpace/FunctionSpace.cpp
@@ -20,9 +20,7 @@ FunctionSpace::~FunctionSpace(void){
       delete basis[i];
 }
 
-void FunctionSpace::build(GroupOfElement& goe,
-                          size_t order, size_t form, string family){
-
+void FunctionSpace::build(GroupOfElement& goe, string family){
   // Save GroupOfElement & Mesh //
   this->goe  = &goe;
   this->mesh = &(goe.getMesh());
diff --git a/FunctionSpace/FunctionSpace.h b/FunctionSpace/FunctionSpace.h
index 72a3da11afe1890d22e3a9ecef94ed9855a448fb..fc6867d3f58d304cca2d9036fd0ef4911840f294 100644
--- a/FunctionSpace/FunctionSpace.h
+++ b/FunctionSpace/FunctionSpace.h
@@ -46,8 +46,10 @@ class FunctionSpace{
   size_t fPerFace;
   size_t fPerCell;
 
-  // Scalar Field ? //
-  bool scalar;
+  // Differential From & Order //
+  bool   scalar;
+  size_t form;
+  size_t order;
 
   // Dofs //
   std::set<Dof>                  dof;
@@ -56,11 +58,14 @@ class FunctionSpace{
  public:
   virtual ~FunctionSpace(void);
 
-  const std::vector<const Basis*>& getBasis(const MElement& element) const;
-  const Basis&                     getBasis(size_t i) const;
+  const Basis& getBasis(const MElement& element) const;
+  const Basis& getBasis(size_t i) const;
 
   GroupOfElement& getSupport(void) const;
-  bool            isScalar(void) const;
+
+  bool   isScalar(void) const;
+  size_t getForm(void)  const;
+  size_t getOrder(void) const;
 
   std::vector<Dof> getUnorderedKeys(const MElement& element) const;
   std::vector<Dof> getKeys(const MElement& element) const;
@@ -72,8 +77,8 @@ class FunctionSpace{
 
  protected:
   FunctionSpace(void);
-  void build(GroupOfElement& goe,
-             size_t order, size_t form, std::string family);
+
+  void build(GroupOfElement& goe, std::string family);
   void buildDof(void);
 };
 
@@ -135,9 +140,8 @@ class FunctionSpace{
 // Inline Functions //
 //////////////////////
 
-inline const std::vector<const Basis*>&
-FunctionSpace::getBasis(const MElement& element) const{
-  return basis;
+inline const Basis& FunctionSpace::getBasis(const MElement& element) const{
+  return *basis[element.getType()];
 }
 
 inline const Basis& FunctionSpace::getBasis(size_t i) const{
@@ -152,6 +156,14 @@ inline bool FunctionSpace::isScalar(void) const{
   return scalar;
 }
 
+inline size_t FunctionSpace::getForm(void) const{
+  return form;
+}
+
+inline size_t FunctionSpace::getOrder(void) const{
+  return order;
+}
+
 inline const std::set<Dof>& FunctionSpace::getAllDofs(void) const{
   return dof;
 }
diff --git a/FunctionSpace/FunctionSpaceScalar.cpp b/FunctionSpace/FunctionSpaceScalar.cpp
index a3c18c54b86e5166267f7ee43e9889288d20e092..d178ad00730885f9113793879338c012996aa434 100644
--- a/FunctionSpace/FunctionSpaceScalar.cpp
+++ b/FunctionSpace/FunctionSpaceScalar.cpp
@@ -2,32 +2,35 @@
 #include "FunctionSpaceScalar.h"
 
 FunctionSpaceScalar::FunctionSpaceScalar(GroupOfElement& goe, size_t order){
-  scalar = true;
-  build(goe, order, 0, "hierarchical");
+  this->scalar = true;
+  this->form   = 0;
+  this->order  = order;
+
+  build(goe, "hierarchical");
 }
 
 FunctionSpaceScalar::FunctionSpaceScalar(GroupOfElement& goe, size_t order,
                                          std::string family){
-  scalar = true;
-  build(goe, order, 0, family);
+  this->scalar = true;
+  this->form   = 0;
+  this->order  = order;
+
+  build(goe, family);
 }
 
 FunctionSpaceScalar::~FunctionSpaceScalar(void){
   // Done by FunctionSpace
 }
 
-double FunctionSpaceScalar::
-interpolateInABC(const MElement& element,
-                 const std::vector<double>& coef,
-                 double abc[3]) const{
-  // Element Type //
-  const int eType = element.getType();
-
+double FunctionSpaceScalar::interpolateInABC(const MElement& element,
+                                             const std::vector<double>& coef,
+                                             double abc[3]) const{
   // Get Basis Functions //
-  const size_t nFun = basis[eType]->getNFunction();
+  const Basis& basis = getBasis(element);
+  const size_t nFun  = basis.getNFunction();
   fullMatrix<double> fun(nFun, 1);
 
-  basis[eType]->getFunctions(fun, element, abc[0], abc[1], abc[2]);
+  basis.getFunctions(fun, element, abc[0], abc[1], abc[2]);
 
   // Interpolate (in Reference Place) //
   double val = 0;
@@ -48,14 +51,12 @@ interpolateDerivativeInABC(const MElement& element,
   ReferenceSpaceManager::getJacobian(element, abc[0], abc[1], abc[2], invJac);
   invJac.invertInPlace();
 
-  // Element Type //
-  const int eType = element.getType();
-
   // Get Basis Functions //
-  const size_t nFun = basis[eType]->getNFunction();
+  const Basis& basis = getBasis(element);
+  const size_t nFun  = basis.getNFunction();
   fullMatrix<double> fun(nFun, 3);
 
-  basis[eType]->getDerivative(fun, element, abc[0], abc[1], abc[2]);
+  basis.getDerivative(fun, element, abc[0], abc[1], abc[2]);
 
   // Interpolate (in Reference Place) //
   fullMatrix<double> val(1, 3);
diff --git a/FunctionSpace/FunctionSpaceVector.cpp b/FunctionSpace/FunctionSpaceVector.cpp
index b5f6e0043098c4ce3945c2257eb1e563e7053d8e..0c11bbd62ad0864ea6c53154c1bfaaacd14a5f91 100644
--- a/FunctionSpace/FunctionSpaceVector.cpp
+++ b/FunctionSpace/FunctionSpaceVector.cpp
@@ -2,14 +2,20 @@
 #include "FunctionSpaceVector.h"
 
 FunctionSpaceVector::FunctionSpaceVector(GroupOfElement& goe, size_t order){
-  scalar = false;
-  build(goe, order, 1, "hierarchical");
+  this->scalar = false;
+  this->form   = 1;
+  this->order  = order;
+
+  build(goe, "hierarchical");
 }
 
 FunctionSpaceVector::FunctionSpaceVector(GroupOfElement& goe, size_t order,
                                          std::string family){
-  scalar = false;
-  build(goe, order, 1, family);
+  this->scalar = false;
+  this->form   = 1;
+  this->order  = order;
+
+  build(goe, family);
 }
 
 FunctionSpaceVector::~FunctionSpaceVector(void){
@@ -26,14 +32,12 @@ interpolateInABC(const MElement& element,
   ReferenceSpaceManager::getJacobian(element, abc[0], abc[1], abc[2], invJac);
   invJac.invertInPlace();
 
-  // Element Type //
-  const int eType = element.getType();
-
   // Get Basis Functions //
-  const size_t nFun = basis[eType]->getNFunction();
+  const Basis& basis = getBasis(element);
+  const size_t nFun  = basis.getNFunction();
   fullMatrix<double> fun(nFun, 3);
 
-  basis[eType]->getFunctions(fun, element, abc[0], abc[1], abc[2]);
+  basis.getFunctions(fun, element, abc[0], abc[1], abc[2]);
 
   // Interpolate (in Reference Place) //
   fullMatrix<double> val(1, 3);