diff --git a/AMDiS/src/DOFMatrix.cc b/AMDiS/src/DOFMatrix.cc
index 843e42e5826c3fb41391820ba931b0b3866a2eab..d0f9edfc06ec2dda45bc9673330437f430b384cc 100644
--- a/AMDiS/src/DOFMatrix.cc
+++ b/AMDiS/src/DOFMatrix.cc
@@ -147,8 +147,6 @@ namespace AMDiS {
     }
   }
 
-
-  // ok
   DOFMatrix& DOFMatrix::operator=(const DOFMatrix& rhs)
   {
     TEST_EXIT(rhs.inserter == 0 && inserter == 0)("Cannot copy during insertion");
@@ -158,6 +156,7 @@ namespace AMDiS {
     operators = rhs.operators;
     operatorFactor = rhs.operatorFactor;
     matrix = rhs.matrix;
+    coupleMatrix = rhs.coupleMatrix;
     if (rhs.boundaryManager) {
       boundaryManager = NEW BoundaryManager(*rhs.boundaryManager);
     } else {
@@ -173,7 +172,6 @@ namespace AMDiS {
     return *this;
   }
 
-
   void DOFMatrix::addElementMatrix(double sign, 
 				   const ElementMatrix &elMat, 
 				   const BoundaryType *bound,
@@ -198,7 +196,7 @@ namespace AMDiS {
 
       if (condition && condition->isDirichlet()) {
 	if (!coupleMatrix)
-	  ins[row][row]= 1.0;
+	  applyDBCs.insert(static_cast<int>(row));
       } else
 	for (int j = 0; j < n_col; j++) {  // for all columns
 	  col = elMat.colIndices[j];
@@ -211,7 +209,7 @@ namespace AMDiS {
     }
   }
 
-  double DOFMatrix::logAcc(DegreeOfFreedom a,DegreeOfFreedom b) const
+  double DOFMatrix::logAcc(DegreeOfFreedom a, DegreeOfFreedom b) const
   {
     return matrix[a][b];
   }
@@ -366,20 +364,9 @@ namespace AMDiS {
     return fillFlag;
   }
 
-  void DOFMatrix::axpy(double a, 
-		       const DOFMatrix& x,
-		       const DOFMatrix& y)
+  void DOFMatrix::axpy(double a, const DOFMatrix& x, const DOFMatrix& y)
   {
-    FUNCNAME("DOFMatrix::axpy");
-    TEST_EXIT(x.getRowFESpace() == y.getRowFESpace() &&
-	      rowFESpace == x.getRowFESpace())
-      ("row fe-spaces not equal\n");
-    TEST_EXIT(x.getColFESpace() == y.getColFESpace() &&
-	      colFESpace == x.getColFESpace())
-      ("col fe-spaces not equal\n");
-
     matrix+= a * x.matrix + y.matrix;
-
   }
 
 
@@ -402,21 +389,12 @@ namespace AMDiS {
 
   void DOFMatrix::removeRowsWithDBC(std::set<int> *rows)
   {      
-      ERROR_EXIT("TODO: removeRowsWithDBC");
-
-//     for (std::set<int>::iterator it = rows->begin();
-// 	 it != rows->end(); 
-// 	 ++it) {
-//       if (coupleMatrix) {
-// 	matrix[*it].resize(0);
-//       } else {
-// 	matrix[*it].resize(1);
-// 	matrix[*it][0].col = *it;
-// 	matrix[*it][0].entry = 1.0;
-//       }
-//     }
-
-//     rows->clear();
+    inserter_type &ins= *inserter;
+   
+    for (std::set<int>::iterator it = rows->begin(); it != rows->end(); ++it)
+      ins[*it][*it] = 1.0;
+
+    rows->clear();
   }
 
   void DOFMatrix::createPictureFile(const char* filename, int dim)
diff --git a/AMDiS/src/DOFMatrix.h b/AMDiS/src/DOFMatrix.h
index 5321efc2e824c36a909c44ce995a12e63cd7164e..c4c5da5c1098439103cdc3f083c26a2b028b0d03 100644
--- a/AMDiS/src/DOFMatrix.h
+++ b/AMDiS/src/DOFMatrix.h
@@ -256,38 +256,26 @@ namespace AMDiS {
     const bool& operator[](int i) const {ERROR_EXIT("Shouldn't be used, only fake."); return dummy;}
 #endif
  
-    /** \brief
-     * DOFMatrix does not need to be compressed before assembling, when using MTL4.
-     */
+    /// DOFMatrix does not need to be compressed before assembling, when using MTL4.
     void compressDOFIndexed(int first, int last, std::vector<DegreeOfFreedom> &newDOF) {}
 
-    /** \brief
-     * Implements DOFIndexedBase::freeDOFContent()
-     */ 
+    /// Implements DOFIndexedBase::freeDOFContent()
     virtual void freeDOFContent(int index);
 
-    /** \brief
-     * Returns \ref coupleMatrix.
-     */
+    /// Returns \ref coupleMatrix.
     inline bool isCoupleMatrix() { 
       return coupleMatrix; 
     }
 
-    /** \brief
-     * Returns \ref coupleMatrix.
-     */
+    /// Returns \ref coupleMatrix.
     inline void setCoupleMatrix(bool c) { 
       coupleMatrix = c; 
     }
 
-      /** \brief
-     * a*x + y
-     */
+    /// a * x + y
     void axpy(double a, const DOFMatrix& x, const DOFMatrix& y);
 
-    /** \brief
-     * Multiplication with a scalar.
-     */
+    /// Multiplication with a scalar.
     void scal(double s);
 
     /** \brief
@@ -427,7 +415,7 @@ namespace AMDiS {
 
     /// Returns number of rows (\ref matrix.size())
     inline int getSize() const { 
-	return num_rows(matrix);
+      return num_rows(matrix);
     }
 
     /** \brief
@@ -438,7 +426,6 @@ namespace AMDiS {
       return rowFESpace->getAdmin()->getUsedSize();
     }
 
-
     // Only fake, shouldn't be called
     /** \brief
      * Returns number of cols. For that, the function iteratos over all
@@ -510,6 +497,7 @@ namespace AMDiS {
       return boundaryManager; 
     }
 
+    /// Returns a pointer to \ref applyDBCs.
     std::set<int>* getApplyDBCs() {
       return &applyDBCs;
     }
@@ -621,7 +609,7 @@ namespace AMDiS {
     std::string name;
 
     /// Sparse matrix, type is a template parameter by default compressed2D<double>
-    base_matrix_type         matrix;
+    base_matrix_type matrix;
 
     /// Used while mesh traversal
     static DOFMatrix *traversePtr;
@@ -644,13 +632,22 @@ namespace AMDiS {
     ///
     BoundaryManager *boundaryManager;
 
-    ///
+    /** \brief
+     * If false, the matrix is a diagonal matrix within a matrix of DOF matrices.
+     * Otherwise the value is true, and the matrix is an off-diagonal matrix.
+     */
     bool coupleMatrix;
 
     /// Temporary variable used in assemble()
     ElementMatrix *elementMatrix;
 
-    ///
+    /* \brief
+     * A set of row indices. When assembling the DOF matrix, all rows, that
+     * correspond to a dof at a dirichlet boundary, are ignored and the row is
+     * left blank. After assembling, the diagonal element of the matrix must be
+     * set to 1. The indices of all rows, where this should be done, are stored
+     * in this set.
+     */    
     std::set<int> applyDBCs;
 
 #ifdef HAVE_PARALLEL_AMDIS
@@ -659,7 +656,7 @@ namespace AMDiS {
 #endif
 
     /// Inserter object: implemented as pointer, allocated and deallocated as needed
-    inserter_type      *inserter;
+    inserter_type *inserter;
       
     friend class DOFAdmin;
     friend class DOFVector<double>;