diff --git a/dune/fufem/assemblers/localassemblers/stvenantkirchhoffassembler.hh b/dune/fufem/assemblers/localassemblers/stvenantkirchhoffassembler.hh
index 32c5556cf1a5c56c287749c1f17473ab10c00a5c..577a7b87d4f982dc4154f09e3eef71e273dce041 100644
--- a/dune/fufem/assemblers/localassemblers/stvenantkirchhoffassembler.hh
+++ b/dune/fufem/assemblers/localassemblers/stvenantkirchhoffassembler.hh
@@ -32,8 +32,8 @@ stVenantKirchhoffContraction(const GradientVector& g1, const GradientVector& g2,
     ctype const lambda = E * nu / (1.0+nu) / (1.0-2.0*nu);
     ctype const mu = 0.5 * E / (1+nu);
     LocalMatrix R = Dune::ScaledIdentityMatrix<ctype,dim>(mu*(g1*g2));
-    for(int i=0; i<R.N(); ++i)
-      for(int j=0; j<R.N(); ++j)
+    for(std::size_t i=0; i<R.N(); ++i)
+      for(std::size_t j=0; j<R.N(); ++j)
         R[i][j] += mu * (g1[j]*g2[i]) + lambda * (g1[i]*g2[j]);
     return R;
 }
