diff --git a/FunctionSpace/CMakeLists.txt b/FunctionSpace/CMakeLists.txt
index fa18efc69d54397d346e01153e5d1c165d9ee674..800ad2ebd8e4d7522ceaabc28954b484dad852b1 100644
--- a/FunctionSpace/CMakeLists.txt
+++ b/FunctionSpace/CMakeLists.txt
@@ -15,6 +15,10 @@ set(SRC
   TriNodeBasis.cpp
   TriEdgeBasis.cpp
   TriNedelecBasis.cpp
+
+  LocalFunctionSpace.cpp
+  LocalFunctionSpaceScalar.cpp
+  LocalFunctionSpaceVector.cpp
 )
 
 file(GLOB HDR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h) 
diff --git a/FunctionSpace/LocalFunctionSpace.cpp b/FunctionSpace/LocalFunctionSpace.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8849f7e5377ce60835334d8113e2722f99862d3d
--- /dev/null
+++ b/FunctionSpace/LocalFunctionSpace.cpp
@@ -0,0 +1,10 @@
+#include "LocalFunctionSpace.h"
+
+LocalFunctionSpace::LocalFunctionSpace(void){
+  
+}
+
+LocalFunctionSpace::~LocalFunctionSpace(void){
+  
+}
+
diff --git a/FunctionSpace/LocalFunctionSpace.h b/FunctionSpace/LocalFunctionSpace.h
new file mode 100644
index 0000000000000000000000000000000000000000..374d972b4a25630d58fdd06c3aa7b7ae60f7a9b1
--- /dev/null
+++ b/FunctionSpace/LocalFunctionSpace.h
@@ -0,0 +1,31 @@
+#ifndef _LOCALFUNCTIONSPACE_H_
+#define _LOCALFUNCTIONSPACE_H_
+
+class LocalFunctionSpace{
+ protected:
+  bool scalar;
+  int  size;
+
+ public:
+  virtual ~LocalFunctionSpace(void);
+
+  bool isScalar(void) const;
+  int  getSize(void) const;
+
+ protected:
+  LocalFunctionSpace(void);
+};
+
+//////////////////////
+// Inline Functions //
+//////////////////////
+
+inline bool LocalFunctionSpace::isScalar(void) const{
+  return scalar;
+}
+
+inline int LocalFunctionSpace::getSize(void) const{
+  return size;
+}
+
+#endif
diff --git a/FunctionSpace/LocalFunctionSpaceScalar.cpp b/FunctionSpace/LocalFunctionSpaceScalar.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2e6598e2ff6f9af271dcff4e740d7ffa7e81e140
--- /dev/null
+++ b/FunctionSpace/LocalFunctionSpaceScalar.cpp
@@ -0,0 +1,20 @@
+#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->basis  = &(b.getBasis());
+}
+
+LocalFunctionSpaceScalar::~LocalFunctionSpaceScalar(void){
+  // LocalFunctionSpaceScalar is *NOT* responsible
+  // for deleting 'basis'
+  // It's the Basis job
+}
diff --git a/FunctionSpace/LocalFunctionSpaceScalar.h b/FunctionSpace/LocalFunctionSpaceScalar.h
new file mode 100644
index 0000000000000000000000000000000000000000..04ca7adf44ba64b4ffc7d7911a0576f2d250bfd5
--- /dev/null
+++ b/FunctionSpace/LocalFunctionSpaceScalar.h
@@ -0,0 +1,18 @@
+#ifndef _LOCALFUNCTIONSPACESCALAR_H_
+#define _LOCALFUNCTIONSPACESCALAR_H_
+
+#include <vector>
+#include "Polynomial.h"
+#include "Basis.h"
+#include "LocalFunctionSpace.h"
+
+class LocalFunctionSpaceScalar: LocalFunctionSpace{
+ protected:
+  const std::vector<Polynomial>* basis;
+
+ public:
+  LocalFunctionSpaceScalar(const Basis& basis);
+  virtual ~LocalFunctionSpaceScalar(void);
+};
+
+#endif
diff --git a/FunctionSpace/LocalFunctionSpaceVector.cpp b/FunctionSpace/LocalFunctionSpaceVector.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5003759ee22d32325db07090bb3ba45d5c871c21
--- /dev/null
+++ b/FunctionSpace/LocalFunctionSpaceVector.cpp
@@ -0,0 +1,20 @@
+#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){
+  // LocalFunctionSpaceVector is *NOT* responsible
+  // for deleting 'basis'
+  // It's the Basis job
+}
diff --git a/FunctionSpace/LocalFunctionSpaceVector.h b/FunctionSpace/LocalFunctionSpaceVector.h
new file mode 100644
index 0000000000000000000000000000000000000000..1a0ebc7376b0a435fc4de79524e4bf5e2a7c0793
--- /dev/null
+++ b/FunctionSpace/LocalFunctionSpaceVector.h
@@ -0,0 +1,18 @@
+#ifndef _LOCALFUNCTIONSPACEVECTOR_H_
+#define _LOCALFUNCTIONSPACEVECTOR_H_
+
+#include <vector>
+#include "Polynomial.h"
+#include "Basis.h"
+#include "LocalFunctionSpace.h"
+
+class LocalFunctionSpaceVector: LocalFunctionSpace{
+ protected:
+  const std::vector<std::vector<Polynomial> >* basis;
+
+ public:
+  LocalFunctionSpaceVector(const Basis& basis);
+  virtual ~LocalFunctionSpaceVector(void);
+};
+
+#endif