Index: src/unittests/SubspaceFactorizerUnittest.cpp
===================================================================
--- src/unittests/SubspaceFactorizerUnittest.cpp	(revision a06042e843c266378c28a07d857634215eb6f8b9)
+++ src/unittests/SubspaceFactorizerUnittest.cpp	(revision 1fb318e13ebc1029d5ba1a68d3b01c62237ab05b)
@@ -356,7 +356,7 @@
   size_t run=1; // counting iterations
   double threshold = 1.;  // containing threshold value
-  while ((threshold > 1e-10) && (run < 2)) {
+  while ((threshold > 1e-10) && (run < 10)) {
     // for every dimension
-    for (size_t dim = 0; dim<4;++dim) {
+    for (size_t dim = 0; dim<subspacelimit;++dim) {
       // for every index set of this dimension
       Log() << Verbose(0) << std::endl << std::endl;
@@ -491,5 +491,4 @@
     CurrentEigenvalues.push_back(0.);
   }
-  FullSpace.setEigenpairs(CurrentEigenvectors, CurrentEigenvalues);
 
   Log() << Verbose(1) << "Generating sub spaces ..." << std::endl;
@@ -526,4 +525,94 @@
   }
 
+  size_t run=1; // counting iterations
+  double threshold = 1.;  // containing threshold value
+  while ((threshold > 1e-10) && (run < 10)) {
+    // for every dimension
+    for (size_t dim = 0; dim< subspacelimit;++dim) {
+      // for every index set of this dimension
+      Log() << Verbose(0) << std::endl << std::endl;
+      Log() << Verbose(0) << "Current dimension is " << dim << std::endl;
+      std::pair<SubspaceMap::const_iterator,SubspaceMap::const_iterator> Bounds = Dimension_to_Indexset.equal_range(dim);
+      for (SubspaceMap::const_iterator IndexsetIter = Bounds.first;
+          IndexsetIter != Bounds.second;
+          ++IndexsetIter) {
+        Subspace& subspace = *(IndexsetIter->second);
+        // show the index set
+        Log() << Verbose(0) << std::endl;
+        Log() << Verbose(1) << "Current subspace is " << subspace << std::endl;
+
+        // solve
+        subspace.calculateEigenSubspace();
+
+        // note that assignment to global eigenvectors all remains within subspace
+      }
+    }
+
+    // print list of similar eigenvectors
+    BOOST_FOREACH( size_t index, AllIndices) {
+      Log() << Verbose(2) << "Similar to " << index << "th current eigenvector " << *(CurrentEigenvectors[index]) << " are:" << std::endl;
+      BOOST_FOREACH( SubspaceMap::value_type iter, Dimension_to_Indexset) {
+        const VectorContent & CurrentEV = (iter.second)->getEigenvectorParallelToFullOne(index);
+        if (!CurrentEV.IsZero())
+          Log() << Verbose(2) << CurrentEV << std::endl;
+      }
+      Log() << Verbose(2) << std::endl;
+    }
+
+    // create new CurrentEigenvectors from averaging parallel ones.
+    BOOST_FOREACH(size_t index, AllIndices) {
+      CurrentEigenvectors[index]->setZero();
+      CurrentEigenvalues[index] = 0.;
+      size_t count = 0;
+      BOOST_FOREACH( SubspaceMap::value_type iter, Dimension_to_Indexset) {
+        const VectorContent CurrentEV = (iter.second)->getEigenvectorParallelToFullOne(index);
+        *CurrentEigenvectors[index] += CurrentEV * (iter.second)->getEigenvalueOfEigenvectorParallelToFullOne(index);
+        CurrentEigenvalues[index] += (iter.second)->getEigenvalueOfEigenvectorParallelToFullOne(index);
+        if (!CurrentEV.IsZero())
+          count++;
+      }
+      *CurrentEigenvectors[index] *= 1./CurrentEigenvalues[index];
+      CurrentEigenvalues[index] /= (double)count;
+    }
+
+    // check orthonormality
+    threshold = calculateOrthogonalityThreshold(AllIndices, CurrentEigenvectors);
+    bool dontOrthonormalization = checkOrthogonality(AllIndices, CurrentEigenvectors);
+
+    // orthonormalize
+    if (!dontOrthonormalization) {
+      Log() << Verbose(0) << "Orthonormalizing ... " << std::endl;
+      for (IndexSet::const_iterator firstindex = AllIndices.begin();
+          firstindex != AllIndices.end();
+          ++firstindex) {
+        for (IndexSet::const_iterator secondindex = firstindex;
+            secondindex != AllIndices.end();
+            ++secondindex) {
+          if (*firstindex == *secondindex) {
+            (*CurrentEigenvectors[*secondindex]) *= 1./(*CurrentEigenvectors[*secondindex]).Norm();
+          } else {
+            (*CurrentEigenvectors[*secondindex]) -=
+                ((*CurrentEigenvectors[*firstindex])*(*CurrentEigenvectors[*secondindex]))
+                *(*CurrentEigenvectors[*firstindex]);
+          }
+        }
+      }
+    }
+
+//    // check orthonormality again
+//    checkOrthogonality(AllIndices, CurrentEigenvectors);
+
+    // put obtained eigenvectors into full space
+    FullSpace.setEigenpairs(CurrentEigenvectors, CurrentEigenvalues);
+
+    // show new ones
+    Log() << Verbose(0) << "Resulting new eigenvectors and -values, run " << run << " are:" << std::endl;
+    BOOST_FOREACH( size_t index, AllIndices) {
+      Log() << Verbose(0) << *CurrentEigenvectors[index] << " with " << CurrentEigenvalues[index] << std::endl;
+    }
+    run++;
+  }
+
+
   CPPUNIT_ASSERT_EQUAL(0,0);
 }
Index: src/unittests/SubspaceFactorizerUnittest.hpp
===================================================================
--- src/unittests/SubspaceFactorizerUnittest.hpp	(revision a06042e843c266378c28a07d857634215eb6f8b9)
+++ src/unittests/SubspaceFactorizerUnittest.hpp	(revision 1fb318e13ebc1029d5ba1a68d3b01c62237ab05b)
@@ -40,4 +40,5 @@
 
   enum { matrixdimension = 3 };
+  enum { subspacelimit = 2 };
 private:
 
