diff --git a/FunctionSpace/CMakeLists.txt b/FunctionSpace/CMakeLists.txt
index 800ad2ebd8e4d7522ceaabc28954b484dad852b1..5554606cc1ad432b55bb66c9cb5eb6aea65aaa4e 100644
--- a/FunctionSpace/CMakeLists.txt
+++ b/FunctionSpace/CMakeLists.txt
@@ -19,6 +19,8 @@ set(SRC
   LocalFunctionSpace.cpp
   LocalFunctionSpaceScalar.cpp
   LocalFunctionSpaceVector.cpp
+  LocalFunctionSpace0Form.cpp
+  LocalFunctionSpace1Form.cpp
 )
 
 file(GLOB HDR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h) 
diff --git a/FunctionSpace/LocalFunctionSpace.cpp b/FunctionSpace/LocalFunctionSpace.cpp
index 1632674890840124b6c8c0f170cfd351b6e84ce1..556e27c78941b58bd20c6b6a00c34d4ceb2feec8 100644
--- a/FunctionSpace/LocalFunctionSpace.cpp
+++ b/FunctionSpace/LocalFunctionSpace.cpp
@@ -8,27 +8,3 @@ LocalFunctionSpace::LocalFunctionSpace(void){
 LocalFunctionSpace::~LocalFunctionSpace(void){
   
 }
-
-void LocalFunctionSpace::selectTransform(int form){
-  switch(form){
-  case 0:
-    transform = LocalFunctionSpace::form0;
-    break;
-
-  case 1:
-    transform = LocalFunctionSpace::form1;
-    break;
-
-  case 2:
-    throw Exception("Mapping of 2-form not implemented");
-    break;
-
-  case 3:
-    throw Exception("Mapping of 3-form not implemented");
-    break;
- 
-  default:
-    throw Exception ("Unknown '%d-form'", form);
-    break;
-  }
-}
diff --git a/FunctionSpace/LocalFunctionSpace.h b/FunctionSpace/LocalFunctionSpace.h
index ce136fa71aa18393cef884b70c65f19481e82684..b73efff20eb88052ecc755913dfd39b963a25b6d 100644
--- a/FunctionSpace/LocalFunctionSpace.h
+++ b/FunctionSpace/LocalFunctionSpace.h
@@ -5,30 +5,23 @@
    @class LocalFunctionSpace
    @brief Mother class for Local Function Spaces
    
-   This class is the @em mother (by @em inheritence) of all@n
+   This class is the @em mother (by @em inheritence) of all
    Local Function Spaces.@n
 
    A Local Function Space is a Basis on which we can interpolate on.@n
    In order to interpolate, a Local Function Space shall colaborate
-   with a Jacobian.
+   with an Element.
  */
 
 #include "Jacobian.h"
 
 class LocalFunctionSpace{
  protected:
-  typedef fullVector<double>(Jacobian::*JacMethod)
-    (const fullVector<double>&) const;
-
   bool      scalar;
   int       size;
   int       type;
 
   Jacobian* jac;
-  fullVector<double> (*transform)(const Jacobian&, 
-				  double, 
-				  double, 
-				  double);
 
  public:
   //! Deletes this LocalFunctionSpace
@@ -59,29 +52,6 @@ class LocalFunctionSpace{
   //! Instantiate a new LocalFunctionSpace
   //! @warning Users can't instantiate a LocalFunctionSpace
   LocalFunctionSpace(void);
-
-  //! Selects the right transorm method for the Jacobian
-  //! @param form The @em type of the Basis used
-  void selectTransform(int form);
-
-  //! Mapping of 0-form
-  //! @param jac The Jacobian to use
-  //! @param u,v,w The @em reference coordinate to map
-  //! @return Returns The mapped coordinate in the @em physical space
-  static fullVector<double> form0(const Jacobian& jac, 
-				  double u, 
-				  double v, 
-				  double w);
-
-  //! Mapping of 1-form
-  //! @param jac The Jacobian to use
-  //! @param u,v,w The @em reference coordinate to map
-  //! @return Returns The mapped coordinate in the @em physical space
-  static fullVector<double> form1(const Jacobian& jac, 
-				  double u, 
-				  double v, 
-				  double w);
-
 };
 
 //////////////////////
@@ -100,19 +70,4 @@ inline int LocalFunctionSpace::getType(void) const{
   return type;
 }
 
-inline fullVector<double> LocalFunctionSpace::form0(const Jacobian& jac,
-						    double u,
-						    double v,
-						    double w){
-  return jac.map(u, v);
-}
-
-inline fullVector<double> LocalFunctionSpace::form1(const Jacobian& jac,
-						    double u,
-						    double v,
-						    double w){
-  return jac.grad(u, v);
-  //! @todo Missing Orientation !!
-}
-
 #endif
diff --git a/FunctionSpace/LocalFunctionSpaceScalar.cpp b/FunctionSpace/LocalFunctionSpaceScalar.cpp
index 677e5c2a3398a115ba8171cf2223bb350053ba14..3327477a89e7b42a382a14e43e5f45b95b42a264 100644
--- a/FunctionSpace/LocalFunctionSpaceScalar.cpp
+++ b/FunctionSpace/LocalFunctionSpaceScalar.cpp
@@ -1,46 +1,9 @@
 #include "LocalFunctionSpaceScalar.h"
-#include "BasisScalar.h"
-#include "Exception.h"
 
-LocalFunctionSpaceScalar::LocalFunctionSpaceScalar(const Basis& basis){
-  if(!basis.isScalar())
-    throw Exception("Can't Create a Scalar Function Space with a Vectorial Basis");
-
-  const BasisScalar& b = static_cast<const BasisScalar&>(basis);
-
-  this->scalar = true;
-  this->size   = b.getSize();
-  this->type   = b.getType(); 
-  this->basis  = &(b.getBasis());
-
-  selectTransform(type);
+LocalFunctionSpaceScalar::LocalFunctionSpaceScalar(void){
+  scalar = true;
 }
 
 LocalFunctionSpaceScalar::~LocalFunctionSpaceScalar(void){
-  // LocalFunctionSpaceScalar is *NOT* responsible
-  // for deleting 'basis'
-  // It's the Basis job
-}
-
-double LocalFunctionSpaceScalar::interpolate
-(const fullVector<double>& coef,
- double x, double y, double z) const{
-  
-  if(coef.size() > size)
-    throw Exception("To many coeficients for interpolation");
-
-  if(coef.size() < size)
-    throw Exception("Not enough coeficients for interpolation");
-
-
-  fullVector<double> uvw = jac->invMap(x, y);
-  double res             = 0;
-  
-  for(int i = 0; i < size; ++i){
-    
-    //transform(*jac, uvw(0), uvw(1), 0);
-    //! @todo Interpolation rule ...
-  }
 
-  return res;
 }
diff --git a/FunctionSpace/LocalFunctionSpaceScalar.h b/FunctionSpace/LocalFunctionSpaceScalar.h
index d8b6a0252f3f32946252e0aa56a38fa6551ce3c9..4b707fac83ddcb9ad6ff47f9da21de6cdbc30cc0 100644
--- a/FunctionSpace/LocalFunctionSpaceScalar.h
+++ b/FunctionSpace/LocalFunctionSpaceScalar.h
@@ -1,9 +1,6 @@
 #ifndef _LOCALFUNCTIONSPACESCALAR_H_
 #define _LOCALFUNCTIONSPACESCALAR_H_
 
-#include <vector>
-#include "Polynomial.h"
-#include "Basis.h"
 #include "LocalFunctionSpace.h"
 
 /**
@@ -13,16 +10,8 @@
    A Local Function Space build on a @em Scalar Basis.
  */
 
-class LocalFunctionSpaceScalar: LocalFunctionSpace{
- protected:
-  const std::vector<Polynomial>* basis;
-
- public:
-  //! Instantiate a new LocalFunctionSpaceScalar
-  //! @param basis The Basis used to build 
-  //! this Function Space
-  LocalFunctionSpaceScalar(const Basis& basis);
-  
+class LocalFunctionSpaceScalar: public LocalFunctionSpace{
+ public:  
   //! Deletes this LocalFunctionSpaceScalar
   //!
   virtual ~LocalFunctionSpaceScalar(void);
@@ -32,8 +21,13 @@ class LocalFunctionSpaceScalar: LocalFunctionSpace{
   //! Interpolation
   //! @param x,y,z The coordinate of the Interpolation 
   //! @return Returns the value of the Interpolation
-  double interpolate(const fullVector<double>& coef, 
-		     double x, double y, double z) const;
+  virtual double interpolate(const fullVector<double>& coef, 
+			     double x, double y, double z) const = 0;
+
+ protected:
+  //! Instantiate a new LocalFunctionSpaceScalar
+  //! @warning Users can't instantiate a LocalFunctionSpaceScalar
+  LocalFunctionSpaceScalar(void);
 };
 
 #endif
diff --git a/FunctionSpace/LocalFunctionSpaceVector.cpp b/FunctionSpace/LocalFunctionSpaceVector.cpp
index 5003759ee22d32325db07090bb3ba45d5c871c21..7fdc870a795ed9fb2f4a84ad25fcce1505838c07 100644
--- a/FunctionSpace/LocalFunctionSpaceVector.cpp
+++ b/FunctionSpace/LocalFunctionSpaceVector.cpp
@@ -1,20 +1,9 @@
 #include "LocalFunctionSpaceVector.h"
-#include "BasisVector.h"
-#include "Exception.h"
 
-LocalFunctionSpaceVector::LocalFunctionSpaceVector(const Basis& basis){
-  if(basis.isScalar())
-    throw Exception("Can't Create a Vector Function Space with a Scalar Basis");
-
-  const BasisVector& b = static_cast<const BasisVector&>(basis);
-
-  this->scalar = false;
-  this->size   = b.getSize();
-  this->basis  = &(b.getBasis());
+LocalFunctionSpaceVector::LocalFunctionSpaceVector(void){
+  scalar = false;
 }
 
 LocalFunctionSpaceVector::~LocalFunctionSpaceVector(void){
-  // LocalFunctionSpaceVector is *NOT* responsible
-  // for deleting 'basis'
-  // It's the Basis job
+
 }
diff --git a/FunctionSpace/LocalFunctionSpaceVector.h b/FunctionSpace/LocalFunctionSpaceVector.h
index 57971f6eb5e7ce7ebfacc5088c5244b1a76ed238..909059eb9380045b161c05ee7772f8d9da63247e 100644
--- a/FunctionSpace/LocalFunctionSpaceVector.h
+++ b/FunctionSpace/LocalFunctionSpaceVector.h
@@ -1,9 +1,6 @@
 #ifndef _LOCALFUNCTIONSPACEVECTOR_H_
 #define _LOCALFUNCTIONSPACEVECTOR_H_
 
-#include <vector>
-#include "Polynomial.h"
-#include "Basis.h"
 #include "fullMatrix.h"
 #include "LocalFunctionSpace.h"
 
@@ -14,16 +11,8 @@
    A Local Function Space build on a @em Vectorial Basis.
  */
 
-class LocalFunctionSpaceVector: LocalFunctionSpace{
- protected:
-  const std::vector<std::vector<Polynomial> >* basis;
-
+class LocalFunctionSpaceVector: public LocalFunctionSpace{
  public:
-  //! Instantiate a new LocalFunctionSpaceVector
-  //! @param basis The Basis used to build 
-  //! this Function Space
-  LocalFunctionSpaceVector(const Basis& basis);
-
   //! Deletes this LocalFunctionSpaceVector
   //!
   virtual ~LocalFunctionSpaceVector(void);
@@ -33,8 +22,13 @@ class LocalFunctionSpaceVector: LocalFunctionSpace{
   //! Interpolation
   //! @param x,y,z The coordinate of the Interpolation 
   //! @return Returns the value of the Interpolation
-  fullVector<double> interpolate(const fullVector<double>& coef, 
-				 double x, double y, double z) const;
+  virtual fullVector<double> interpolate(const fullVector<double>& coef, 
+					 double x, double y, double z) const = 0;
+
+ protected:
+  //! Instantiate a new LocalFunctionSpacaeVector 
+  //! @warning Users can't instantiate a LocalFunctionSpaceVector
+  LocalFunctionSpaceVector(void);
 };
 
 #endif
diff --git a/FunctionSpace/Polynomial.h b/FunctionSpace/Polynomial.h
index a7e73a2a476bbfb8ed49156040f655beea6e878a..fe5571e04bbd655987f775081750aedd87905b58 100644
--- a/FunctionSpace/Polynomial.h
+++ b/FunctionSpace/Polynomial.h
@@ -171,7 +171,7 @@ class Polynomial{
    @return Returns the @em evaluation of this
    Polynomial at (@c x, @c y, @c z)
 
-   @fn fullVector<double> Polynomial::at(const std::vector<Polynomial>&, const double, const double y, const double z)
+   @fn fullVector<double> Polynomial::at(const std::vector<Polynomial>&, const double, const double, const double)
    @param P A vector of Polynomial%s
    @param x A value
    @param y A value