Index: src/LinearAlgebra/Eigenspace.cpp
===================================================================
--- src/LinearAlgebra/Eigenspace.cpp	(revision 58605562acab64d92776eafdb01c18caf23d7b60)
+++ src/LinearAlgebra/Eigenspace.cpp	(revision a06042e843c266378c28a07d857634215eb6f8b9)
@@ -57,4 +57,6 @@
       "Eigenspace::Eigenspace() - number of indices "+toString(_Indices.size())
       +" and column dimension of matrix "+toString(_matrix.getColumns())+" don't match!");
+
+  createEigenvectorViews();
 }
 
@@ -77,4 +79,5 @@
     boost::shared_ptr<VectorContent> ev(EigenspaceMatrix.getColumnVector(iter));
     Eigenvectors.push_back( ev );
+    Log() << Verbose(1) << iter << " th Eigenvector is " << *ev << std::endl;
   }
 }
@@ -114,4 +117,10 @@
 }
 
+
+const VectorContent & Eigenspace::getEigenvector(size_t i) const
+{
+  return *(Eigenvectors[i]);
+}
+
 /** Checks whether each index of _indexset is contained in this subspace:Indices.
  *
@@ -139,9 +148,45 @@
 }
 
+
+/** Sets the eigenvectors and -values.
+ *
+ * We only implement this for eigenpairs, not eigenvector and eigenvalue
+ * distinctly to avoid mismatches, i.e. old eigenvalues used because only new
+ * eigenvectors have been given.
+ *
+ * @param CurrentEigenvectors eigenvectors to set to
+ * @param CurrentEigenvalues eigenvalues to set to
+ */
+void Eigenspace::setEigenpairs(const eigenvectorset &CurrentEigenvectors, const eigenvalueset &CurrentEigenvalues)
+{
+  ASSERT(CurrentEigenvectors.size() == Eigenvectors.size(),
+      "Eigenspace::setEigenpairs() - "
+      +toString(CurrentEigenvectors.size())+" x CurrentEigenvectors is not the same as "
+      +toString(Eigenvectors.size())+"x Eigenvectors!");
+  // set eigenvectors
+  std::vector<boost::shared_ptr<VectorContent> >::const_iterator newev = CurrentEigenvectors.begin();
+  for(std::vector<boost::shared_ptr<VectorContent> >::iterator ev = Eigenvectors.begin();
+    ev != Eigenvectors.end();
+    ++ev, ++newev) {
+    *ev = *newev;
+  }
+  // eigenvalues can be just copied (integral type)
+  Eigenvalues = CurrentEigenvalues;
+}
+
+
+/** Output operator for Eigenspace.
+ *
+ * @param ost output stream
+ * @param _s Eigenspace to print: Indices and contained matrix
+ * @return given output stream
+ */
 std::ostream & operator<<(std::ostream &ost, const Eigenspace &_s)
 {
-  BOOST_FOREACH(size_t iter, _s.getIndices()) {
+  BOOST_FOREACH(size_t iter, _s.Indices) {
     ost << iter << " ";
   }
+  ost << " with matrix " << _s.EigenspaceMatrix;
   return ost;
 }
+
Index: src/LinearAlgebra/Eigenspace.hpp
===================================================================
--- src/LinearAlgebra/Eigenspace.hpp	(revision 58605562acab64d92776eafdb01c18caf23d7b60)
+++ src/LinearAlgebra/Eigenspace.hpp	(revision a06042e843c266378c28a07d857634215eb6f8b9)
@@ -29,4 +29,5 @@
 class Eigenspace
 {
+  friend std::ostream & operator<<(std::ostream &ost, const Eigenspace &_s);
 public:
   typedef std::vector< boost::shared_ptr<VectorContent> > eigenvectorset;
@@ -42,6 +43,9 @@
   // accessors
   const MatrixContent & getEigenspaceMatrix() const;
+  const VectorContent & getEigenvector(size_t i) const;
   const indexset & getIndices() const;
   void setEigenspaceMatrix(const MatrixContent &_content);
+
+  void setEigenpairs(const eigenvectorset &CurrentEigenvectors, const eigenvalueset &CurrentEigenvalues);
 
   bool contains(const Eigenspace &_indexset);
Index: src/LinearAlgebra/Subspace.cpp
===================================================================
--- src/LinearAlgebra/Subspace.cpp	(revision 58605562acab64d92776eafdb01c18caf23d7b60)
+++ src/LinearAlgebra/Subspace.cpp	(revision a06042e843c266378c28a07d857634215eb6f8b9)
@@ -37,8 +37,14 @@
 Subspace::Subspace(indexset & _s, Eigenspace &_FullSpace) :
   Eigenspace(_s),
-  ProjectToSubspace(_s.size(), _FullSpace.getIndices().size()),
-  ProjectFromSubspace(_FullSpace.getIndices().size(), _s.size()),
+  ProjectToSubspace(_FullSpace.getIndices().size(), _s.size()),
+  ProjectFromSubspace(_s.size(), _FullSpace.getIndices().size()),
   FullSpace(_FullSpace)
-{}
+{
+  // create projection matrices
+  createProjectionMatrices();
+
+  // create eigenspace matrices
+  projectFullSpaceMatrixToSubspace();
+}
 
 
@@ -212,2 +218,42 @@
 }
 
+
+/** Creates the projection matrix from Subspace::FullSpace::EigenvectorMatrix.
+ * We simply copy the respective eigenvectors from Subspace::FullSpace into
+ * Subspace::Eigenvectors.
+ */
+void Subspace::createProjectionMatrices()
+{
+  // first ProjectToSubspace
+
+  // generate column vectors
+  std::vector< boost::shared_ptr<VectorContent> > ColumnVectors;
+  for (size_t i = 0; i < Indices.size(); ++i) {
+    boost::shared_ptr<VectorContent> p(ProjectToSubspace.getColumnVector(i));
+    ColumnVectors.push_back( p );
+  }
+
+  // then copy from real eigenvectors
+  size_t localindex = 0;
+  BOOST_FOREACH(size_t iter, Indices) {
+    *ColumnVectors[localindex] = FullSpace.getEigenvector(iter);
+    localindex++;
+  }
+  Log() << Verbose(2) << "ProjectionToSubspace matrix is " << ProjectToSubspace << std::endl;
+
+  // then ProjectFromSubspace is just transposed
+  ProjectFromSubspace = ((const MatrixContent)ProjectToSubspace).transpose();
+  Log() << Verbose(2) << "ProjectFromSubspace matrix is " << ProjectFromSubspace << std::endl;
+}
+
+
+/** Creates the subspace matrix by projecting down the FullSpace::EigenspaceMatrix.
+ *  We just perform \f$M = P^t \cdot A \cdot P\f$, when P are the projection matrix,
+ *  A the full matrix and M the subspace matrix.
+ */
+void Subspace::projectFullSpaceMatrixToSubspace()
+{
+  // construct small matrix
+  EigenspaceMatrix = ProjectFromSubspace * FullSpace.getEigenspaceMatrix() * ProjectToSubspace;
+  Log() << Verbose(2) << "EigenspaceMatrix matrix is " << EigenspaceMatrix << std::endl;
+}
Index: src/LinearAlgebra/Subspace.hpp
===================================================================
--- src/LinearAlgebra/Subspace.hpp	(revision 58605562acab64d92776eafdb01c18caf23d7b60)
+++ src/LinearAlgebra/Subspace.hpp	(revision a06042e843c266378c28a07d857634215eb6f8b9)
@@ -15,4 +15,5 @@
 #include "MatrixContent.hpp"
 #include "VectorContent.hpp"
+#include "unittests/SubspaceFactorizerUnittest.hpp"
 
 /** A subset of eigenvectors from an Eigenspace.
@@ -31,4 +32,6 @@
 class Subspace : public Eigenspace
 {
+  // TODO: Remove if not needed anymore
+  friend void SubspaceFactorizerUnittest::SubspaceTest();
 public:
   typedef std::map<size_t, size_t> mapping;
@@ -51,4 +54,6 @@
   void invertLocalToGlobalMapping();
   void getSubspacematrixFromBigmatrix(const MatrixContent & bigmatrix);
+  void createProjectionMatrices();
+  void projectFullSpaceMatrixToSubspace();
 
   mapping LocalToGlobal;
Index: src/unittests/SubspaceFactorizerUnittest.cpp
===================================================================
--- src/unittests/SubspaceFactorizerUnittest.cpp	(revision 58605562acab64d92776eafdb01c18caf23d7b60)
+++ src/unittests/SubspaceFactorizerUnittest.cpp	(revision a06042e843c266378c28a07d857634215eb6f8b9)
@@ -471,11 +471,25 @@
 void SubspaceFactorizerUnittest::SubspaceTest()
 {
+  Eigenspace::eigenvectorset CurrentEigenvectors;
+  Eigenspace::eigenvalueset CurrentEigenvalues;
+
   Log() << Verbose(0) << std::endl << std::endl;
   // create the total index set
-  Log() << Verbose(1) << "Generating full space ..." << std::endl;
   IndexSet AllIndices;
   for (size_t i=0;i<matrixdimension;++i)
     AllIndices.insert(i);
   Eigenspace FullSpace(AllIndices, *matrix);
+  Log() << Verbose(1) << "Generated full space: " << FullSpace << std::endl;
+
+  // generate first set of eigenvectors
+  // set to first guess, i.e. the unit vectors of R^matrixdimension
+  BOOST_FOREACH( size_t index, AllIndices) {
+    boost::shared_ptr<VectorContent> EV(new VectorContent(matrixdimension));
+    EV->setZero();
+    EV->at(index) = 1.;
+    CurrentEigenvectors.push_back(EV);
+    CurrentEigenvalues.push_back(0.);
+  }
+  FullSpace.setEigenpairs(CurrentEigenvectors, CurrentEigenvalues);
 
   Log() << Verbose(1) << "Generating sub spaces ..." << std::endl;
@@ -508,5 +522,6 @@
         Log() << Verbose(2) << "Subspace with dimension of 1 cannot contain other subspaces." << std::endl;
       }
-    }
+
+     }
   }
 
