diff --git a/dune/solvers/solvers/quadraticipopt.hh b/dune/solvers/solvers/quadraticipopt.hh
index 0d558519e7a0e7247cac4ce144a933fb19cd4d1d..0a8583f999c2b3cf199fca571c5693c14eb17f99 100644
--- a/dune/solvers/solvers/quadraticipopt.hh
+++ b/dune/solvers/solvers/quadraticipopt.hh
@@ -154,7 +154,7 @@ get_nlp_info(Ipopt::Index& n, Ipopt::Index& m, Ipopt::Index& nnz_jac_g,
 
     nnz_h_lag = 0;
     
-    for (int rowIdx=0; rowIdx<hessian_->N(); rowIdx++) {
+    for (size_t rowIdx=0; rowIdx<hessian_->N(); rowIdx++) {
         
         const typename MatrixType::row_type& row = (*hessian_)[rowIdx];
         
@@ -197,7 +197,7 @@ get_bounds_info(Ipopt::Index n, Ipopt::Number* x_l, Ipopt::Number* x_u,
 
     if (obstacles_) {
 
-        for (int i=0; i<x_->size(); i++) {
+        for (size_t i=0; i<x_->size(); i++) {
             
             for (size_t j=0; j<blocksize; j++) {
                 
@@ -213,7 +213,7 @@ get_bounds_info(Ipopt::Index n, Ipopt::Number* x_l, Ipopt::Number* x_u,
     } else {
 
         // unset all bounds
-        for (int i=0; i<x_->dim(); i++) {
+        for (size_t i=0; i<x_->dim(); i++) {
             x_l[i] = -std::numeric_limits<double>::max();
             x_u[i] =  std::numeric_limits<double>::max();
         }
@@ -222,7 +222,7 @@ get_bounds_info(Ipopt::Index n, Ipopt::Number* x_l, Ipopt::Number* x_u,
 
     if (dirichletNodes_) {
 
-        for (int i=0; i<x_->size(); i++) {
+        for (size_t i=0; i<x_->size(); i++) {
             
             for (size_t j=0; j<blocksize; j++) {
 
@@ -253,7 +253,7 @@ get_starting_point(Ipopt::Index n, bool init_x, Ipopt::Number* x,
     assert(init_lambda == false);
     
     // initialize to the given starting point
-    for (int i=0; i<x_->size(); i++)
+    for (size_t i=0; i<x_->size(); i++)
         for (int j=0; j<blocksize; j++)
             x[i*blocksize+j] = (*x_)[i][j];
 
@@ -276,7 +276,7 @@ eval_f(Ipopt::Index n, const Ipopt::Number* x, bool new_x, Ipopt::Number& obj_va
     // Compute x^T*A*x
     ////////////////////////////////////
     
-    for (int rowIdx=0; rowIdx<hessian_->N(); rowIdx++) {
+    for (size_t rowIdx=0; rowIdx<hessian_->N(); rowIdx++) {
         
         const typename MatrixType::row_type& row = (*hessian_)[rowIdx];
         
@@ -300,7 +300,7 @@ eval_f(Ipopt::Index n, const Ipopt::Number* x, bool new_x, Ipopt::Number& obj_va
     obj_value *= 0.5;
     
     // -b(x)
-    for (int i=0; i<rhs_->size(); i++)
+    for (size_t i=0; i<rhs_->size(); i++)
         for (int j=0; j<blocksize; j++)
             obj_value -= x[i*blocksize+j] * (*rhs_)[i][j];
   
@@ -321,7 +321,7 @@ eval_grad_f(Ipopt::Index n, const Ipopt::Number* x, bool new_x, Ipopt::Number* g
     for (int i=0; i<n; i++)
         grad_f[i] = 0;
 
-    for (int i=0; i<hessian_->N(); i++) {
+    for (size_t i=0; i<hessian_->N(); i++) {
 
         const typename MatrixType::row_type& row = (*hessian_)[i];
 
@@ -339,7 +339,7 @@ eval_grad_f(Ipopt::Index n, const Ipopt::Number* x, bool new_x, Ipopt::Number* g
     }
     
     // g = g - b
-    for (int i=0; i<rhs_->size(); i++)
+    for (size_t i=0; i<rhs_->size(); i++)
         for (int j=0; j<blocksize; j++)
             grad_f[i*blocksize+j] -= (*rhs_)[i][j];
 
@@ -382,7 +382,7 @@ eval_h(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
         int idx = 0;
         
         // Loop over all matrix rows
-        for (int rowIdx=0; rowIdx<hessian_->N(); rowIdx++) {
+        for (size_t rowIdx=0; rowIdx<hessian_->N(); rowIdx++) {
             
             const typename MatrixType::row_type& row = (*hessian_)[rowIdx];
             
@@ -442,7 +442,7 @@ eval_h(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
         int idx = 0;
         
         // Loop over all matrix rows
-        for (int rowIdx=0; rowIdx<hessian_->N(); rowIdx++) {
+        for (size_t rowIdx=0; rowIdx<hessian_->N(); rowIdx++) {
             
             const typename MatrixType::row_type& row = (*hessian_)[rowIdx];
             
@@ -501,7 +501,7 @@ finalize_solution(Ipopt::SolverReturn status,
   // here is where we would store the solution to variables, or write to a file, etc
   // so we could use the solution.
 
-    for (int i=0; i<x_->size(); i++)
+    for (size_t i=0; i<x_->size(); i++)
         for (int j=0; j<blocksize; j++)
             (*x_)[i][j] = x[i*blocksize+j];
 
diff --git a/dune/solvers/transferoperators/genericmultigridtransfer.hh b/dune/solvers/transferoperators/genericmultigridtransfer.hh
index 22cdf57c0451002750cad5cdfedf672455f4051b..8e7a2a300334970bf8b47de90eb8112c1bfef277 100644
--- a/dune/solvers/transferoperators/genericmultigridtransfer.hh
+++ b/dune/solvers/transferoperators/genericmultigridtransfer.hh
@@ -80,7 +80,7 @@ public:
 
         // Make identity matrix
         TransferMatrixBlock identity(0);
-        for (int i=0; i<identity.N(); i++)
+        for (size_t i=0; i<identity.N(); i++)
             identity[i][i] = 1;
 
         // A factory for the shape functions
@@ -246,7 +246,7 @@ public:
         typedef typename TransferOperatorType::row_type RowType;
         typedef typename RowType::ConstIterator ColumnIterator;
 
-        for(int rowIdx=0; rowIdx<matrix.N(); rowIdx++)
+        for(size_t rowIdx=0; rowIdx<matrix.N(); rowIdx++)
         {
             const RowType& row = matrix[rowIdx];
 
@@ -316,7 +316,7 @@ public:
         typedef typename TransferOperatorType::row_type RowType;
         typedef typename RowType::ConstIterator ColumnIterator;
 
-        for (int rowIdx=0; rowIdx<matrix.N(); rowIdx++)
+        for (size_t rowIdx=0; rowIdx<matrix.N(); rowIdx++)
         {
             const RowType& row = matrix[rowIdx];
 
@@ -379,7 +379,7 @@ public:
         typedef typename TransferOperatorType::row_type RowType;
         typedef typename RowType::ConstIterator ColumnIterator;
 
-        for (int rowIdx=0; rowIdx<matrix.N(); rowIdx++) {
+        for (size_t rowIdx=0; rowIdx<matrix.N(); rowIdx++) {
 
             if (!f[rowIdx][0])
                 continue;
@@ -457,7 +457,7 @@ public:
         typedef typename TransferOperatorType::row_type RowType;
         typedef typename RowType::ConstIterator ColumnIterator;
 
-        for (int rowIdx=0; rowIdx<matrix.N(); rowIdx++) {
+        for (size_t rowIdx=0; rowIdx<matrix.N(); rowIdx++) {
             const typename BitVectorType::const_reference fineBits = f[rowIdx];
 
             if (fineBits.none())
@@ -470,7 +470,7 @@ public:
 
             for(; cIt!=cEndIt; ++cIt)
             {
-                for(int i=0; i<fineBits.size(); ++i)
+                for(size_t i=0; i<fineBits.size(); ++i)
                     if (fineBits.test(i))
                         t[cIt.index()][i] = true;
             }
@@ -546,7 +546,7 @@ public:
         typedef typename TransferOperatorType::row_type RowType;
         typedef typename RowType::ConstIterator ColumnIterator;
 
-        for (int rowIdx=0; rowIdx<matrix.N(); rowIdx++) {
+        for (size_t rowIdx=0; rowIdx<matrix.N(); rowIdx++) {
             const typename BitVectorType::const_reference fineBits = f[rowIdx];
 
             if (fineBits.none())
@@ -559,7 +559,7 @@ public:
 
             for(; cIt!=cEndIt; ++cIt)
             {
-                for(int i=0; i<fineBits.size(); ++i)
+                for(size_t i=0; i<fineBits.size(); ++i)
                     if (fineBits.test(i))
                         if (diagonalIsOne(*cIt, i))
                             t[cIt.index()][i] = true;
@@ -636,7 +636,7 @@ public:
         coarseMat = 0;
 
         // Loop over all rows of the stiffness matrix
-        for (int v=0; v<fineMat.N(); v++)
+        for (size_t v=0; v<fineMat.N(); v++)
         {
             const RowType& row = fineMat[v];
 
@@ -763,7 +763,7 @@ public:
         Dune::MatrixIndexSet indices(matrix.M(), matrix.M());
 
         // Loop over all rows of the fine matrix
-        for (int v=0; v<fineMat.N(); v++)
+        for (size_t v=0; v<fineMat.N(); v++)
         {
             const RowType& row = fineMat[v];
 
diff --git a/dune/solvers/transferoperators/truncateddensemgtransfer.cc b/dune/solvers/transferoperators/truncateddensemgtransfer.cc
index 263d1b79e9bcb99951713b9325521cc76ab5ab67..cb13c026b5e9bbe51048174819119dc7e893fd2a 100644
--- a/dune/solvers/transferoperators/truncateddensemgtransfer.cc
+++ b/dune/solvers/transferoperators/truncateddensemgtransfer.cc
@@ -25,7 +25,7 @@ void TruncatedDenseMGTransfer<DiscFuncType, BitVectorType, OperatorType>::prolon
 
 
 
-    for(int rowIdx=0; rowIdx<this->matrix_.N(); rowIdx++) {
+    for(size_t rowIdx=0; rowIdx<this->matrix_.N(); rowIdx++) {
 
         const RowType& row = this->matrix_[rowIdx];
 
@@ -80,7 +80,7 @@ void TruncatedDenseMGTransfer<DiscFuncType, BitVectorType, OperatorType>::restri
     Iterator tIt      = t.begin();
     ConstIterator fIt = f.begin();
     
-    for (int rowIdx=0; rowIdx<this->matrix_.N(); rowIdx++) {
+    for (size_t rowIdx=0; rowIdx<this->matrix_.N(); rowIdx++) {
         
         const RowType& row = this->matrix_[rowIdx];
 
@@ -131,7 +131,7 @@ galerkinRestrict(const OperatorType& fineMat, OperatorType& coarseMat,
   if (this->recompute_ == NULL)
       coarseMat = 0;
   else {
-      for (int i=0; i<coarseMat.N(); i++) {
+      for (size_t i=0; i<coarseMat.N(); i++) {
 
           RowType& row = coarseMat[i];
           
@@ -151,7 +151,7 @@ galerkinRestrict(const OperatorType& fineMat, OperatorType& coarseMat,
   }
 
   // Loop over all rows of the stiffness matrix
-  for (int v=0; v<fineMat.N(); v++) {
+  for (size_t v=0; v<fineMat.N(); v++) {
       
       const RowType& row = fineMat[v];