diff --git a/AMDiS/src/SolverMatrix.h b/AMDiS/src/SolverMatrix.h
index 0c4d23b8dcee6b43e6aec9b64a5221178670f093..91c72d93fa1566f09ebc3e7dbbb77fa528dbbf4f 100644
--- a/AMDiS/src/SolverMatrix.h
+++ b/AMDiS/src/SolverMatrix.h
@@ -67,14 +67,18 @@ namespace AMDiS {
     public : 
       void setMatrix(const Matrix<DOFMatrix*>& A)
       {
-	int ns = A.getSize(), size = A[0][0]->getFESpace()->getAdmin()->getUsedSize(),
-	    new_size = ns * size;
-	matrix.change_dim(new_size, new_size);
+	int                 ns= A.getSize();
+	std::vector<int>    block_starts(ns+1);
+	block_starts[0]= 0;
+	for (int i= 0; i < ns; ++i)
+	  block_starts[i+1]= block_starts[i] + A[i][i]->getFESpace()->getAdmin()->getUsedSize();
+
+	matrix.change_dim(block_starts[ns], block_starts[ns]);
 	DOFMatrix::inserter_type  ins(matrix);
 	for (int rb= 0; rb < ns; ++rb)
 	  for (int cb= 0; cb < ns; ++cb)
 	    if (A[rb][cb]) 
-	      ins[rb * size][cb * size] << A[rb][cb]->getBaseMatrix();	  
+	      ins[block_starts[rb]][block_starts[cb]] << A[rb][cb]->getBaseMatrix();	  
       }
 
       const DOFMatrix::base_matrix_type& getMatrix() const { return matrix; }