diff --git a/inputs/cellsolver.parset b/inputs/cellsolver.parset
index 8cb35c60ee4b2aa87e9abb98d234abdb2371ddc1..1cd513ebd1bba927ad125b592c5084f6bfe58edb 100644
--- a/inputs/cellsolver.parset
+++ b/inputs/cellsolver.parset
@@ -27,7 +27,7 @@ cellDomain=1
 ## {start,finish} computes on all grid from 2^(start) to 2^finish refinement
 #----------------------------------------------------
 
-numLevels= 2  4
+numLevels= 2  2
 #numLevels =  1 1   # computes all levels from first to second entry
 #numLevels =  2 2   # computes all levels from first to second entry
 #numLevels =  1 3   # computes all levels from first to second entry
@@ -59,8 +59,8 @@ alpha=8.0
 
 
 #--- Lame-Parameters
-mu1=8.0
-lambda1=5.0
+mu1=80.0
+lambda1=80.0
 
 
 # better: pass material parameters as a vector
@@ -113,8 +113,8 @@ write_VTK = true
 #############################################
 #  Assembly options
 #############################################
-set_IntegralZero = true
-#set_IntegralZero = false
+#set_IntegralZero = true
+set_IntegralZero = false
 
 #arbitraryLocalIndex = 7
 #arbitraryElementNumber = 3
diff --git a/src/Cell-Problem.cc b/src/Cell-Problem.cc
index 6fb3b2acb23b1b72b0cbf74fdaa492ad2eff6856..223a5d3b17f5c655558899494dc599d636364353 100644
--- a/src/Cell-Problem.cc
+++ b/src/Cell-Problem.cc
@@ -55,6 +55,8 @@
 #include <dune/solvers/solvers/umfpacksolver.hh>  //TEST 
 
 
+#include <dune/istl/eigenvalue/test/matrixinfo.hh> // TEST: compute condition Number 
+
 #include <dune/functions/functionspacebases/hierarchicvectorwrapper.hh>
 
 #include <dune/fufem/dunepython.hh>
@@ -226,7 +228,10 @@ void computeElementStiffnessMatrix(const LocalView& localView,
   std::array<MatrixRT,3 > basisContainer = {G_1, G_2, G_3};
 
 //   int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1)+5;  // TEST
-  int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1);
+//   int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1);
+//   int orderQR = 0;
+//   int orderQR = 1;
+  int orderQR = 2;
   const auto& quad = QuadratureRules<double,dim>::rule(element.type(), orderQR);
   
   