diff --git a/dune/fufem/assemblers/localassemblers/viscosityassembler.hh b/dune/fufem/assemblers/localassemblers/viscosityassembler.hh
index ebef192d10eec4e75876aaf897f4d26bd4d8f3d2..6549ed2632f5bc8cb98759c10fb6d6533944d5ae 100644
--- a/dune/fufem/assemblers/localassemblers/viscosityassembler.hh
+++ b/dune/fufem/assemblers/localassemblers/viscosityassembler.hh
@@ -18,8 +18,8 @@ inline LocalMatrix isotropicNewtonianViscosityContraction(
     using ctype = typename GradientVector::field_type;
     int const dim = GradientVector::dimension;
     LocalMatrix R = Dune::ScaledIdentityMatrix<ctype,dim>(muShear*(g1*g2));
-    for(int i=0; i<R.N(); ++i)
-      for(int j=0; j<R.N(); ++j)
+    for(std::size_t i=0; i<R.N(); ++i)
+      for(std::size_t j=0; j<R.N(); ++j)
         R[i][j] += muShear * (g1[j]*g2[i])
           + (muBulk-(2.0/3.0)*muShear) * (g1[i]*g2[j]);
     return R;
diff --git a/dune/fufem/functions/polynomial.hh b/dune/fufem/functions/polynomial.hh
index 64cfd341e7fded02aa926ba01249c3bbb83d395f..a8932b8533ddc55064b0009bcfe804fc210dbcf5 100644
--- a/dune/fufem/functions/polynomial.hh
+++ b/dune/fufem/functions/polynomial.hh
@@ -93,17 +93,20 @@ class Polynomial:
          *
          *  \param d order of the derivative
          */
-        Polynomial<DomainType, RangeType>& D(const size_t d)
+        Polynomial<DomainType, RangeType>& D(const std::size_t d)
         {
+            if (d==0)
+              return *this;
+
             typename DerivativeContainer::iterator ret=dP.find(d);
             if (ret==dP.end())
             {
                 CoeffType newCoeffs = coeffs_;
 
-                for (int k = degree_; k>=d; --k)
+                for (std::size_t k = degree_; k>=d; --k)
                     newCoeffs[k] *= dCoeff(d,k);
 
-                for (int k=0; k<d; ++k)
+                for (std::size_t k=0; k<d; ++k)
                 {
                     typename CoeffType::iterator firstEntry=newCoeffs.begin();
                     newCoeffs.erase(firstEntry);
@@ -122,7 +125,7 @@ class Polynomial:
         const CoeffType coeffs_;
         const unsigned int degree_;
 
-        typedef std::map<size_t, std::shared_ptr<Polynomial<DT,RT> > > DerivativeContainer;
+        typedef std::map<std::size_t, std::shared_ptr<Polynomial<DT,RT> > > DerivativeContainer;
         DerivativeContainer dP;
 
         unsigned int dCoeff(const int& d, const int& k) const
diff --git a/dune/fufem/functions/portablegreymap.hh b/dune/fufem/functions/portablegreymap.hh
index b567c5132863d38d3014ac2aed6fc0f0a0662b63..8c91a6d70f5ba6a5792afca17a45c7ff87afaf87 100644
--- a/dune/fufem/functions/portablegreymap.hh
+++ b/dune/fufem/functions/portablegreymap.hh
@@ -295,10 +295,10 @@ class PortableGreyMap:
             r[0] = xDomainMin;
             r[1] = yDomainMax;
 
-            for (int j= 0; j<height; ++j)
+            for (unsigned int j= 0; j<height; ++j)
             {
                 r[0] = xDomainMin;
-                for (int i= 0; i<width; ++i)
+                for (unsigned int i= 0; i<width; ++i)
                 {
 //                    std::cout << r << std::endl;
                     function.evaluate(r,fval);
diff --git a/dune/fufem/functions/portablepixelmap.hh b/dune/fufem/functions/portablepixelmap.hh
index 2c49c988e2b999305cdd760879193287a6240e4e..514a54a2f0dadd9608967c1bde065df8669f160d 100644
--- a/dune/fufem/functions/portablepixelmap.hh
+++ b/dune/fufem/functions/portablepixelmap.hh
@@ -705,12 +705,12 @@ class PortablePixelMap:
                     ppmfile >> std::skipws >> value;
 
             /* read width x height color values */
-            for (i=0; i<height_; ++i)
+            for (std::size_t i=0; i<height_; ++i)
             {
-                for(j=0; j<width_; ++j)
+                for(std::size_t j=0; j<width_; ++j)
                 {
                     Color pix_color(0);
-                    for (int c=0; c<3; ++c)
+                    for (std::size_t c=0; c<3; ++c)
                     {
                         if (ppmID == "P6")
                             ppmfile.read(reinterpret_cast<char*>(&(pix_color[c])), datalength*sizeof(char));
@@ -729,7 +729,7 @@ class PortablePixelMap:
                 }
 
                 /* Skip rest of pixel line */
-                for (int k=0; k < 3*(imgWidth-width_); ++k)
+                for (std::size_t k=0; k < 3*(imgWidth-width_); ++k)
                     if (ppmID=="P6")
                         ppmfile.read(reinterpret_cast<char*>(&value), datalength*sizeof(char));
                     else
@@ -802,10 +802,10 @@ class PortablePixelMap:
             r[0] = xDomainMin;
             r[1] = yDomainMax;
 
-            for (int j= 0; j<height; ++j)
+            for (std::size_t j= 0; j<height; ++j)
             {
                 r[0] = xDomainMin;
-                for (int i= 0; i<width; ++i)
+                for (std::size_t i= 0; i<width; ++i)
                 {
                     function.evaluate(r,fval);
 
diff --git a/dune/fufem/geometry/refinedsimplexgeometry.hh b/dune/fufem/geometry/refinedsimplexgeometry.hh
index 4aeb596cf798b5a6047a468ba90c3e205600b083..2b2d59eabdf2c06b4ec920210f2f85c72def5425 100644
--- a/dune/fufem/geometry/refinedsimplexgeometry.hh
+++ b/dune/fufem/geometry/refinedsimplexgeometry.hh
@@ -269,10 +269,10 @@ RefinedSimplexGeometry<typename Element::Geometry::ctype,2,3> makeRefinedSimplex
 
     typename Element::Geometry eltGeometry = element.geometry();
 
-    for (int i=0; i<eltGeometry.corners(); ++i)
+    for (std::size_t i=0; i<(std::size_t)eltGeometry.corners(); ++i)
         movedVirtualVertices[i] = eltGeometry.corner(i);
 
-    for (int i=0; i<element.subEntities(Element::dimension - 1); ++i)
+    for (std::size_t i=0; i<(std::size_t)element.subEntities(Element::dimension - 1); ++i)
     {
         typename Element::Geometry::GlobalCoordinate y;
         parameterization.evaluate(element.template subEntity<Element::dimension -1>(i).geometry().center(), y);
diff --git a/dune/fufem/test/basisgridfunctiontest.cc b/dune/fufem/test/basisgridfunctiontest.cc
index b09b8b750e987a450170bc24b165b84207e1b553..91b4531fa8aca65ff3f688b12ee444770b45e0f7 100644
--- a/dune/fufem/test/basisgridfunctiontest.cc
+++ b/dune/fufem/test/basisgridfunctiontest.cc
@@ -38,8 +38,8 @@ class F : public VirtualDifferentiableFunction<DT, RT>
 
         virtual void evaluateDerivative(const DT& x, DerivativeType& d) const
         {
-            for (int i=0; i<d.N(); ++i)
-                for (int j=0; j<d.M(); ++j)
+            for (std::size_t i=0; i<d.N(); ++i)
+                for (std::size_t j=0; j<d.M(); ++j)
                     d[i][j] = (i+1)*j;
         }
 };
diff --git a/dune/fufem/test/common.hh b/dune/fufem/test/common.hh
index 79bb052d18518ebc39f7356435ff267d5e4f50b8..26d944f6da23880bf96ccacd089cb491bd9148cd 100644
--- a/dune/fufem/test/common.hh
+++ b/dune/fufem/test/common.hh
@@ -290,13 +290,13 @@ void refineLocally(GridType& grid, int refine=3)
     for(int i=0; i<refine; ++i)
     {
         GridView gv = grid.levelGridView(grid.maxLevel());
-        int half = gv.size(0)/2 + 1;
+        std::size_t half = gv.size(0)/2 + 1;
 
         ElementIterator it = gv.template begin<0>();
         ElementIterator end = gv.template end<0>();
         for(; it!=end; ++it)
         {
-            if (gv.indexSet().index(*it) < half)
+            if ((std::size_t)gv.indexSet().index(*it) < half)
                 grid.mark(1, *it);
         }
         grid.preAdapt();
diff --git a/dune/fufem/test/composedfunctiontest.cc b/dune/fufem/test/composedfunctiontest.cc
index e69899e1c36672833d091e519da3018449020686..ce60443c0508e0946df8c9f92254e768addd30dd 100644
--- a/dune/fufem/test/composedfunctiontest.cc
+++ b/dune/fufem/test/composedfunctiontest.cc
@@ -143,11 +143,11 @@ struct ComposedFunctionTestSuite
 {
     bool check()
     {
-        const int n=3,
+        const std::size_t n=3,
                   m=5,
                   d=2;
 
-        const int n_testpoints=100;
+        std::size_t n_testpoints=100;
 
         typedef Dune::FieldVector<double,n> DomainType;
         typedef Dune::FieldVector<double,m> IntermediateRangeType;
@@ -164,14 +164,14 @@ struct ComposedFunctionTestSuite
         DomainType x(0.0);
         RangeType  y(0.0);
 
-        for (int run=0; run<n_testpoints; ++run)
+        for (std::size_t run=0; run<n_testpoints; ++run)
         {
-            for (int dcomp=0; dcomp<n; ++dcomp)
+            for (std::size_t dcomp=0; dcomp<n; ++dcomp)
                 x[dcomp] = (5.0*rand())/RAND_MAX - 2.5;
 
             f_after_g.evaluate(x,y);
 
-            for (int rcomp=0; rcomp<d; ++rcomp)
+            for (std::size_t rcomp=0; rcomp<d; ++rcomp)
                 if (std::abs(y[rcomp]-x[rcomp])>1e-15)
                 {
                     std::cout << "y[" << rcomp << "] = " << y[rcomp] << ", x[" << rcomp << "] = " << x[rcomp] << std::endl;
@@ -197,7 +197,7 @@ struct ComposedGridFunctionTestSuite
                   m=5,
                   d=4;
 
-        const unsigned int n_testpoints=100;
+        const std::size_t n_testpoints=100;
 
         typedef Dune::FieldVector<typename GridType::ctype,n> DomainType;
         typedef Dune::FieldVector<double,m> IntermediateRangeType;
@@ -217,10 +217,10 @@ struct ComposedGridFunctionTestSuite
         DomainType x(0.0);
         RangeType  y(0.0),yy(0.0);
 
-        for (int run=0; run<n_testpoints; ++run)
+        for (std::size_t run=0; run<n_testpoints; ++run)
         {
             double sum=0;
-            for (int dcomp=0; dcomp<n; ++dcomp)
+            for (std::size_t dcomp=0; dcomp<n; ++dcomp)
             {
                 x[dcomp] = std::min((1.0*rand())/(n-1)/RAND_MAX, 1-sum);
                 sum += x[dcomp];
@@ -229,9 +229,9 @@ struct ComposedGridFunctionTestSuite
             f_after_g.evaluate(x,y); // let's just use evaluate. It's the default implementation using evaluateLocal internally so the GridFunction aspect should be checked well enough
             f_after_gg.evaluate(x,yy);
 
-            int kmin = std::min(d,n);
+            std::size_t kmin = std::min(d,n);
 
-            for (int rcomp=0; rcomp<kmin; ++rcomp)
+            for (std::size_t rcomp=0; rcomp<kmin; ++rcomp)
                 if (std::abs(y[rcomp]-x[rcomp])>1e-15 or std::abs(yy[rcomp]-x[rcomp])>1e-15)
                 {
                     std::cout << "y[" << rcomp << "] = " << y[rcomp] << ", x[" << rcomp << "] = " << x[rcomp] << std::endl;
@@ -239,7 +239,7 @@ struct ComposedGridFunctionTestSuite
                     return false;
                 }
 
-            for (int rcomp=kmin; rcomp<d; ++rcomp)
+            for (std::size_t rcomp=kmin; rcomp<d; ++rcomp)
                 if (y[rcomp]!=0.0 or yy[rcomp]!=0.0)
                     return false;
         }
diff --git a/dune/fufem/test/gridfunctiontest.cc b/dune/fufem/test/gridfunctiontest.cc
index c488577ef8de39cf81ae39c50af94a53f0896bb0..fdd336b95008898719f28cde42776216e6305d46 100644
--- a/dune/fufem/test/gridfunctiontest.cc
+++ b/dune/fufem/test/gridfunctiontest.cc
@@ -157,7 +157,7 @@ int main(int argc, char** argv)
         for (; elt!=eltEnd; ++elt)
         {
             LocalCoords xlocal(0.0);
-            for (int d=0; d<xlocal.N(); ++d)
+            for (std::size_t d=0; d<xlocal.N(); ++d)
                 xlocal[d] = (1.0*rand())/RAND_MAX;
 
             TestGridFunction<GridType>::RangeType flocal, fglobal;
@@ -215,7 +215,7 @@ int main(int argc, char** argv)
             for (; elt!=eltEnd; ++elt)
             {
                 LocalCoords xlocal(0.0);
-                for (int d=0; d<xlocal.N(); ++d)
+                for (std::size_t d=0; d<xlocal.N(); ++d)
                     xlocal[d] = (1.0*rand())/RAND_MAX;
 
                 if (testleafgridviewfunction.isDefinedOn(*elt))
diff --git a/dune/fufem/test/secondorderassemblertest.cc b/dune/fufem/test/secondorderassemblertest.cc
index 77c6aaa8d9b5cd7d87c8d9d1a810aa55fbe1aa96..1a25c1da559345ccd907ecd6c2337888751c94a2 100644
--- a/dune/fufem/test/secondorderassemblertest.cc
+++ b/dune/fufem/test/secondorderassemblertest.cc
@@ -35,7 +35,7 @@ bool compare(const Matrix1& matrix1, const Matrix2& matrix2)
   if (matrix1.M()!=matrix2.M())
     DUNE_THROW(Dune::Exception, "Number of rows does not match");
 
-  for(int i=0; i<matrix1.N(); ++i)
+  for(std::size_t i=0; i<matrix1.N(); ++i)
   {
     auto it = matrix1[i].begin();
     auto end = matrix1[i].end();