diff --git a/AMDiS/src/ITL_OEMSolver.h b/AMDiS/src/ITL_OEMSolver.h
index ecaa854df8fdda5d1c561ab3c05daa6d82863a5a..7c2245f7a993aa45d1271f41a4d0ff4224578738 100644
--- a/AMDiS/src/ITL_OEMSolver.h
+++ b/AMDiS/src/ITL_OEMSolver.h
@@ -74,7 +74,9 @@ namespace AMDiS {
       if (one_norm(x) > 1e100)
 	  x= 0.0;
 #endif 
-      return ITLSolver()(A, x, b, *this->leftPrecon, *this->rightPrecon, iter);
+      error= ITLSolver()(A, x, b, *this->leftPrecon, *this->rightPrecon, iter);
+      iterations= iter.iterations();
+      return error;
     }
 
 
@@ -124,7 +126,9 @@ namespace AMDiS {
     {
 	itl::cyclic_iteration<value_type> iter(b, this->max_iter, this->relative, 
 					       this->tolerance, this->print_cycle);
-	return ITLSolver()(A, x, b, *this->leftPrecon, *this->rightPrecon, iter, ell);
+	error= ITLSolver()(A, x, b, *this->leftPrecon, *this->rightPrecon, iter, ell);
+	iterations= iter.iterations();
+	return error;
     }
 
     class Creator : public OEMSolverCreator
diff --git a/AMDiS/src/OEMSolver.h b/AMDiS/src/OEMSolver.h
index e5b6fb13d7f0f3f14b45b1dedfe6219466cbb614..6f00a4c00999d211f5ec7dfe309c2a38e0b21b27 100644
--- a/AMDiS/src/OEMSolver.h
+++ b/AMDiS/src/OEMSolver.h
@@ -64,6 +64,8 @@ namespace AMDiS {
 	info(0),
 	residual(0),
 	print_cycle(100),
+	iterations(-1),
+	error(-1),
 	leftPrecon(NULL),
 	rightPrecon(NULL)
     {}
@@ -132,6 +134,7 @@ namespace AMDiS {
 	counter++;
       }
 	
+      // std::cout << "Iterative Solver: A = \n" << A.getMatrix();
       int r = solveSystem(A.getMatrix(), xx, bb);
 
       // Copy solution vector to DOFVector
@@ -164,6 +167,7 @@ namespace AMDiS {
       }
 
       // Solver on DOFVector for single system
+      std::cout << "Iterative Solver (System): A = \n" << A.getMatrix();
       int r= solveSystem(A.getMatrix(), xx, bb);
 
       for (int i = 0, counter = 0; i < ns; i++) {
@@ -227,6 +231,18 @@ namespace AMDiS {
       max_iter = i;
     }
 
+    /// Returns number of iterations in last run of an iterative solver
+    inline int getIterations() 
+    {
+	return iterations;
+    }
+
+    /// Returns error code in last run of an iterative solver
+    inline int getErrorCode() 
+    {
+	return error;
+    }
+
     /// Sets \ref info
     inline void setInfo(int i) 
     {
@@ -257,8 +273,16 @@ namespace AMDiS {
     /// Print cycle, after how many iterations the residuum norm is logged.
     int print_cycle;
 
+    /// How many iterations were performed in last solver (not set by UmfPack)
+    int iterations;
+
+    /// Error code  in last solver (not set by UmfPack)
+    int error;
+
+    /// Left preconditioner (ignored by some iterative solvers and by UmfPack)
     ITL_BasePreconditioner *leftPrecon;
 
+    /// Right preconditioner (ignored by some iterative solvers and by UmfPack)
     ITL_BasePreconditioner *rightPrecon;
   };
 
diff --git a/AMDiS/src/UmfPackSolver.h b/AMDiS/src/UmfPackSolver.h
index 634fbce7d87ec78728702dbe075a9c0e32afd32b..8bb6ae057599a8f2e042f48b57bce717998acb02 100644
--- a/AMDiS/src/UmfPackSolver.h
+++ b/AMDiS/src/UmfPackSolver.h
@@ -87,6 +87,8 @@ namespace AMDiS {
 	    solver->update_numeric();
 	else
 	    solver->update();
+	
+	// std::cout << "UmfPackSolver: A = \n" << A << "\n";
 	int code= (*solver)(x, b);
 	mtl::dense_vector<value_type> r= b - A * x;
 	std::cout << "UmfPackSolver: ||b-Ax|| = " << two_norm(r) << "\n";