@@ -371,13 +376,13 @@ void getOccupationPattern(const Basis& basis, MatrixIndexSet& nb, ParameterSet&
 
 // Compute the source term for a single element
 // < L (sym[D_gamma*nabla phi_i] + M_i ), x_3G_alpha >
-template<class LocalView, class LocalFunction1, class LocalFunction2, class Vector, class Force>
+template<class LocalView, class LocalFunction1, class LocalFunction2, class Vector, class LocalForce>
 void computeElementLoadVector( const LocalView& localView,
                                LocalFunction1& mu,
                                LocalFunction2& lambda,
                                const double gamma,
                                Vector& elementRhs,
-                               const Force& forceTerm
+                               const LocalForce& forceTerm
                                )
 {
   // | f*phi|
@@ -410,8 +415,14 @@ void computeElementLoadVector( const LocalView& localView,
   std::array<MatrixRT,3 > basisContainer = {G_1, G_2, G_3};
 
 //   int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1)+5;  // TEST
-  int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1);   // für simplex
+//   int orderQR = 0;
+//   int orderQR = 1;
+  int orderQR = 2;
+//   int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1);   // für simplex
   const auto& quad = QuadratureRules<double,dim>::rule(element.type(), orderQR);
+  
+  
+//   std::cout << "Quad-Rule order used: " << orderQR << std::endl;
 
   for (const auto& quadPoint : quad)
   {
@@ -426,6 +437,15 @@ void computeElementLoadVector( const LocalView& localView,
     for (size_t i=0; i< gradients.size(); i++)
       jacobian.mv(referenceGradients[i][0], gradients[i]);
     
+    //TEST
+//     std::cout << "forceTerm(element.geometry().global(quadPos)):"  << std::endl;
+//     std::cout << forceTerm(element.geometry().global(quadPos)) << std::endl;
+//     std::cout << "forceTerm(quadPos)" << std::endl;
+//     std::cout << forceTerm(quadPos) << std::endl;
+    
+    //TEST QUadrature 
+    std::cout << "mu(quadPos) :" << mu(quadPos) << std::endl;
+    std::cout << "lambda(quadPos) :" << lambda(quadPos) << std::endl;
     
 
     // "f*phi"-part
@@ -562,6 +582,7 @@ void assembleCellLoad(const Basis& basis,
 
     BlockVector<FieldVector<double,1> > elementRhs;
     computeElementLoadVector(localView, muLocal, lambdaLocal, gamma, elementRhs, loadFunctional);
+//     computeElementLoadVector(localView, muLocal, lambdaLocal, gamma, elementRhs, forceTerm); //TEST
 //     printvector(std::cout, elementRhs, "elementRhs", "--");
 //     printvector(std::cout, elementRhs, "elementRhs", "--");
     //////////////////////////////////////////////////////////////////////////////
@@ -624,7 +645,10 @@ auto energy(const Basis& basis,
     const auto& localFiniteElement = localView.tree().child(0).finiteElement();
 
 //     int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1 + 5 );  // TEST
-    int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1);
+//     int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1);
+//     int orderQR = 0;
+//     int orderQR = 1;
+    int orderQR = 2;
     const QuadratureRule<double, dim>& quad = QuadratureRules<double, dim>::rule(e.type(), orderQR);
 
     for (const auto& quadPoint : quad) 
@@ -971,7 +995,10 @@ auto test_derivative(const Basis& basis,
     const auto& localFiniteElement = localView.tree().child(0).finiteElement();
 
 //     int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1 + 5 );  // TEST
-    int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1);
+//     int orderQR = 0;
+//     int orderQR = 1;
+    int orderQR = 2;
+//     int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1);
     const QuadratureRule<double, dim>& quad = QuadratureRules<double, dim>::rule(e.type(), orderQR);
 
     for (const auto& quadPoint : quad) 
@@ -1148,7 +1175,10 @@ auto check_Orthogonality(const Basis& basis,
     const auto& localFiniteElement = localView.tree().child(0).finiteElement();
 
 //     int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1 + 5 );  // TEST
-    int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1);
+//     int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1);
+//     int orderQR = 0;
+//     int orderQR = 1;
+    int orderQR = 2;
     const QuadratureRule<double, dim>& quad = QuadratureRules<double, dim>::rule(e.type(), orderQR);
 
     for (const auto& quadPoint : quad) 
@@ -1259,7 +1289,10 @@ auto computeFullQ(const Basis& basis,
     const auto& localFiniteElement = localView.tree().child(0).finiteElement();
 
 //     int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1 + 5 );  // TEST
-    int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1);
+//     int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1);
+//     int orderQR = 0;
+//     int orderQR = 1;
+    int orderQR = 2;
     const QuadratureRule<double, dim>& quad = QuadratureRules<double, dim>::rule(e.type(), orderQR);
 
     for (const auto& quadPoint : quad) 
@@ -1402,6 +1435,11 @@ int main(int argc, char *argv[])
       std::cout <<"mu: " <<parameterSet.get<std::array<double,3>>("mu", {1.0,3.0,2.0}) << std::endl;
       std::cout <<"lambda: " << parameterSet.get<std::array<double,3>>("lambda", {1.0,3.0,2.0}) << std::endl;
   }
+  else
+  {
+      std::cout <<"mu: "     <<  parameterSet.get<double>("mu1",1.0) << std::endl;
+      std::cout <<"lambda: " <<  parameterSet.get<double>("lambda1",0.0) << std::endl;
+  }
   
 
 
@@ -1484,6 +1522,7 @@ int main(int argc, char *argv[])
     CellGridType grid_CE(lower,upper,nElements);
     using GridView = CellGridType::LeafGridView;
     const GridView gridView_CE = grid_CE.leafGridView();
+    std::cout << "Host grid has " << gridView_CE.size(dim) << " vertices." << std::endl;
     
     
     //TEST 
@@ -1508,7 +1547,6 @@ int main(int argc, char *argv[])
     ///////////////////////////////////
     //  Create Lambda-Functions for material Parameters depending on microstructure
     ///////////////////////////////////
-    
     auto materialImp = IsotropicMaterialImp<dim>();
     auto muTerm = materialImp.getMu(parameterSet);
     auto lambdaTerm = materialImp.getLambda(parameterSet);
@@ -1527,7 +1565,6 @@ int main(int argc, char *argv[])
                     else
                         return lambda2;
                     };*/
-
     auto muGridF  = Dune::Functions::makeGridViewFunction(muTerm, gridView_CE);
     auto muLocal = localFunction(muGridF);
     auto lambdaGridF  = Dune::Functions::makeGridViewFunction(lambdaTerm, gridView_CE);
@@ -1539,24 +1576,21 @@ int main(int argc, char *argv[])
     // 2 : GMRES
     // 3 : QR
     ///////////////////////////////////
-    unsigned int Solvertype = parameterSet.get<unsigned int>("Solvertype", 1);
+    unsigned int Solvertype = parameterSet.get<unsigned int>("Solvertype", 3);
     
     unsigned int Solver_verbosity = parameterSet.get<unsigned int>("Solver_verbosity", 2);
     
     // Print Options 
     bool print_debug = parameterSet.get<bool>("print_debug", false);
-    
-    
+
+    //VTK-Write 
     bool write_materialFunctions = parameterSet.get<bool>("write_materialFunctions", false);
     bool write_prestrainFunctions  = parameterSet.get<bool>("write_prestrainFunctions", false);
-    
-    
     bool write_corrector_phi1 = parameterSet.get<bool>("write_corrector_phi1", false);
     bool write_corrector_phi2 = parameterSet.get<bool>("write_corrector_phi2", false);
     bool write_corrector_phi3 = parameterSet.get<bool>("write_corrector_phi3", false);
     bool write_L2Error = parameterSet.get<bool>("write_L2Error", false);
     bool write_IntegralMean = parameterSet.get<bool>("write_IntegralMean", false);
-    
     bool write_VTK = parameterSet.get<bool>("write_VTK", false);
 
     /////////////////////////////////////////////////////////
@@ -1578,7 +1612,11 @@ int main(int argc, char *argv[])
         gridView_CE,
         power<dim>(                                                                             // eig dimworld?!?! 
         Functions::BasisFactory::Experimental::periodic(lagrange<1>(), periodicIndices),
-        flatLexicographic()));     
+        flatLexicographic()
+//         blockedInterleaved()             // ERROR 
+        ));     
+    
+    std::cout << "power<periodic> basis has " << Basis_CE.dimension() << " degrees of freedom" << std::endl;
 
     log << "size of FiniteElementBasis: " << Basis_CE.size() << std::endl;
     const int phiOffset = Basis_CE.size();
@@ -1589,7 +1627,7 @@ int main(int argc, char *argv[])
     VectorCT load_alpha1, load_alpha2, load_alpha3;
     MatrixCT stiffnessMatrix_CE;
 
-    bool set_IntegralZero = parameterSet.get<bool>("set_IntegralZero", true);
+    bool set_IntegralZero = parameterSet.get<bool>("set_IntegralZero", false);
     bool set_oneBasisFunction_Zero = false;
     bool substract_integralMean = false;
     if(set_IntegralZero)
@@ -1664,24 +1702,31 @@ int main(int argc, char *argv[])
     int arbitraryLeafIndex =  parameterSet.get<unsigned int>("arbitraryLeafIndex", 0);            // localIdx..assert Number < #ShapeFcts 
     int arbitraryElementNumber =  parameterSet.get<unsigned int>("arbitraryElementNumber", 0);
 
-    FieldVector<int,3> row;
-     row = arbitraryComponentwiseIndices(Basis_CE,arbitraryElementNumber,arbitraryLeafIndex);
+    
     if(print_debug)
+    {
+      FieldVector<int,3> row;
+      row = arbitraryComponentwiseIndices(Basis_CE,arbitraryElementNumber,arbitraryLeafIndex); 
       printvector(std::cout, row, "row" , "--");
+    }
 
     /////////////////////////////////////////////////////////
     // Assemble the system
     /////////////////////////////////////////////////////////
+    Dune::Timer StiffnessTimer;
     assembleCellStiffness(Basis_CE, muLocal, lambdaLocal, gamma,  stiffnessMatrix_CE, parameterSet);
+    std::cout << "Stiffness assembly Timer: " << StiffnessTimer.elapsed() << std::endl;
     assembleCellLoad(Basis_CE, muLocal, lambdaLocal,gamma, load_alpha1 ,x3G_1neg);
     assembleCellLoad(Basis_CE, muLocal, lambdaLocal,gamma, load_alpha2 ,x3G_2neg);
     assembleCellLoad(Basis_CE, muLocal, lambdaLocal,gamma, load_alpha3 ,x3G_3neg);
-    //   printmatrix(std::cout, stiffnessMatrix_CE, "StiffnessMatrix", "--");
-    //   printvector(std::cout, load_alpha1, "load_alpha1", "--");
+//     printmatrix(std::cout, stiffnessMatrix_CE, "StiffnessMatrix", "--");
+//     printvector(std::cout, load_alpha1, "load_alpha1", "--");
 
     //TODO Add Option for this
     // CHECK SYMMETRY:
 //     checkSymmetry(Basis_CE,stiffnessMatrix_CE);
+    
+    
 
 
     // set one basis-function to zero
@@ -1689,8 +1734,16 @@ int main(int argc, char *argv[])
     {
         setOneBaseFunctionToZero(Basis_CE, stiffnessMatrix_CE, load_alpha1, load_alpha2, load_alpha3, parameterSet);
     //     printmatrix(std::cout, stiffnessMatrix_CE, "StiffnessMatrix after setOneBasisFunctionToZero", "--");
-    //     printvector(std::cout, load_alpha1, "load_alpha1 after setOneBaseFunctionToZero", "--");
+        printvector(std::cout, load_alpha1, "load_alpha1 after setOneBaseFunctionToZero", "--");
     }
+    
+    //TEST: Compute Condition Number  (Can be very expensive !) 
+    const bool verbose = true;
+    const unsigned int arppp_a_verbosity_level = 2;
+    const unsigned int pia_verbosity_level = 1;
+    MatrixInfo<MatrixCT> matrixInfo(stiffnessMatrix_CE,verbose,arppp_a_verbosity_level,pia_verbosity_level);
+    std::cout << "Get condition number of Stiffness_CE: " << matrixInfo.getCond2(true) << std::endl;
+//     std::cout << "Get condition number of Stiffness_CE: " << matrixInfo.getCond2(false) << std::endl;
 
     ////////////////////////////////////////////////////
     // Compute solution