diff --git a/dune/gdt/assembler/local/codim0.hh b/dune/gdt/assembler/local/codim0.hh
index 1fedf823b7e88d7f67b5bfae9433b1cb5d485c8f..6d421eb83049e6b1b76f5540363ac8c0a1e940d9 100644
--- a/dune/gdt/assembler/local/codim0.hh
+++ b/dune/gdt/assembler/local/codim0.hh
@@ -68,7 +68,8 @@ public:
    * type of systemMatrix
    *  \tparam R           RangeFieldType, i.e. double
    */
-  template <class T, int Td, int Tr, int TrC, class A, int Ad, int Ar, int ArC, class EntityType, class M, class R>
+  template <class T, size_t Td, size_t Tr, size_t TrC, class A, size_t Ad, size_t Ar, size_t ArC, class EntityType,
+            class M, class R>
   void assembleLocal(const SpaceInterface<T, Td, Tr, TrC>& testSpace, const SpaceInterface<A, Ad, Ar, ArC>& ansatzSpace,
                      const EntityType& entity, Dune::Stuff::LA::MatrixInterface<M, R>& systemMatrix,
                      std::vector<std::vector<Dune::DynamicMatrix<R>>>& tmpLocalMatricesContainer,
@@ -149,7 +150,7 @@ public:
    * type of systemVector
    *  \tparam R           RangeFieldType, i.e. double
    */
-  template <class T, int d, int r, int rC, class EntityType, class V, class R>
+  template <class T, size_t d, size_t r, size_t rC, class EntityType, class V, class R>
   void assembleLocal(const SpaceInterface<T, d, r, rC>& testSpace, const EntityType& entity,
                      Dune::Stuff::LA::VectorInterface<V, R>& systemVector,
                      std::vector<std::vector<Dune::DynamicVector<R>>>& tmpLocalVectorContainer,
diff --git a/dune/gdt/assembler/local/codim1.hh b/dune/gdt/assembler/local/codim1.hh
index 99d35484e45a23e682873ecd2f6d8144e1a1cbd1..5c2358bafd3f85cd0e80dc0c15fbafdc0b57ce9c 100644
--- a/dune/gdt/assembler/local/codim1.hh
+++ b/dune/gdt/assembler/local/codim1.hh
@@ -52,9 +52,9 @@ public:
     return {numTmpObjectsRequired_, localOperator_.numTmpObjectsRequired()};
   }
 
-  template <class TE, int TEd, int TEr, int TErC, class AE, int AEd, int AEr, int AErC, class TN, int TNd, int TNr,
-            int TNrC, class AN, int ANd, int ANr, int ANrC, class IntersectionType, class MEE, class MNN, class MEN,
-            class MNE, class R>
+  template <class TE, size_t TEd, size_t TEr, size_t TErC, class AE, size_t AEd, size_t AEr, size_t AErC, class TN,
+            size_t TNd, size_t TNr, size_t TNrC, class AN, size_t ANd, size_t ANr, size_t ANrC, class IntersectionType,
+            class MEE, class MNN, class MEN, class MNE, class R>
   void assembleLocal(const SpaceInterface<TE, TEd, TEr, TErC>& testSpaceEntity,
                      const SpaceInterface<AE, AEd, AEr, AErC>& ansatzSpaceEntity,
                      const SpaceInterface<TN, TNd, TNr, TNrC>& testSpaceNeighbor,
@@ -150,8 +150,8 @@ public:
     }
   } // void assembleLocal(...) const
 
-  template <class T, int Td, int Tr, int TrC, class A, int Ad, int Ar, int ArC, class IntersectionType, class M,
-            class R>
+  template <class T, size_t Td, size_t Tr, size_t TrC, class A, size_t Ad, size_t Ar, size_t ArC,
+            class IntersectionType, class M, class R>
   void assembleLocal(const SpaceInterface<T, Td, Tr, TrC>& testSpace, const SpaceInterface<A, Ad, Ar, ArC>& ansatzSpace,
                      const IntersectionType& intersection, Dune::Stuff::LA::MatrixInterface<M, R>& systemMatrix,
                      std::vector<std::vector<Dune::DynamicMatrix<R>>>& tmpLocalMatricesContainer,
@@ -204,8 +204,8 @@ public:
     return {numTmpObjectsRequired_, localOperator_.numTmpObjectsRequired()};
   }
 
-  template <class T, int Td, int Tr, int TrC, class A, int Ad, int Ar, int ArC, class IntersectionType, class M,
-            class R>
+  template <class T, size_t Td, size_t Tr, size_t TrC, class A, size_t Ad, size_t Ar, size_t ArC,
+            class IntersectionType, class M, class R>
   void assembleLocal(const SpaceInterface<T, Td, Tr, TrC>& testSpace, const SpaceInterface<A, Ad, Ar, ArC>& ansatzSpace,
                      const IntersectionType& intersection, Dune::Stuff::LA::MatrixInterface<M, R>& systemMatrix,
                      std::vector<std::vector<Dune::DynamicMatrix<R>>>& tmpLocalMatricesContainer,
@@ -284,7 +284,7 @@ public:
     return {numTmpObjectsRequired_, localFunctional_.numTmpObjectsRequired()};
   }
 
-  template <class T, int d, int r, int rC, class IntersectionType, class V, class R>
+  template <class T, size_t d, size_t r, size_t rC, class IntersectionType, class V, class R>
   void assembleLocal(const SpaceInterface<T, d, r, rC>& testSpace, const IntersectionType& intersection,
                      Dune::Stuff::LA::VectorInterface<V, R>& systemVector,
                      std::vector<std::vector<Dune::DynamicVector<R>>>& tmpLocalVectorsContainer,
diff --git a/dune/gdt/basefunctionset/default/fv.hh b/dune/gdt/basefunctionset/default/fv.hh
index f234324eb80ef7ea5f2d1af8692fcde2d9692461..b19b3405c441342ce1aadb4a3d3f30af6cf5c479 100644
--- a/dune/gdt/basefunctionset/default/fv.hh
+++ b/dune/gdt/basefunctionset/default/fv.hh
@@ -19,7 +19,8 @@ namespace BaseFunctionSet {
 
 
 // forward, to be used in the traits and to allow for specialization
-template <class EntityImp, class DomainFieldImp, int domainDim, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp, size_t rangeDim,
+          size_t rangeDimCols = 1>
 class FiniteVolume
 {
   static_assert(Dune::AlwaysFalse<EntityImp>::value, "Untested for these dimensions!");
@@ -29,7 +30,8 @@ class FiniteVolume
 namespace internal {
 
 
-template <class EntityImp, class DomainFieldImp, int domainDim, class RangeFieldImp, int rangeDim, int rangeDimCols>
+template <class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp, size_t rangeDim,
+          size_t rangeDimCols>
 class FiniteVolumeTraits
 {
 public:
@@ -42,7 +44,7 @@ public:
 } // namespace internal
 
 
-template <class EntityImp, class DomainFieldImp, int domainDim, class RangeFieldImp>
+template <class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp>
 class FiniteVolume<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, 1, 1>
     : public BaseFunctionSetInterface<internal::FiniteVolumeTraits<EntityImp, DomainFieldImp, domainDim, RangeFieldImp,
                                                                    1, 1>,
@@ -110,7 +112,7 @@ private:
 }; // class FiniteVolume< ..., 1, 1 >
 
 
-template <class EntityImp, class DomainFieldImp, int domainDim, class RangeFieldImp, int rangeDim>
+template <class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp, size_t rangeDim>
 class FiniteVolume<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, 1>
     : public BaseFunctionSetInterface<internal::FiniteVolumeTraits<EntityImp, DomainFieldImp, domainDim, RangeFieldImp,
                                                                    rangeDim, 1>,
diff --git a/dune/gdt/basefunctionset/fem-localfunctions.hh b/dune/gdt/basefunctionset/fem-localfunctions.hh
index ebf2704a242e9e5663e673574ee01a2395db705c..7c2a2ce74c0e1ca034a4b191077adde36c571db8 100644
--- a/dune/gdt/basefunctionset/fem-localfunctions.hh
+++ b/dune/gdt/basefunctionset/fem-localfunctions.hh
@@ -18,8 +18,8 @@ namespace BaseFunctionSet {
 
 
 // forward, to be used in the traits and to allow for specialization
-template <class BaseFunctionSetMapImp, class DomainFieldImp, int domainDim, class RangeFieldImp, int rangeDim,
-          int rangeDimCols = 1>
+template <class BaseFunctionSetMapImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp, size_t rangeDim,
+          size_t rangeDimCols = 1>
 class FemLocalfunctionsWrapper
 {
   static_assert(AlwaysFalse<BaseFunctionSetMapImp>::value, "Untested for these dimensions!");
@@ -29,8 +29,8 @@ class FemLocalfunctionsWrapper
 namespace internal {
 
 
-template <class BaseFunctionSetMapImp, class DomainFieldImp, int domainDim, class RangeFieldImp, int rangeDim,
-          int rangeDimCols>
+template <class BaseFunctionSetMapImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp, size_t rangeDim,
+          size_t rangeDimCols>
 class FemLocalfunctionsWrapperTraits
 {
 public:
@@ -44,7 +44,7 @@ public:
 } // namespace internal
 
 
-template <class BaseFunctionSetMapImp, class DomainFieldImp, int domainDim, class RangeFieldImp, int rangeDim>
+template <class BaseFunctionSetMapImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp, size_t rangeDim>
 class FemLocalfunctionsWrapper<BaseFunctionSetMapImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, 1>
     : public BaseFunctionSetInterface<internal::FemLocalfunctionsWrapperTraits<BaseFunctionSetMapImp, DomainFieldImp,
                                                                                domainDim, RangeFieldImp, rangeDim, 1>,
diff --git a/dune/gdt/basefunctionset/fem.hh b/dune/gdt/basefunctionset/fem.hh
index 113d3b7c64f78fcef5b5bf262075903f08d38cd3..66d3e5ec1ca5a547ee5c40c610683700095767f4 100644
--- a/dune/gdt/basefunctionset/fem.hh
+++ b/dune/gdt/basefunctionset/fem.hh
@@ -27,8 +27,8 @@ namespace BaseFunctionSet {
 
 
 // forward, to be used in the traits and to allow for specialization
-template <class ShapeFunctionSetImp, class EntityImp, class DomainFieldImp, int domainDim, class RangeFieldImp,
-          int rangeDim, int rangeDimCols = 1>
+template <class ShapeFunctionSetImp, class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp,
+          size_t rangeDim, size_t rangeDimCols = 1>
 class FemWrapper
 {
   static_assert(Dune::AlwaysFalse<ShapeFunctionSetImp>::value, "Untested for these dimensions!");
@@ -38,8 +38,8 @@ class FemWrapper
 namespace internal {
 
 
-template <class ShapeFunctionSetImp, class EntityImp, class DomainFieldImp, int domainDim, class RangeFieldImp,
-          int rangeDim, int rangeDimCols>
+template <class ShapeFunctionSetImp, class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp,
+          size_t rangeDim, size_t rangeDimCols>
 class FemWrapperTraits
 {
 public:
@@ -53,8 +53,8 @@ public:
 } // namespace internal
 
 
-template <class ShapeFunctionSetImp, class EntityImp, class DomainFieldImp, int domainDim, class RangeFieldImp,
-          int rangeDim>
+template <class ShapeFunctionSetImp, class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp,
+          size_t rangeDim>
 class FemWrapper<ShapeFunctionSetImp, EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, 1>
     : public BaseFunctionSetInterface<internal::FemWrapperTraits<ShapeFunctionSetImp, EntityImp, DomainFieldImp,
                                                                  domainDim, RangeFieldImp, rangeDim, 1>,
@@ -127,8 +127,8 @@ private:
 #else // HAVE_DUNE_FEM
 
 
-template <class ShapeFunctionSetImp, class EntityImp, class DomainFieldImp, int domainDim, class RangeFieldImp,
-          int rangeDim, int rangeDimCols = 1>
+template <class ShapeFunctionSetImp, class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp,
+          size_t rangeDim, size_t rangeDimCols = 1>
 class FemWrapper
 {
   static_assert(Dune::AlwaysFalse<ShapeFunctionSetImp>::value, "You are missing dune-fem!");
diff --git a/dune/gdt/basefunctionset/interface.hh b/dune/gdt/basefunctionset/interface.hh
index a2c1c55ad53987f84dfb1991f2387656f15d836a..7fb8fff8ccf8fc56ce6b6ed954c0f4a732b3b7f6 100644
--- a/dune/gdt/basefunctionset/interface.hh
+++ b/dune/gdt/basefunctionset/interface.hh
@@ -21,7 +21,7 @@ namespace GDT {
  *
  *          \see Stuff::LocalfunctionSetInterface for the template parameters D, d, R, r and rC.
  */
-template <class Traits, class D, int d, class R, int r, int rC = 1>
+template <class Traits, class D, size_t d, class R, size_t r, size_t rC = 1>
 class BaseFunctionSetInterface : public Stuff::LocalfunctionSetInterface<typename Traits::EntityType, D, d, R, r, rC>,
                                  public Stuff::CRTPInterface<BaseFunctionSetInterface<Traits, D, d, R, r, rC>, Traits>
 {
diff --git a/dune/gdt/basefunctionset/pdelab.hh b/dune/gdt/basefunctionset/pdelab.hh
index 5a4008a65b2058d03bb419deda7f2546d3fa4ebf..c980b86d9bd896affc2e462afdc29fa208aa7243 100644
--- a/dune/gdt/basefunctionset/pdelab.hh
+++ b/dune/gdt/basefunctionset/pdelab.hh
@@ -25,16 +25,16 @@ namespace BaseFunctionSet {
 
 
 // forwards, to be used in the traits and to allow for specialization
-template <class PdelabSpaceImp, class EntityImp, class DomainFieldImp, int domainDim, class RangeFieldImp, int rangeDim,
-          int rangeDimCols = 1>
+template <class PdelabSpaceImp, class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp,
+          size_t rangeDim, size_t rangeDimCols = 1>
 class PdelabWrapper
 {
   static_assert(Dune::AlwaysFalse<PdelabSpaceImp>::value, "Untested for arbitrary dimension!");
 };
 
 
-template <class PdelabSpaceImp, class EntityImp, class DomainFieldImp, int domainDim, class RangeFieldImp, int rangeDim,
-          int rangeDimCols = 1>
+template <class PdelabSpaceImp, class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp,
+          size_t rangeDim, size_t rangeDimCols = 1>
 class PiolaTransformedPdelabWrapper
 {
   static_assert(Dune::AlwaysFalse<PdelabSpaceImp>::value, "Untested for these dimensions!");
@@ -45,13 +45,13 @@ namespace internal {
 
 
 // forward, to allow for specialization
-template <class PdelabSpaceImp, class EntityImp, class DomainFieldImp, int domainDim, class RangeFieldImp, int rangeDim,
-          int rangeDimCols>
+template <class PdelabSpaceImp, class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp,
+          size_t rangeDim, size_t rangeDimCols>
 class PdelabWrapperTraits;
 
 
 //! Specialization for dimRange = 1, dimRangeRows = 1
-template <class PdelabSpaceImp, class EntityImp, class DomainFieldImp, int domainDim, class RangeFieldImp>
+template <class PdelabSpaceImp, class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp>
 class PdelabWrapperTraits<PdelabSpaceImp, EntityImp, DomainFieldImp, domainDim, RangeFieldImp, 1, 1>
 {
 public:
@@ -70,7 +70,8 @@ private:
 };
 
 
-template <class PdelabSpaceImp, class EntityImp, class DomainFieldImp, int domainDim, class RangeFieldImp, int rangeDim>
+template <class PdelabSpaceImp, class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp,
+          size_t rangeDim>
 class PiolaTransformedPdelabWrapperTraits
 {
   static_assert(domainDim == rangeDim, "Untested!");
@@ -97,7 +98,7 @@ private:
 
 
 //! Specialization for dimRange = 1, dimRangeRows = 1
-template <class PdelabSpaceType, class EntityImp, class DomainFieldImp, int domainDim, class RangeFieldImp>
+template <class PdelabSpaceType, class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp>
 class PdelabWrapper<PdelabSpaceType, EntityImp, DomainFieldImp, domainDim, RangeFieldImp, 1, 1>
     : public BaseFunctionSetInterface<internal::PdelabWrapperTraits<PdelabSpaceType, EntityImp, DomainFieldImp,
                                                                     domainDim, RangeFieldImp, 1, 1>,
@@ -181,8 +182,8 @@ private:
 }; // class PdelabWrapper
 
 
-template <class PdelabSpaceType, class EntityImp, class DomainFieldImp, int domainDim, class RangeFieldImp,
-          int rangeDim>
+template <class PdelabSpaceType, class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp,
+          size_t rangeDim>
 class PiolaTransformedPdelabWrapper<PdelabSpaceType, EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, 1>
     : public BaseFunctionSetInterface<internal::PiolaTransformedPdelabWrapperTraits<PdelabSpaceType, EntityImp,
                                                                                     DomainFieldImp, domainDim,
@@ -302,16 +303,16 @@ private:
 #else // HAVE_DUNE_PDELAB
 
 
-template <class PdelabSpaceImp, class EntityImp, class DomainFieldImp, int domainDim, class RangeFieldImp, int rangeDim,
-          int rangeDimCols = 1>
+template <class PdelabSpaceImp, class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp,
+          size_t rangeDim, size_t rangeDimCols = 1>
 class PdelabWrapper
 {
   static_assert(AlwaysFalse<PdelabSpaceImp>::value, "You are missing dune-pdelab!");
 };
 
 
-template <class PdelabSpaceImp, class EntityImp, class DomainFieldImp, int domainDim, class RangeFieldImp, int rangeDim,
-          int rangeDimCols = 1>
+template <class PdelabSpaceImp, class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp,
+          size_t rangeDim, size_t rangeDimCols = 1>
 class PiolaTransformedPdelabWrapper
 {
   static_assert(AlwaysFalse<PdelabSpaceImp>::value, "You are missing dune-pdelab!");
diff --git a/dune/gdt/discretefunction/local.hh b/dune/gdt/discretefunction/local.hh
index 69ff6e9da03521cbe8157a714fb89a5180200a44..e8f1ae116a119db73a5d902f1614ff348bdadbcf 100644
--- a/dune/gdt/discretefunction/local.hh
+++ b/dune/gdt/discretefunction/local.hh
@@ -148,12 +148,12 @@ public:
   typedef typename BaseType::EntityType EntityType;
 
   typedef typename BaseType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = BaseType::dimDomain;
+  static const size_t dimDomain = BaseType::dimDomain;
   typedef typename BaseType::DomainType DomainType;
 
   typedef typename BaseType::RangeFieldType RangeFieldType;
-  static const unsigned int dimRangeRows = BaseType::dimRangeCols;
-  static const unsigned int dimRangeCols = BaseType::dimRangeCols;
+  static const size_t dimRangeRows = BaseType::dimRangeCols;
+  static const size_t dimRangeCols = BaseType::dimRangeCols;
   typedef typename BaseType::RangeType RangeType;
 
   typedef typename BaseType::JacobianRangeType JacobianRangeType;
@@ -246,12 +246,12 @@ public:
   typedef typename BaseType::EntityType EntityType;
 
   typedef typename BaseType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = BaseType::dimDomain;
+  static const size_t dimDomain = BaseType::dimDomain;
   typedef typename BaseType::DomainType DomainType;
 
   typedef typename BaseType::RangeFieldType RangeFieldType;
-  static const unsigned int dimRangeRows = BaseType::dimRangeCols;
-  static const unsigned int dimRangeCols = BaseType::dimRangeCols;
+  static const size_t dimRangeRows = BaseType::dimRangeCols;
+  static const size_t dimRangeCols = BaseType::dimRangeCols;
   typedef typename BaseType::RangeType RangeType;
 
   typedef typename BaseType::JacobianRangeType JacobianRangeType;
diff --git a/dune/gdt/localevaluation/elliptic.hh b/dune/gdt/localevaluation/elliptic.hh
index 5b561be5d7d7f68f0e14fcd01d48c77f704d901d..55e23dfdef13580d8f734d373a2ccaeb1d97cc9a 100644
--- a/dune/gdt/localevaluation/elliptic.hh
+++ b/dune/gdt/localevaluation/elliptic.hh
@@ -56,7 +56,7 @@ public:
                      std::shared_ptr<typename DiffusionTensorType::LocalfunctionType>> LocalfunctionTupleType;
   typedef typename DiffusionFactorType::EntityType EntityType;
   typedef typename DiffusionFactorType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = DiffusionFactorType::dimDomain;
+  static const size_t dimDomain = DiffusionFactorType::dimDomain;
 }; // class EllipticTraits
 
 
@@ -77,7 +77,7 @@ public:
   typedef typename DiffusionType::EntityType EntityType;
   typedef typename DiffusionType::DomainFieldType DomainFieldType;
   typedef std::tuple<std::shared_ptr<typename DiffusionType::LocalfunctionType>> LocalfunctionTupleType;
-  static const unsigned int dimDomain = DiffusionType::dimDomain;
+  static const size_t dimDomain = DiffusionType::dimDomain;
 }; // class EllipticTraits< ..., void >
 
 
@@ -99,7 +99,7 @@ public:
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   Elliptic(const DiffusionFactorType& diffusion_factor, const DiffusionTensorType& diffusion_tensor)
     : diffusion_factor_(diffusion_factor)
@@ -115,7 +115,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct order() method
    */
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const LocalfunctionTupleType& local_functions_tuple,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
@@ -129,7 +129,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct evaluate() method
    */
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void evaluate(const LocalfunctionTupleType& local_functions_tuple,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rA, rCA>& ansatzBase,
@@ -141,7 +141,7 @@ public:
   }
 
 private:
-  template <class R, int rDF, int rCDF, int rDT, int rCDT, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rDF, size_t rCDF, size_t rDT, size_t rCDT, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t order(
       const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rDF, rCDF>& local_diffusion_factor,
       const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rDT, rCDT>& local_diffusion_tensor,
@@ -153,7 +153,7 @@ private:
            + std::max(ssize_t(ansatzBase.order()) - 1, ssize_t(0));
   } // ... order(...)
 
-  template <class R, int r>
+  template <class R, size_t r>
   void
   evaluate(const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, 1, 1>& local_diffusion_factor,
            const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, 1, 1>& local_diffusion_tensor,
@@ -262,7 +262,7 @@ public:
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   explicit Elliptic(const DiffusionType& inducingFunction)
     : diffusion_(inducingFunction)
@@ -280,7 +280,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct order() method
    */
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const LocalfunctionTupleType& localFuncs,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
@@ -292,7 +292,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct evaluate() method
    */
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void evaluate(const LocalfunctionTupleType& localFuncs,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rA, rCA>& ansatzBase,
@@ -308,7 +308,7 @@ public:
   /**
    *  \return localFunction.order() + (testBase.order() - 1) + (ansatzBase.order() - 1)
    */
-  template <class R, int rL, int rCL, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rL, size_t rCL, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rL, rCL>& localFunction,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
@@ -326,7 +326,7 @@ public:
    *  \brief  Computes an elliptic evaluation for a scalar local function and scalar or vector valued basefunctionsets.
    *  \tparam R RangeFieldType
    */
-  template <class R, int r>
+  template <class R, size_t r>
   void evaluate(const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, 1, 1>& localFunction,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, r, 1>& testBase,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, r, 1>& ansatzBase,
diff --git a/dune/gdt/localevaluation/interface.hh b/dune/gdt/localevaluation/interface.hh
index 02a4bbb50938d26c186e1867fd4baadf4e42a85b..c29d96577ba608a59ee4ecc7a0304994bb63109e 100644
--- a/dune/gdt/localevaluation/interface.hh
+++ b/dune/gdt/localevaluation/interface.hh
@@ -25,7 +25,7 @@ namespace LocalEvaluation {
  *  \tparam numArguments  The number of local bases.
  *  \note   All evaluations have to be copyable!
  */
-template <class Traits, int numArguments>
+template <class Traits, size_t numArguments>
 class Codim0Interface
 {
   static_assert(AlwaysFalse<Traits>::value, "There is no interface for this numArguments!");
@@ -43,7 +43,7 @@ public:
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   LocalfunctionTupleType localFunctions(const EntityType& entity) const
   {
@@ -57,7 +57,7 @@ public:
    *  \tparam r   dimRange of the testBase
    *  \tparam rC  dimRangeRows of the testBase
    */
-  template <class R, int r, int rC>
+  template <class R, size_t r, size_t rC>
   size_t order(const LocalfunctionTupleType& localFunctions_in,
                const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, r, rC>& testBase) const
   {
@@ -72,7 +72,7 @@ public:
    *  \tparam rC  dimRangeRows of the testBase
    *  \attention ret is assumed to be zero!
    */
-  template <class R, int r, int rC>
+  template <class R, size_t r, size_t rC>
   void evaluate(const LocalfunctionTupleType& localFunctions_in,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, r, rC>& testBase,
                 const Dune::FieldVector<DomainFieldType, dimDomain>& localPoint, Dune::DynamicVector<R>& ret) const
@@ -93,7 +93,7 @@ public:
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   LocalfunctionTupleType localFunctions(const EntityType& entity) const
   {
@@ -107,7 +107,7 @@ public:
    *  \tparam r{T,A}  dimRange of the {testBase,ansatzBase}
    *  \tparam rC{T,A} dimRangeRows of the {testBase,ansatzBase}
    */
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const LocalfunctionTupleType& localFunctions,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
@@ -124,7 +124,7 @@ public:
    *  \tparam rC{L,T,A} dimRangeRows of the {localFunction,testBase,ansatzBase}
    *  \attention ret is assumed to be zero!
    */
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void evaluate(const LocalfunctionTupleType& localFunctions,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rA, rCA>& ansatzBase,
@@ -140,7 +140,7 @@ public:
  *  \tparam numArguments  The number of local bases.
  *  \note   All evaluations have to be copyable!
  */
-template <class Traits, int numArguments>
+template <class Traits, size_t numArguments>
 class Codim1Interface
 {
   static_assert(AlwaysFalse<Traits>::value, "There is no interface for this numArguments!");
@@ -158,7 +158,7 @@ public:
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   LocalfunctionTupleType localFunctions(const EntityType& entity) const
   {
@@ -172,7 +172,7 @@ public:
    *  \tparam r   dimRange of the testBase
    *  \tparam rC  dimRangeRows of the testBase
    */
-  template <class R, int r, int rC>
+  template <class R, size_t r, size_t rC>
   size_t order(const LocalfunctionTupleType& localFunctions,
                const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, r, rC>& testBase) const
   {
@@ -188,7 +188,7 @@ public:
    *  \tparam rC                  dimRangeRows of the testBase
    *  \attention ret is assumed to be zero!
    */
-  template <class IntersectionType, class R, int r, int rC>
+  template <class IntersectionType, class R, size_t r, size_t rC>
   void evaluate(const LocalfunctionTupleType& localFunctions,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, r, rC>& testBase,
                 const IntersectionType& intersection,
@@ -210,7 +210,7 @@ public:
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   LocalfunctionTupleType localFunctions(const EntityType& entity) const
   {
@@ -224,7 +224,7 @@ public:
    *  \tparam r{T,A}              dimRange of the {testBase,ansatzBase}
    *  \tparam rC{T,A}             dimRangeRows of the {testBase,ansatzBase}
    */
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const LocalfunctionTupleType& localFunctions,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
@@ -242,7 +242,7 @@ public:
    *  \tparam rC{T,A}             dimRangeRows of the {testBase*,ansatzBase*}
    *  \attention ret is assumed to be zero!
    */
-  template <class IntersectionType, class R, int rT, int rCT, int rA, int rCA>
+  template <class IntersectionType, class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void evaluate(const LocalfunctionTupleType& localFunctions,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rA, rCA>& ansatzBase,
@@ -265,7 +265,7 @@ public:
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   LocalfunctionTupleType localFunctions(const EntityType& entity) const
   {
@@ -279,7 +279,7 @@ public:
    *  \tparam r{T,A}                dimRange of the {testBase*,ansatzBase*}
    *  \tparam rC{T,A}               dimRangeRows of the {testBase*,ansatzBase*}
    */
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const LocalfunctionTupleType localFunctionsEntity, const LocalfunctionTupleType localFunctionsNeighbor,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBaseEntity,
@@ -310,7 +310,7 @@ public:
    *  \tparam rC{T,A}               dimRangeRows of the {testBase*,ansatzBase*}
    *  \attention entityEntityRet, entityEntityRet, entityEntityRet and neighborEntityRet are assumed to be zero!
    */
-  template <class IntersectionType, class R, int rT, int rCT, int rA, int rCA>
+  template <class IntersectionType, class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void evaluate(
       const LocalfunctionTupleType& localFunctionsEntity, const LocalfunctionTupleType& localFunctionsNeighbor,
       const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBaseEntity,
diff --git a/dune/gdt/localevaluation/product.hh b/dune/gdt/localevaluation/product.hh
index d3bb895f73cd4973973f11b8d5d696b270a75f78..04b9ea89092e33bdc2356f1b49b9ab36c1fb5294 100644
--- a/dune/gdt/localevaluation/product.hh
+++ b/dune/gdt/localevaluation/product.hh
@@ -44,7 +44,7 @@ public:
   typedef typename LocalizableFunctionType::DomainFieldType DomainFieldType;
   typedef typename LocalizableFunctionType::LocalfunctionType LocalfunctionType;
   typedef std::tuple<std::shared_ptr<LocalfunctionType>> LocalfunctionTupleType;
-  static const unsigned int dimDomain = LocalizableFunctionType::dimDomain;
+  static const size_t dimDomain = LocalizableFunctionType::dimDomain;
 }; // class ProductTraits
 
 
@@ -66,7 +66,7 @@ public:
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   Product(const LocalizableFunctionType& inducingFunction)
     : inducingFunction_(inducingFunction)
@@ -88,7 +88,7 @@ public:
   /**
    * \brief extracts the local function and calls the correct order() method
    */
-  template <class R, int rT, int rCT>
+  template <class R, size_t rT, size_t rCT>
   size_t
   order(const LocalfunctionTupleType& localFuncs,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase) const
@@ -99,7 +99,7 @@ public:
   /**
    * \brief extracts the local function and calls the correct evaluate() method
    */
-  template <class R, int rT, int rCT>
+  template <class R, size_t rT, size_t rCT>
   void evaluate(const LocalfunctionTupleType& localFuncs,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
                 const Dune::FieldVector<DomainFieldType, dimDomain>& localPoint, Dune::DynamicVector<R>& ret) const
@@ -114,7 +114,7 @@ public:
   /**
    * \brief extracts the local function and calls the correct evaluate() method
    */
-  template <class IntersectionType, class R, int r, int rC>
+  template <class IntersectionType, class R, size_t r, size_t rC>
   void evaluate(const LocalfunctionTupleType& localFuncs,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, r, rC>& testBase,
                 const IntersectionType& intersection,
@@ -130,7 +130,7 @@ public:
   /**
    * \brief extracts the local function and calls the correct evaluate() method
    */
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void evaluate(const LocalfunctionTupleType& localFuncs,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rA, rCA>& ansatzBase,
@@ -146,7 +146,7 @@ public:
   /**
    * \brief extracts the local function and calls the correct evaluate() method
    */
-  template <class IntersectionType, class R, int rT, int rCT, int rA, int rCA>
+  template <class IntersectionType, class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void evaluate(const LocalfunctionTupleType& localFunctions_in,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rA, rCA>& ansatzBase,
@@ -163,7 +163,7 @@ public:
   /**
    * \brief extracts the local function and calls the correct order() method
    */
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const LocalfunctionTupleType& localFuncs,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
@@ -180,7 +180,7 @@ public:
    * \note   for `LocalEvaluation::Codim0Interface< ..., 1 >`
    * \return localFunction.order() + testBase.order()
    */
-  template <class R, int rL, int rCL, int rT, int rCT>
+  template <class R, size_t rL, size_t rCL, size_t rT, size_t rCT>
   size_t
   order(const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rL, rCL>& localFunction,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase) const
@@ -194,7 +194,7 @@ public:
    *         - `LocalEvaluation::Codim1Interface< ..., 2 >`
    * \return localFunction.order() + testBase.order() + ansatzBase.order()
    */
-  template <class R, int rL, int rCL, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rL, size_t rCL, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rL, rCL>& localFunction,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
@@ -231,7 +231,7 @@ public:
    * \brief Computes a product evaluation for a scalar local function and scalar or vector valued basefunctionsets.
    * \note  for `LocalEvaluation::Codim0Interface< ..., 2 >`
    */
-  template <class R, int r>
+  template <class R, size_t r>
   void evaluate(const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, 1, 1>& localFunction,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, r, 1>& testBase,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, r, 1>& ansatzBase,
@@ -281,7 +281,7 @@ public:
    * \brief Computes a product evaluation for a scalar local function and scalar or vector valued basefunctionsets.
    * \note  for `LocalEvaluation::Codim1Interface< ..., 2 >`
    */
-  template <class IntersectionType, class R, int r>
+  template <class IntersectionType, class R, size_t r>
   void evaluate(const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, 1, 1>& localFunction,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, r, 1>& testBase,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, r, 1>& ansatzBase,
diff --git a/dune/gdt/localevaluation/sipdg.hh b/dune/gdt/localevaluation/sipdg.hh
index 120a4cddc6475d7c9216536427229a18225e2edc..09953846e9d49c4344cb622b2e52e4a3b5f24a8f 100644
--- a/dune/gdt/localevaluation/sipdg.hh
+++ b/dune/gdt/localevaluation/sipdg.hh
@@ -64,7 +64,7 @@ public:
   typedef typename LocalizableFunctionType::DomainFieldType DomainFieldType;
   typedef typename LocalizableFunctionType::LocalfunctionType LocalfunctionType;
   typedef std::tuple<std::shared_ptr<LocalfunctionType>> LocalfunctionTupleType;
-  static const unsigned int dimDomain = LocalizableFunctionType::dimDomain;
+  static const size_t dimDomain = LocalizableFunctionType::dimDomain;
 }; // class InnerTraits
 
 
@@ -81,7 +81,7 @@ public:
   typedef typename LocalizableFunctionType::DomainFieldType DomainFieldType;
   typedef typename LocalizableFunctionType::LocalfunctionType LocalfunctionType;
   typedef std::tuple<std::shared_ptr<LocalfunctionType>> LocalfunctionTupleType;
-  static const unsigned int dimDomain = LocalizableFunctionType::dimDomain;
+  static const size_t dimDomain = LocalizableFunctionType::dimDomain;
 }; // class BoundaryLHSTraits
 
 
@@ -111,7 +111,7 @@ public:
       LocalfunctionTupleType;
   typedef typename LocalizableDiffusionFunctionType::EntityType EntityType;
   typedef typename LocalizableDiffusionFunctionType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = LocalizableDiffusionFunctionType::dimDomain;
+  static const size_t dimDomain = LocalizableDiffusionFunctionType::dimDomain;
 }; // class BoundaryRHSTraits
 
 
@@ -192,7 +192,7 @@ public:
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   Inner(const LocalizableFunctionType& inducingFunction, const double beta = internal::default_beta(dimDomain))
     : inducingFunction_(inducingFunction)
@@ -211,7 +211,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct order() method
    */
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const LocalfunctionTupleType& localFunctionsEntity, const LocalfunctionTupleType& localFunctionsNeighbor,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBaseEntity,
@@ -233,7 +233,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct evaluate() method
    */
-  template <class IntersectionType, class R, int rT, int rCT, int rA, int rCA>
+  template <class IntersectionType, class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void evaluate(
       const LocalfunctionTupleType& localFunctionsEntity, const LocalfunctionTupleType& localFunctionsNeighbor,
       const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBaseEntity,
@@ -264,7 +264,7 @@ public:
   /// \name Actual implementation of order
   /// \{
 
-  template <class R, int rL, int rCL, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rL, size_t rCL, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rL, rCL>& localFunctionEntity,
         const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rL, rCL>& localFunctionNeighbor,
@@ -421,7 +421,7 @@ public:
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   BoundaryLHS(const LocalizableFunctionType& inducingFunction, const double beta = internal::default_beta(dimDomain))
     : inducingFunction_(inducingFunction)
@@ -440,7 +440,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct order() method
    */
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const LocalfunctionTupleType localFuncs,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
@@ -452,7 +452,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct evaluate() method
    */
-  template <class IntersectionType, class R, int rT, int rCT, int rA, int rCA>
+  template <class IntersectionType, class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void evaluate(const LocalfunctionTupleType localFuncs,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rA, rCA>& ansatzBase,
@@ -469,7 +469,7 @@ public:
   /**
    * \return localFunction.order() + testBase.order() + ansatzBase.order();
    */
-  template <class R, int rL, int rCL, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rL, size_t rCL, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rL, rCL>& localFunction,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
@@ -550,7 +550,7 @@ public:
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   BoundaryRHS(const LocalizableDiffusionFunctionType& diffusion, const LocalizableDirichletFunctionType& dirichlet,
               const double beta = internal::default_beta(dimDomain))
@@ -571,7 +571,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct order() method
    */
-  template <class R, int r, int rC>
+  template <class R, size_t r, size_t rC>
   size_t order(const LocalfunctionTupleType localFuncs,
                const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, r, rC>& testBase) const
   {
@@ -583,7 +583,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct evaluate() method
    */
-  template <class IntersectionType, class R, int r, int rC>
+  template <class IntersectionType, class R, size_t r, size_t rC>
   void evaluate(const LocalfunctionTupleType localFuncs,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, r, rC>& testBase,
                 const IntersectionType& intersection,
@@ -601,7 +601,7 @@ public:
   /**
    *  \return std::max(testOrder + dirichletOrder, diffusionOrder + testGradientOrder + dirichletOrder);
    */
-  template <class R, int rLF, int rCLF, int rLR, int rCLR, int rT, int rCT>
+  template <class R, size_t rLF, size_t rCLF, size_t rLR, size_t rCLR, size_t rT, size_t rCT>
   size_t
   order(const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rLF, rCLF>& localDiffusion,
         const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rLR, rCLR>& localDirichlet,
diff --git a/dune/gdt/localevaluation/swipdg.hh b/dune/gdt/localevaluation/swipdg.hh
index 3d19b008d26837e59cb25e96ce9676bfa1677399..b257861b85897b51cd192c1935d7461cc46a13eb 100644
--- a/dune/gdt/localevaluation/swipdg.hh
+++ b/dune/gdt/localevaluation/swipdg.hh
@@ -82,7 +82,7 @@ public:
                      std::shared_ptr<LocalDiffusionTensorFunctionType>> LocalfunctionTupleType;
   typedef typename LocalizableDiffusionFactorFunctionType::EntityType EntityType;
   typedef typename LocalizableDiffusionFactorFunctionType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = LocalizableDiffusionFactorFunctionType::dimDomain;
+  static const size_t dimDomain = LocalizableDiffusionFactorFunctionType::dimDomain;
 }; // class InnerTraits
 
 
@@ -99,7 +99,7 @@ public:
   typedef typename LocalizableFunctionType::DomainFieldType DomainFieldType;
   typedef typename LocalizableFunctionType::LocalfunctionType LocalfunctionType;
   typedef std::tuple<std::shared_ptr<LocalfunctionType>> LocalfunctionTupleType;
-  static const unsigned int dimDomain = LocalizableFunctionType::dimDomain;
+  static const size_t dimDomain = LocalizableFunctionType::dimDomain;
 }; // class InnerTraits< ..., void >
 
 
@@ -127,7 +127,7 @@ public:
                      std::shared_ptr<LocalDiffusionTensorFunctionType>> LocalfunctionTupleType;
   typedef typename LocalizableDiffusionFactorFunctionType::EntityType EntityType;
   typedef typename LocalizableDiffusionFactorFunctionType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = LocalizableDiffusionFactorFunctionType::dimDomain;
+  static const size_t dimDomain = LocalizableDiffusionFactorFunctionType::dimDomain;
 }; // class InnerPenaltyTraits
 
 
@@ -155,7 +155,7 @@ public:
                      std::shared_ptr<LocalDiffusionTensorFunctionType>> LocalfunctionTupleType;
   typedef typename LocalizableDiffusionFactorFunctionType::EntityType EntityType;
   typedef typename LocalizableDiffusionFactorFunctionType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = LocalizableDiffusionFactorFunctionType::dimDomain;
+  static const size_t dimDomain = LocalizableDiffusionFactorFunctionType::dimDomain;
 }; // class BoundaryLHSTraits
 
 
@@ -183,7 +183,7 @@ public:
                      std::shared_ptr<LocalDiffusionTensorFunctionType>> LocalfunctionTupleType;
   typedef typename LocalizableDiffusionFactorFunctionType::EntityType EntityType;
   typedef typename LocalizableDiffusionFactorFunctionType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = LocalizableDiffusionFactorFunctionType::dimDomain;
+  static const size_t dimDomain = LocalizableDiffusionFactorFunctionType::dimDomain;
 }; // class BoundaryLHSPenaltyTraits
 
 
@@ -200,7 +200,7 @@ public:
   typedef typename LocalizableFunctionType::DomainFieldType DomainFieldType;
   typedef typename LocalizableFunctionType::LocalfunctionType LocalfunctionType;
   typedef std::tuple<std::shared_ptr<LocalfunctionType>> LocalfunctionTupleType;
-  static const unsigned int dimDomain = LocalizableFunctionType::dimDomain;
+  static const size_t dimDomain = LocalizableFunctionType::dimDomain;
 }; // class BoundaryLHSTraits< ..., void >
 
 
@@ -236,7 +236,7 @@ public:
                      std::shared_ptr<LocalDirichletFunctionType>> LocalfunctionTupleType;
   typedef typename LocalizableDiffusionFactorFunctionType::EntityType EntityType;
   typedef typename LocalizableDiffusionFactorFunctionType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = LocalizableDiffusionFactorFunctionType::dimDomain;
+  static const size_t dimDomain = LocalizableDiffusionFactorFunctionType::dimDomain;
 }; // class BoundaryRHSTraits
 
 
@@ -266,7 +266,7 @@ public:
       LocalfunctionTupleType;
   typedef typename LocalizableDiffusionFunctionType::EntityType EntityType;
   typedef typename LocalizableDiffusionFunctionType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = LocalizableDiffusionFunctionType::dimDomain;
+  static const size_t dimDomain = LocalizableDiffusionFunctionType::dimDomain;
 }; // class BoundaryRHSTraits< ..., void >
 
 
@@ -286,7 +286,7 @@ public:
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   Inner(const LocalizableFunctionType& inducingFunction,
         const double beta = SIPDG::internal::default_beta(LocalizableFunctionType::dimDomain))
@@ -306,7 +306,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct order() method
    */
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const LocalfunctionTupleType& localFunctionsEntity, const LocalfunctionTupleType& localFunctionsNeighbor,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBaseEntity,
@@ -328,7 +328,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct evaluate() method
    */
-  template <class IntersectionType, class R, int rT, int rCT, int rA, int rCA>
+  template <class IntersectionType, class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void evaluate(
       const LocalfunctionTupleType& localFunctionsEntity, const LocalfunctionTupleType& localFunctionsNeighbor,
       const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBaseEntity,
@@ -359,7 +359,7 @@ public:
   /// \name Actual implementation of order
   /// \{
 
-  template <class R, int rL, int rCL, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rL, size_t rCL, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rL, rCL>& localFunctionEntity,
         const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rL, rCL>& localFunctionNeighbor,
@@ -520,7 +520,7 @@ public:
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   BoundaryLHS(const LocalizableFunctionType& inducingFunction,
               const double beta = SIPDG::internal::default_beta(dimDomain))
@@ -540,7 +540,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct order() method
    */
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const LocalfunctionTupleType localFuncs,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
@@ -552,7 +552,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct evaluate() method
    */
-  template <class IntersectionType, class R, int rT, int rCT, int rA, int rCA>
+  template <class IntersectionType, class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void evaluate(const LocalfunctionTupleType localFuncs,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rA, rCA>& ansatzBase,
@@ -569,7 +569,7 @@ public:
   /**
    *  \return localFunction.order() + testBase.order() + ansatzBase.order()
    */
-  template <class R, int rL, int rCL, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rL, size_t rCL, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rL, rCL>& localFunction,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
@@ -650,7 +650,7 @@ public:
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   BoundaryRHS(const LocalizableDiffusionFunctionType& diffusion, const LocalizableDirichletFunctionType& dirichlet,
               const double beta = SIPDG::internal::default_beta(dimDomain))
@@ -671,7 +671,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct order() method
    */
-  template <class R, int r, int rC>
+  template <class R, size_t r, size_t rC>
   size_t order(const LocalfunctionTupleType localFuncs,
                const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, r, rC>& testBase) const
   {
@@ -683,7 +683,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct evaluate() method
    */
-  template <class IntersectionType, class R, int r, int rC>
+  template <class IntersectionType, class R, size_t r, size_t rC>
   void evaluate(const LocalfunctionTupleType localFuncs,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, r, rC>& testBase,
                 const IntersectionType& intersection,
@@ -701,7 +701,7 @@ public:
   /**
    *  \return std::max(testOrder + dirichletOrder, diffusionOrder + testGradientOrder + dirichletOrder);
    */
-  template <class R, int rLF, int rCLF, int rLR, int rCLR, int rT, int rCT>
+  template <class R, size_t rLF, size_t rCLF, size_t rLR, size_t rCLR, size_t rT, size_t rCT>
   size_t
   order(const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rLF, rCLF>& localDiffusion,
         const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rLR, rCLR>& localDirichlet,
diff --git a/dune/gdt/localfunctional/codim0.hh b/dune/gdt/localfunctional/codim0.hh
index b545d46c80669a66d105b38776bbc49bd546221e..20939b8db80d6d1661367e9e88ba8d670d399c16 100644
--- a/dune/gdt/localfunctional/codim0.hh
+++ b/dune/gdt/localfunctional/codim0.hh
@@ -92,7 +92,7 @@ public:
    *  \tparam T   Traits of the BaseFunctionSetInterface implementation, representing the type of the testBase
    *  \attention  ret is assumed to be zero!
    */
-  template <class E, class D, int d, class R, int r, int rC>
+  template <class E, class D, size_t d, class R, size_t r, size_t rC>
   void apply(const Stuff::LocalfunctionSetInterface<E, D, d, R, r, rC>& testBase, Dune::DynamicVector<R>& ret,
              std::vector<Dune::DynamicVector<R>>& tmpLocalVectors) const
   {
diff --git a/dune/gdt/localfunctional/codim1.hh b/dune/gdt/localfunctional/codim1.hh
index 5a563ffd801a58d5c383d4a259a6b97d92fc87ec..53040300a14824103791f78f2cf6fb1e2d63a2e4 100644
--- a/dune/gdt/localfunctional/codim1.hh
+++ b/dune/gdt/localfunctional/codim1.hh
@@ -87,7 +87,7 @@ public:
     return numTmpObjectsRequired_;
   }
 
-  template <class E, class IntersectionType, class D, int d, class R, int r, int rC>
+  template <class E, class IntersectionType, class D, size_t d, class R, size_t r, size_t rC>
   void apply(const Stuff::LocalfunctionSetInterface<E, D, d, R, r, rC>& testBase, const IntersectionType& intersection,
              Dune::DynamicVector<R>& ret, std::vector<Dune::DynamicVector<R>>& tmpLocalVectors) const
   {
diff --git a/dune/gdt/localfunctional/interface.hh b/dune/gdt/localfunctional/interface.hh
index 4db9b6d5633952fd4680c570d39867591df8638e..182deb940736a9afc7a3e4f55526691b7e030f3b 100644
--- a/dune/gdt/localfunctional/interface.hh
+++ b/dune/gdt/localfunctional/interface.hh
@@ -40,7 +40,7 @@ public:
    *  \tparam r   dimRange
    *  \tparam rC  dimRangeCols
    */
-  template <class T, class D, int d, class R, int r, int rC>
+  template <class T, class D, size_t d, class R, size_t r, size_t rC>
   void apply(const BaseFunctionSetInterface<T, D, d, R, r, rC>& testBase, Dune::DynamicVector<R>& ret,
              std::vector<Dune::DynamicVector<R>>& tmpLocalVectors) const
   {
@@ -71,7 +71,7 @@ public:
    *  \tparam r                 dimRange of the of the testBase
    *  \tparam rC                dimRangeCols of the testBase
    */
-  template <class T, class IntersectionType, class D, int d, class R, int r, int rC>
+  template <class T, class IntersectionType, class D, size_t d, class R, size_t r, size_t rC>
   void apply(const BaseFunctionSetInterface<T, D, d, R, r, rC>& testBase, const IntersectionType& intersection,
              Dune::DynamicVector<R>& ret, std::vector<Dune::DynamicVector<R>>& tmpLocalVectors) const
   {
diff --git a/dune/gdt/localoperator/codim0.hh b/dune/gdt/localoperator/codim0.hh
index 868707fcaa7aff9d3bdd123d46f750d0ee011bd9..c79ba946c5eed96d6c23cd05d57586e09cdd3dee 100644
--- a/dune/gdt/localoperator/codim0.hh
+++ b/dune/gdt/localoperator/codim0.hh
@@ -87,7 +87,7 @@ public:
     return numTmpObjectsRequired_;
   }
 
-  template <class E, class D, int d, class R, int rT, int rCT, int rA, int rCA>
+  template <class E, class D, size_t d, class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void apply(const Stuff::LocalfunctionSetInterface<E, D, d, R, rT, rCT>& testBase,
              const Stuff::LocalfunctionSetInterface<E, D, d, R, rA, rCA>& ansatzBase, Dune::DynamicMatrix<R>& ret,
              std::vector<Dune::DynamicMatrix<R>>& tmpLocalMatrices) const
diff --git a/dune/gdt/localoperator/codim1.hh b/dune/gdt/localoperator/codim1.hh
index 8811ee25aa5dcfad7e8d09b6a4e17f4a7497b7bb..0e0cdc767f268ec0d6b8ea9401fd057708dda7e7 100644
--- a/dune/gdt/localoperator/codim1.hh
+++ b/dune/gdt/localoperator/codim1.hh
@@ -85,14 +85,14 @@ public:
   }
 
   template <class... Args>
-  explicit Codim1CouplingIntegral(const size_t over_integrate, Args&&... args)
+  explicit Codim1CouplingIntegral(const int over_integrate, Args&&... args)
     : evaluation_(std::forward<Args>(args)...)
     , over_integrate_(over_integrate)
   {
   }
 
   template <class... Args>
-  explicit Codim1CouplingIntegral(const int over_integrate, Args&&... args)
+  explicit Codim1CouplingIntegral(const size_t over_integrate, Args&&... args)
     : evaluation_(std::forward<Args>(args)...)
     , over_integrate_(boost::numeric_cast<size_t>(over_integrate))
   {
@@ -103,7 +103,8 @@ public:
     return numTmpObjectsRequired_;
   }
 
-  template <class E, class N, class IntersectionType, class D, int d, class R, int rT, int rCT, int rA, int rCA>
+  template <class E, class N, class IntersectionType, class D, size_t d, class R, size_t rT, size_t rCT, size_t rA,
+            size_t rCA>
   void apply(const Stuff::LocalfunctionSetInterface<E, D, d, R, rT, rCT>& entityTestBase,
              const Stuff::LocalfunctionSetInterface<E, D, d, R, rA, rCA>& entityAnsatzBase,
              const Stuff::LocalfunctionSetInterface<N, D, d, R, rT, rCT>& neighborTestBase,
@@ -232,14 +233,14 @@ public:
   }
 
   template <class... Args>
-  Codim1BoundaryIntegral(const size_t over_integrate, Args&&... args)
+  Codim1BoundaryIntegral(const int over_integrate, Args&&... args)
     : evaluation_(std::forward<Args>(args)...)
     , over_integrate_(over_integrate)
   {
   }
 
   template <class... Args>
-  Codim1BoundaryIntegral(const int over_integrate, Args&&... args)
+  Codim1BoundaryIntegral(const size_t over_integrate, Args&&... args)
     : evaluation_(std::forward<Args>(args)...)
     , over_integrate_(boost::numeric_cast<size_t>(over_integrate))
   {
@@ -250,7 +251,7 @@ public:
     return numTmpObjectsRequired_;
   }
 
-  template <class E, class IntersectionType, class D, int d, class R, int rT, int rCT, int rA, int rCA>
+  template <class E, class IntersectionType, class D, size_t d, class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void apply(const Stuff::LocalfunctionSetInterface<E, D, d, R, rT, rCT>& testBase,
              const Stuff::LocalfunctionSetInterface<E, D, d, R, rA, rCA>& ansatzBase,
              const IntersectionType& intersection, Dune::DynamicMatrix<R>& ret,
diff --git a/dune/gdt/localoperator/interface.hh b/dune/gdt/localoperator/interface.hh
index 7c890f6a36859a3fbb459d0cd35cfb0dcc504c08..51e22e0f0c4a346e69cb881cd243f7c0485c48fe 100644
--- a/dune/gdt/localoperator/interface.hh
+++ b/dune/gdt/localoperator/interface.hh
@@ -41,7 +41,7 @@ public:
    *  \tparam r{T,A}  dimRange of the of the {testBase,ansatzBase}
    *  \tparam rC{T,a} dimRangeCols of the {testBase,ansatzBase}
    */
-  template <class T, class A, class D, int d, class R, int rT, int rCT, int rA, int rCA>
+  template <class T, class A, class D, size_t d, class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void apply(const BaseFunctionSetInterface<T, D, d, R, rT, rCT>& testBase,
              const BaseFunctionSetInterface<A, D, d, R, rA, rCA>& ansatzBase, Dune::DynamicMatrix<R>& ret,
              std::vector<Dune::DynamicMatrix<R>>& tmpLocalMatrices) const
@@ -76,8 +76,8 @@ public:
    *  \tparam r{T,A}  dimRange of the of the {testBase*,ansatzBase*}
    *  \tparam rC{T,a} dimRangeCols of the {testBase*,ansatzBase*}
    */
-  template <class TE, class AE, class TN, class AN, class IntersectionType, class D, int d, class R, int rT, int rCT,
-            int rA, int rCA>
+  template <class TE, class AE, class TN, class AN, class IntersectionType, class D, size_t d, class R, size_t rT,
+            size_t rCT, size_t rA, size_t rCA>
   void apply(const BaseFunctionSetInterface<TE, D, d, R, rT, rCT>& testBaseEntity,
              const BaseFunctionSetInterface<AE, D, d, R, rA, rCA>& ansatzBaseEntity,
              const BaseFunctionSetInterface<TN, D, d, R, rT, rCT>& testBaseNeighbor,
@@ -123,7 +123,8 @@ public:
    *  \tparam r{T,A}  dimRange of the of the {testBase,ansatzBase}
    *  \tparam rC{T,a} dimRangeCols of the {testBase,ansatzBase}
    */
-  template <class T, class A, class IntersectionType, class D, int d, class R, int rT, int rCT, int rA, int rCA>
+  template <class T, class A, class IntersectionType, class D, size_t d, class R, size_t rT, size_t rCT, size_t rA,
+            size_t rCA>
   void apply(const BaseFunctionSetInterface<T, D, d, R, rT, rCT>& testBase,
              const BaseFunctionSetInterface<A, D, d, R, rA, rCA>& ansatzBase, const IntersectionType& intersection,
              Dune::DynamicMatrix<R>& ret, std::vector<Dune::DynamicMatrix<R>>& tmpLocalMatrices) const
diff --git a/dune/gdt/mapper/default/fv.hh b/dune/gdt/mapper/default/fv.hh
index 93fdb058fe57b17efc76a8d10bd4c6ca1204c158..2a587a9a3dccd63b62cb301414d5c25cd82aeae2 100644
--- a/dune/gdt/mapper/default/fv.hh
+++ b/dune/gdt/mapper/default/fv.hh
@@ -21,7 +21,7 @@ namespace Mapper {
 
 
 // forward
-template <class GridViewImp, int rangeDim = 1, int rangeDimCols = 1>
+template <class GridViewImp, size_t rangeDim = 1, size_t rangeDimCols = 1>
 class FiniteVolume
 {
   static_assert(AlwaysFalse<GridViewImp>::value, "Not available for these dimensions!");
@@ -31,7 +31,7 @@ class FiniteVolume
 namespace internal {
 
 
-template <class GridViewImp, int rangeDim, int rangeDimCols>
+template <class GridViewImp, size_t rangeDim, size_t rangeDimCols>
 class FiniteVolumeTraits
 {
   static_assert(rangeDim >= 1, "Really?");
@@ -104,12 +104,12 @@ private:
 }; // class FiniteVolume< ..., 1, 1 >
 
 
-template <class GridViewImp, int rangeDim>
+template <class GridViewImp, size_t rangeDim>
 class FiniteVolume<GridViewImp, rangeDim, 1>
     : public MapperInterface<internal::FiniteVolumeTraits<GridViewImp, rangeDim, 1>>
 {
   typedef MapperInterface<internal::FiniteVolumeTraits<GridViewImp, rangeDim, 1>> InterfaceType;
-  static const unsigned int dimRange = rangeDim;
+  static const size_t dimRange = rangeDim;
 
 public:
   typedef internal::FiniteVolumeTraits<GridViewImp, rangeDim, 1> Traits;
diff --git a/dune/gdt/mapper/fem.hh b/dune/gdt/mapper/fem.hh
index c6e34e1a5665186bed8167574f721e4bbc62be2d..48087814d16e69e1181a8408cc3dd093155761a7 100644
--- a/dune/gdt/mapper/fem.hh
+++ b/dune/gdt/mapper/fem.hh
@@ -99,9 +99,9 @@ private:
     {
     }
 
-    void operator()(int localDoF, int globalDoF)
+    void operator()(size_t localDoF, size_t globalDoF)
     {
-      assert(localDoF < int(globalIndices_.size()));
+      assert(localDoF < globalIndices_.size());
       globalIndices_[localDoF] = globalDoF;
     }
 
@@ -184,9 +184,9 @@ private:
     {
     }
 
-    void operator()(int localDoF, int globalDoF)
+    void operator()(size_t localDoF, size_t globalDoF)
     {
-      assert(localDoF < int(globalIndices_.size()));
+      assert(localDoF < globalIndices_.size());
       globalIndices_[localDoF] = globalDoF;
     }
 
diff --git a/dune/gdt/operators/darcy.hh b/dune/gdt/operators/darcy.hh
index a4502223f03a3e666a7522f75f29442bc16ffcc3..ec17e7a87e65ed9b6fde5709efb0e35dd2dcd394 100644
--- a/dune/gdt/operators/darcy.hh
+++ b/dune/gdt/operators/darcy.hh
@@ -69,7 +69,7 @@ public:
   typedef typename Traits::FieldType FieldType;
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename GridViewType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridViewType::dimension;
+  static const size_t dimDomain = GridViewType::dimension;
 
   Darcy(const GridViewType& grd_vw, const FunctionImp& function)
     : grid_view_(grd_vw)
@@ -82,7 +82,7 @@ public:
    * \note  See redirect_apply for the implementation (depending on the type of the range space).
    * \sa    redirect_apply
    */
-  template <class S, class V, int r, int rC>
+  template <class S, class V, size_t r, size_t rC>
   void
   apply(const Stuff::LocalizableFunctionInterface<EntityType, DomainFieldType, dimDomain, FieldType, r, rC>& source,
         DiscreteFunction<S, V>& range) const
diff --git a/dune/gdt/operators/fluxreconstruction.hh b/dune/gdt/operators/fluxreconstruction.hh
index b5c1349f14842b5e14c671e37ae0929b712166b6..fc3d8984c5908466f84d601372b374ac49eb14b5 100644
--- a/dune/gdt/operators/fluxreconstruction.hh
+++ b/dune/gdt/operators/fluxreconstruction.hh
@@ -45,7 +45,7 @@ class DiffusiveFluxReconstruction<GridViewType, LocalizableFunctionType, void>
 public:
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename GridViewType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridViewType::dimension;
+  static const size_t dimDomain = GridViewType::dimension;
   typedef typename LocalizableFunctionType::RangeFieldType FieldType;
   typedef typename LocalizableFunctionType::DomainType DomainType;
 
diff --git a/dune/gdt/operators/interfaces.hh b/dune/gdt/operators/interfaces.hh
index f411b2abf46382ff83944de26869b7df9b8b30f0..493b3b6c10670cbf9661a5e96a42cf4ead6f6feb 100644
--- a/dune/gdt/operators/interfaces.hh
+++ b/dune/gdt/operators/interfaces.hh
@@ -74,7 +74,7 @@ class LocalizableOperatorInterface : public Stuff::CRTPInterface<LocalizableOper
 
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename GridViewType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridViewType::dimension;
+  static const size_t dimDomain = GridViewType::dimension;
 
 private:
   static_assert(Stuff::is_localizable_function<SourceType>::value,
diff --git a/dune/gdt/operators/oswaldinterpolation.hh b/dune/gdt/operators/oswaldinterpolation.hh
index 6a8467f29572ed430105e28db9a6f34faf41a054..e1149f8db8065f347850991e5806d3ffefc99c88 100644
--- a/dune/gdt/operators/oswaldinterpolation.hh
+++ b/dune/gdt/operators/oswaldinterpolation.hh
@@ -56,7 +56,7 @@ public:
   typedef internal::OswaldInterpolationTraits<GridViewImp, FieldImp> Traits;
   typedef typename Traits::GridViewType GridViewType;
   typedef typename Traits::FieldType FieldType;
-  static const unsigned int dimDomain = GridViewType::dimension;
+  static const size_t dimDomain = GridViewType::dimension;
 
   OswaldInterpolation(const GridViewType& grd_vw, const bool zero_boundary = true)
     : grid_view_(grd_vw)
@@ -144,7 +144,8 @@ private:
           const auto& intersection = *intersectionIt;
           if (intersection.boundary() && !intersection.neighbor()) {
             const auto& intersection_geometry = intersection.geometry();
-            for (int local_intersection_corner_id = 0; local_intersection_corner_id < intersection_geometry.corners();
+            for (size_t local_intersection_corner_id = 0;
+                 local_intersection_corner_id < intersection_geometry.corners();
                  ++local_intersection_corner_id) {
               const auto global_intersection_corner = intersection_geometry.corner(local_intersection_corner_id);
               // now, we need to find the entity's vertex this intersection's corner point equals to, so we
diff --git a/dune/gdt/operators/projections.hh b/dune/gdt/operators/projections.hh
index c1804b6e7082bcd530f020a260b8370631ff98bc..b0bff273a6d3915144cb954f057819ca5a69b18e 100644
--- a/dune/gdt/operators/projections.hh
+++ b/dune/gdt/operators/projections.hh
@@ -100,10 +100,10 @@ template <class GridViewImp, class SourceImp, class RangeImp, class FieldImp>
 class DirichletProjectionLocalizableTraits
 {
   typedef typename RangeImp::SpaceType::Traits T;
-  static const unsigned int d = RangeImp::dimDomain;
+  static const size_t d = RangeImp::dimDomain;
   typedef typename RangeImp::RangeFieldType R;
-  static const unsigned int r  = RangeImp::dimRange;
-  static const unsigned int rC = RangeImp::dimRangeCols;
+  static const size_t r  = RangeImp::dimRange;
+  static const size_t rC = RangeImp::dimRangeCols;
   static_assert(is_cg_space<typename RangeImp::SpaceType>::value,
                 "The SpaceType of RangeImp has to be derived from Spaces::CGInterface!");
   static_assert(r == 1, "Not implemeneted for higher dimensions!");
@@ -146,7 +146,7 @@ public:
 private:
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename GridViewType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridViewType::dimension;
+  static const size_t dimDomain = GridViewType::dimension;
   typedef FieldVector<DomainFieldType, dimDomain> DomainType;
 
 public:
@@ -155,14 +155,16 @@ public:
   {
   }
 
-  template <class E, class D, int d, class RS, int rS, int rCS, class GP, int p, class RR, int rR, int rCR, class V>
+  template <class E, class D, size_t d, class RS, size_t rS, size_t rCS, class GP, int p, class RR, size_t rR,
+            size_t rCR, class V>
   inline void apply(const Stuff::LocalizableFunctionInterface<E, D, d, RS, rS, rCS>& source,
                     DiscreteFunction<Spaces::CG::PdelabBased<GP, p, RR, rR, rCR>, V>& range) const
   {
     apply_p(source, range);
   }
 
-  template <class E, class D, int d, class RS, int rS, int rCS, class GP, int p, class RR, int rR, int rCR, class V>
+  template <class E, class D, size_t d, class RS, size_t rS, size_t rCS, class GP, int p, class RR, size_t rR,
+            size_t rCR, class V>
   inline void apply(const Stuff::LocalizableFunctionInterface<E, D, d, RS, rS, rCS>& source,
                     DiscreteFunction<Spaces::CG::FemBased<GP, p, RR, rR, rCR>, V>& range) const
   {
@@ -170,7 +172,7 @@ public:
   }
 
 private:
-  template <class R, int r, class V, class SpaceType>
+  template <class R, size_t r, class V, class SpaceType>
   void apply_p(const Stuff::LocalizableFunctionInterface<EntityType, DomainFieldType, dimDomain, R, r, 1>& source,
                DiscreteFunction<SpaceType, V>& range) const
   {
@@ -197,7 +199,7 @@ private:
   void apply_local(const LagrangePointsType& lagrange_points, const LocalSourceType& local_source,
                    LocalRangeVectorType& local_range_DoF_vector) const
   {
-    static const unsigned int dimRange = LocalSourceType::dimRange;
+    static const size_t dimRange = LocalSourceType::dimRange;
     assert(lagrange_points.size() == local_range_DoF_vector.size());
     size_t kk = 0;
     for (size_t ii = 0; ii < lagrange_points.size(); ++ii) {
@@ -232,7 +234,7 @@ public:
 private:
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename GridViewType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridViewType::dimension;
+  static const size_t dimDomain = GridViewType::dimension;
 
 public:
   L2Projection(const GridViewType& grid_view, const size_t over_integrate = 0)
@@ -241,7 +243,7 @@ public:
   {
   }
 
-  template <class GP, int p, class R, int r, class V>
+  template <class GP, int p, class R, size_t r, class V>
   void apply(const Stuff::LocalizableFunctionInterface<EntityType, DomainFieldType, dimDomain, R, r, 1>& source,
              DiscreteFunction<Spaces::DG::FemBased<GP, p, R, r, 1>, V>& range) const
   {
@@ -253,7 +255,7 @@ public:
 
 #if HAVE_DUNE_GRID_MULTISCALE
 
-  template <class GP, int p, class R, int r, class V>
+  template <class GP, int p, class R, size_t r, class V>
   void apply(const Stuff::LocalizableFunctionInterface<EntityType, DomainFieldType, dimDomain, R, r, 1>& source,
              DiscreteFunction<Spaces::Block<Spaces::DG::FemBased<GP, p, R, r, 1>>, V>& range) const
   {
@@ -265,7 +267,7 @@ public:
 
 #endif // HAVE_DUNE_GRID_MULTISCALE
 
-  template <class GP, int p, class R, int r, class V>
+  template <class GP, int p, class R, size_t r, class V>
   void apply(const Stuff::LocalizableFunctionInterface<EntityType, DomainFieldType, dimDomain, R, r, 1>& source,
              DiscreteFunction<Spaces::DG::PdelabBased<GP, p, R, r, 1>, V>& range) const
   {
@@ -275,7 +277,7 @@ public:
     apply_local_l2_projection_(source, range);
   }
 
-  template <class E, class D, int d, class R, int r, class GV, class V>
+  template <class E, class D, size_t d, class R, size_t r, class GV, class V>
   void apply(const Stuff::LocalizableFunctionInterface<E, D, d, R, r, 1>& source,
              DiscreteFunction<Spaces::FV::Default<GV, R, r, 1>, V>& range) const
   {
@@ -430,7 +432,7 @@ public:
 private:
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename GridViewType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridViewType::dimension;
+  static const size_t dimDomain = GridViewType::dimension;
 
 public:
   Projection(const GridViewType& grid_view, const size_t over_integrate = 0)
@@ -446,7 +448,7 @@ public:
   }
 
 private:
-  template <class E, class D, int d, class R, int r, int rC, class T, class V>
+  template <class E, class D, size_t d, class R, size_t r, size_t rC, class T, class V>
   void redirect_to_appropriate_operator(const Stuff::LocalizableFunctionInterface<E, D, d, R, r, rC>& /*source*/,
                                         DiscreteFunction<SpaceInterface<T, d, r, rC>, V>& /*range*/) const
   {
@@ -454,7 +456,8 @@ private:
                   "Could not find an appropriate operator for this combination of source and range!");
   }
 
-  template <class E, class D, int d, class RS, int rS, int rCS, class GP, int p, class RR, int rR, int rCR, class V>
+  template <class E, class D, size_t d, class RS, size_t rS, size_t rCS, class GP, int p, class RR, size_t rR,
+            size_t rCR, class V>
   inline void
   redirect_to_appropriate_operator(const Stuff::LocalizableFunctionInterface<E, D, d, RS, rS, rCS>& source,
                                    DiscreteFunction<Spaces::CG::FemBased<GP, p, RR, rR, rCR>, V>& range) const
@@ -462,7 +465,8 @@ private:
     lagrange_operator_.apply(source, range);
   }
 
-  template <class E, class D, int d, class RS, int rS, int rCS, class GP, int p, class RR, int rR, int rCR, class V>
+  template <class E, class D, size_t d, class RS, size_t rS, size_t rCS, class GP, int p, class RR, size_t rR,
+            size_t rCR, class V>
   inline void
   redirect_to_appropriate_operator(const Stuff::LocalizableFunctionInterface<E, D, d, RS, rS, rCS>& source,
                                    DiscreteFunction<Spaces::CG::PdelabBased<GP, p, RR, rR, rCR>, V>& range) const
@@ -470,7 +474,8 @@ private:
     lagrange_operator_.apply(source, range);
   }
 
-  template <class E, class D, int d, class RS, int rS, int rCS, class GP, int p, class RR, int rR, int rCR, class V>
+  template <class E, class D, size_t d, class RS, size_t rS, size_t rCS, class GP, int p, class RR, size_t rR,
+            size_t rCR, class V>
   inline void
   redirect_to_appropriate_operator(const Stuff::LocalizableFunctionInterface<E, D, d, RS, rS, rCS>& source,
                                    DiscreteFunction<Spaces::DG::FemBased<GP, p, RR, rR, rCR>, V>& range) const
@@ -480,7 +485,8 @@ private:
 
 #if HAVE_DUNE_GRID_MULTISCALE
 
-  template <class E, class D, int d, class RS, int rS, int rCS, class GP, int p, class RR, int rR, int rCR, class V>
+  template <class E, class D, size_t d, class RS, size_t rS, size_t rCS, class GP, int p, class RR, size_t rR,
+            size_t rCR, class V>
   inline void redirect_to_appropriate_operator(
       const Stuff::LocalizableFunctionInterface<E, D, d, RS, rS, rCS>& source,
       DiscreteFunction<Spaces::Block<Spaces::DG::FemBased<GP, p, RR, rR, rCR>>, V>& range) const
@@ -490,7 +496,8 @@ private:
 
 #endif // HAVE_DUNE_GRID_MULTISCALE
 
-  template <class E, class D, int d, class RS, int rS, int rCS, class GP, int p, class RR, int rR, int rCR, class V>
+  template <class E, class D, size_t d, class RS, size_t rS, size_t rCS, class GP, int p, class RR, size_t rR,
+            size_t rCR, class V>
   inline void
   redirect_to_appropriate_operator(const Stuff::LocalizableFunctionInterface<E, D, d, RS, rS, rCS>& source,
                                    DiscreteFunction<Spaces::DG::PdelabBased<GP, p, RR, rR, rCR>, V>& range) const
@@ -498,7 +505,8 @@ private:
     l2_operator_.apply(source, range);
   }
 
-  template <class E, class D, int d, class RS, int rS, int rCS, class GV, class RR, int rR, int rCR, class V>
+  template <class E, class D, size_t d, class RS, size_t rS, size_t rCS, class GV, class RR, size_t rR, size_t rCR,
+            class V>
   inline void redirect_to_appropriate_operator(const Stuff::LocalizableFunctionInterface<E, D, d, RS, rS, rCS>& source,
                                                DiscreteFunction<Spaces::FV::Default<GV, RR, rR, rCR>, V>& range) const
   {
@@ -603,7 +611,7 @@ public:
   typedef typename Traits::GridViewType GridViewType;
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename GridViewType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridViewType::dimension;
+  static const size_t dimDomain = GridViewType::dimension;
   typedef Stuff::Grid::BoundaryInfoInterface<typename GridViewType::Intersection> BoundaryInfoType;
 
 public:
@@ -613,7 +621,7 @@ public:
   {
   }
 
-  template <class R, int r, int rC, class GV, int p, class V>
+  template <class R, size_t r, size_t rC, class GV, int p, class V>
   void apply(const Stuff::LocalizableFunctionInterface<EntityType, DomainFieldType, dimDomain, R, r, rC>& source,
              DiscreteFunction<Spaces::CG::FemBased<GV, p, R, r, rC>, V>& range) const
   {
@@ -624,7 +632,7 @@ public:
     localizable_operator.apply();
   } // ... apply(...)
 
-  template <class R, int r, int rC, class GV, int p, class V>
+  template <class R, size_t r, size_t rC, class GV, int p, class V>
   void apply(const Stuff::LocalizableFunctionInterface<EntityType, DomainFieldType, dimDomain, R, r, rC>& source,
              DiscreteFunction<Spaces::CG::PdelabBased<GV, p, R, r, rC>, V>& range) const
   {
diff --git a/dune/gdt/operators/prolongations.hh b/dune/gdt/operators/prolongations.hh
index 219508a1e8307ee70d69e253cd1020f00b7b3d8d..d42d6c2fe02814998c5b2d642e0142c701c23a61 100644
--- a/dune/gdt/operators/prolongations.hh
+++ b/dune/gdt/operators/prolongations.hh
@@ -36,7 +36,7 @@ namespace GDT {
 
 namespace Spaces {
 namespace DG {
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols>
 class FemBased;
 }
 template <class SpaceImp>
@@ -52,7 +52,7 @@ namespace Operators {
  *        local polynomial degree.
  *
  *  \note We would have liked to do something like this and match on implementations of SpaceInterface:\code
-template< class T, class VS, class GPR, int pR, class RR, int rR, int rCR, class VR >
+template< class T, class VS, class GPR, int pR, class RR, size_t rR, size_t rCR, class VR >
 void apply(const ConstDiscreteFunction< SpaceInterface< T >, VS >& source,
            DiscreteFunction< Spaces::DG::FemBased< GPR, pR, RR, rR, rCR >, VR >& range) const
 {
@@ -69,7 +69,7 @@ class L2Prolongation
 {
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename GridViewType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridViewType::dimension;
+  static const size_t dimDomain = GridViewType::dimension;
 
 public:
   L2Prolongation(const GridViewType& grid_view)
@@ -80,15 +80,15 @@ public:
   // Source: Spaces::CG::FemBased
   // Range:  Spaces::DG::FemBased
 
-  template <class GPS, int pS, class RS, int rS, int rCS, class VS, class GPR, int pR, class RR, int rR, int rCR,
-            class VR>
+  template <class GPS, int pS, class RS, size_t rS, size_t rCS, class VS, class GPR, int pR, class RR, size_t rR,
+            size_t rCR, class VR>
   void apply(const ConstDiscreteFunction<Spaces::CG::FemBased<GPS, pS, RS, rS, rCS>, VS>& /*source*/,
              DiscreteFunction<Spaces::DG::FemBased<GPR, pR, RR, rR, rCR>, VR>& /*range*/) const
   {
     static_assert(Dune::AlwaysFalse<GPS>::value, "Not implemented for this combination of source and range!");
   }
 
-  template <class GPS, int pS, class R, int r, int rC, class VS, class GPR, int pR, class VR>
+  template <class GPS, int pS, class R, size_t r, size_t rC, class VS, class GPR, int pR, class VR>
   inline void apply(const ConstDiscreteFunction<Spaces::CG::FemBased<GPS, pS, R, r, rC>, VS>& source,
                     DiscreteFunction<Spaces::DG::FemBased<GPR, pR, R, r, rC>, VR>& range) const
   {
@@ -98,29 +98,29 @@ public:
   // Source: Spaces::DG::FemBased
   // Range:  Spaces::DG::FemBased
 
-  template <class GPS, int pS, class RS, int rS, int rCS, class VS, class GPR, int pR, class RR, int rR, int rCR,
-            class VR>
+  template <class GPS, int pS, class RS, size_t rS, size_t rCS, class VS, class GPR, int pR, class RR, size_t rR,
+            size_t rCR, class VR>
   void apply(const ConstDiscreteFunction<Spaces::DG::FemBased<GPS, pS, RS, rS, rCS>, VS>& /*source*/,
              DiscreteFunction<Spaces::DG::FemBased<GPR, pR, RR, rR, rCR>, VR>& /*range*/) const
   {
     static_assert(Dune::AlwaysFalse<GPS>::value, "Not implemented for this combination of source and range!");
   }
 
-  template <class GPS, int pS, class R, int r, int rC, class VS, class GPR, int pR, class VR>
+  template <class GPS, int pS, class R, size_t r, size_t rC, class VS, class GPR, int pR, class VR>
   inline void apply(const ConstDiscreteFunction<Spaces::DG::FemBased<GPS, pS, R, r, rC>, VS>& source,
                     DiscreteFunction<Spaces::DG::FemBased<GPR, pR, R, r, rC>, VR>& range) const
   {
     prolong_onto_dg_fem_localfunctions_wrapper(source, range);
   }
 
-  template <class GPS, int pS, class R, int r, int rC, class VS, class GPR, int pR, class VR>
+  template <class GPS, int pS, class R, size_t r, size_t rC, class VS, class GPR, int pR, class VR>
   inline void apply(const ConstDiscreteFunction<Spaces::Block<Spaces::DG::FemBased<GPS, pS, R, r, rC>>, VS>& source,
                     DiscreteFunction<Spaces::Block<Spaces::DG::FemBased<GPR, pR, R, r, rC>>, VR>& range) const
   {
     prolong_onto_dg_fem_localfunctions_wrapper(source, range);
   }
 
-  template <class GPS, int pS, class R, int r, int rC, class VS, class GPR, int pR, class VR>
+  template <class GPS, int pS, class R, size_t r, size_t rC, class VS, class GPR, int pR, class VR>
   inline void apply(const ConstDiscreteFunction<Spaces::Block<Spaces::DG::FemBased<GPS, pS, R, r, rC>>, VS>& source,
                     DiscreteFunction<Spaces::DG::FemBased<GPR, pR, R, r, rC>, VR>& range) const
   {
@@ -217,7 +217,7 @@ private:
 
 /**
  *  \note We would have liked to do something like this and match on implementations of SpaceInterface:\code
-template< class T, class VS, class GPR, int pR, class RR, int rR, int rCR, class VR >
+template< class T, class VS, class GPR, int pR, class RR, size_t rR, size_t rCR, class VR >
 void apply(const ConstDiscreteFunction< SpaceInterface< T >, VS >& source,
            DiscreteFunction< Spaces::CG::FemBased< GPR, pR, RR, rR, rCR >, VR >& range) const
 {
@@ -231,7 +231,7 @@ class LagrangeProlongation
 {
 public:
   typedef typename GridViewType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridViewType::dimension;
+  static const size_t dimDomain = GridViewType::dimension;
 
   LagrangeProlongation(const GridViewType& grid_view)
     : grid_view_(grid_view)
@@ -241,15 +241,15 @@ public:
   // Source: Spaces::CG::FemBased
   // Range:  Spaces::CG::FemBased
 
-  template <class GPS, int pS, class RS, int rS, int rCS, class VS, class GPR, int pR, class RR, int rR, int rCR,
-            class VR>
+  template <class GPS, int pS, class RS, size_t rS, size_t rCS, class VS, class GPR, int pR, class RR, size_t rR,
+            size_t rCR, class VR>
   void apply(const ConstDiscreteFunction<Spaces::CG::FemBased<GPS, pS, RS, rS, rCS>, VS>& /*source*/,
              DiscreteFunction<Spaces::CG::FemBased<GPR, pR, RR, rR, rCR>, VR>& /*range*/) const
   {
     static_assert(Dune::AlwaysFalse<GPS>::value, "Not implemented for this combination of source and range!");
   }
 
-  template <class GPS, int pS, class R, int r, class VS, class GPR, int pR, class VR>
+  template <class GPS, int pS, class R, size_t r, class VS, class GPR, int pR, class VR>
   inline void apply(const ConstDiscreteFunction<Spaces::CG::FemBased<GPS, pS, R, r, 1>, VS>& source,
                     DiscreteFunction<Spaces::CG::FemBased<GPR, pR, R, r, 1>, VR>& range) const
   {
@@ -259,15 +259,15 @@ public:
   // Source: Spaces::DG::FemBased
   // Range:  Spaces::CG::FemBased
 
-  template <class GPS, int pS, class RS, int rS, int rCS, class VS, class GPR, int pR, class RR, int rR, int rCR,
-            class VR>
+  template <class GPS, int pS, class RS, size_t rS, size_t rCS, class VS, class GPR, int pR, class RR, size_t rR,
+            size_t rCR, class VR>
   void apply(const ConstDiscreteFunction<Spaces::DG::FemBased<GPS, pS, RS, rS, rCS>, VS>& /*source*/,
              DiscreteFunction<Spaces::CG::FemBased<GPR, pR, RR, rR, rCR>, VR>& /*range*/) const
   {
     static_assert(Dune::AlwaysFalse<GPS>::value, "Not implemented for this combination of source and range!");
   }
 
-  template <class GPS, int pS, class R, int r, class VS, class GPR, int pR, class VR>
+  template <class GPS, int pS, class R, size_t r, class VS, class GPR, int pR, class VR>
   inline void apply(const ConstDiscreteFunction<Spaces::DG::FemBased<GPS, pS, R, r, 1>, VS>& source,
                     DiscreteFunction<Spaces::CG::FemBased<GPR, pR, R, r, 1>, VR>& range) const
   {
@@ -277,15 +277,15 @@ public:
   // Source: Spaces::CG::PdelabBased
   // Range:  Spaces::CG::PdelabBased
 
-  template <class GPS, int pS, class RS, int rS, int rCS, class VS, class GPR, int pR, class RR, int rR, int rCR,
-            class VR>
+  template <class GPS, int pS, class RS, size_t rS, size_t rCS, class VS, class GPR, int pR, class RR, size_t rR,
+            size_t rCR, class VR>
   void apply(const ConstDiscreteFunction<Spaces::CG::PdelabBased<GPS, pS, RS, rS, rCS>, VS>& /*source*/,
              DiscreteFunction<Spaces::CG::PdelabBased<GPR, pR, RR, rR, rCR>, VR>& /*range*/) const
   {
     static_assert(Dune::AlwaysFalse<GPS>::value, "Not implemented for this combination of source and range!");
   }
 
-  template <class GPS, int pS, class R, int r, int rC, class VS, class GPR, class VR>
+  template <class GPS, int pS, class R, size_t r, size_t rC, class VS, class GPR, class VR>
   inline void apply(const ConstDiscreteFunction<Spaces::CG::PdelabBased<GPS, pS, R, r, rC>, VS>& source,
                     DiscreteFunction<Spaces::CG::PdelabBased<GPR, 1, R, r, rC>, VR>& range) const
   {
@@ -329,7 +329,7 @@ private:
   void apply_local(const SourceType& source, const LagrangePointsType& lagrange_points,
                    const EntityPointers& source_entity_ptr_unique_ptrs, LocalDoFVectorType& range_DoF_vector) const
   {
-    static const unsigned int dimRange = SourceType::dimRange;
+    static const size_t dimRange = SourceType::dimRange;
     size_t kk = 0;
     assert(source_entity_ptr_unique_ptrs.size() >= lagrange_points.size());
     for (size_t ii = 0; ii < lagrange_points.size(); ++ii) {
@@ -362,7 +362,7 @@ class Prolongation
 {
 public:
   typedef typename GridViewType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridViewType::dimension;
+  static const size_t dimDomain = GridViewType::dimension;
 
   Prolongation(const GridViewType& grid_view)
     : l2_prolongation_operator_(grid_view)
@@ -377,8 +377,8 @@ public:
   }
 
 private:
-  template <class GPS, int pS, class RS, int rS, int rCS, class VS, class GPR, int pR, class RR, int rR, int rCR,
-            class VR>
+  template <class GPS, int pS, class RS, size_t rS, size_t rCS, class VS, class GPR, int pR, class RR, size_t rR,
+            size_t rCR, class VR>
   inline void
   redirect_to_appropriate_operator(const ConstDiscreteFunction<Spaces::CG::FemBased<GPS, pS, RS, rS, rCS>, VS>& source,
                                    DiscreteFunction<Spaces::DG::FemBased<GPR, pR, RR, rR, rCR>, VR>& range) const
@@ -386,8 +386,8 @@ private:
     l2_prolongation_operator_.apply(source, range);
   }
 
-  template <class GPS, int pS, class RS, int rS, int rCS, class VS, class GPR, int pR, class RR, int rR, int rCR,
-            class VR>
+  template <class GPS, int pS, class RS, size_t rS, size_t rCS, class VS, class GPR, int pR, class RR, size_t rR,
+            size_t rCR, class VR>
   inline void
   redirect_to_appropriate_operator(const ConstDiscreteFunction<Spaces::DG::FemBased<GPS, pS, RS, rS, rCS>, VS>& source,
                                    DiscreteFunction<Spaces::DG::FemBased<GPR, pR, RR, rR, rCR>, VR>& range) const
@@ -395,8 +395,8 @@ private:
     l2_prolongation_operator_.apply(source, range);
   }
 
-  template <class GPS, int pS, class RS, int rS, int rCS, class VS, class GPR, int pR, class RR, int rR, int rCR,
-            class VR>
+  template <class GPS, int pS, class RS, size_t rS, size_t rCS, class VS, class GPR, int pR, class RR, size_t rR,
+            size_t rCR, class VR>
   inline void redirect_to_appropriate_operator(
       const ConstDiscreteFunction<Spaces::Block<Spaces::DG::FemBased<GPS, pS, RS, rS, rCS>>, VS>& source,
       DiscreteFunction<Spaces::Block<Spaces::DG::FemBased<GPR, pR, RR, rR, rCR>>, VR>& range) const
@@ -404,8 +404,8 @@ private:
     l2_prolongation_operator_.apply(source, range);
   }
 
-  template <class GPS, int pS, class RS, int rS, int rCS, class VS, class GPR, int pR, class RR, int rR, int rCR,
-            class VR>
+  template <class GPS, int pS, class RS, size_t rS, size_t rCS, class VS, class GPR, int pR, class RR, size_t rR,
+            size_t rCR, class VR>
   inline void redirect_to_appropriate_operator(
       const ConstDiscreteFunction<Spaces::Block<Spaces::DG::FemBased<GPS, pS, RS, rS, rCS>>, VS>& source,
       DiscreteFunction<Spaces::DG::FemBased<GPR, pR, RR, rR, rCR>, VR>& range) const
@@ -413,8 +413,8 @@ private:
     l2_prolongation_operator_.apply(source, range);
   }
 
-  template <class GPS, int pS, class RS, int rS, int rCS, class VS, class GPR, int pR, class RR, int rR, int rCR,
-            class VR>
+  template <class GPS, int pS, class RS, size_t rS, size_t rCS, class VS, class GPR, int pR, class RR, size_t rR,
+            size_t rCR, class VR>
   inline void
   redirect_to_appropriate_operator(const ConstDiscreteFunction<Spaces::CG::FemBased<GPS, pS, RS, rS, rCS>, VS>& source,
                                    DiscreteFunction<Spaces::CG::FemBased<GPR, pR, RR, rR, rCR>, VR>& range) const
@@ -422,8 +422,8 @@ private:
     lagrange_prolongation_operator_.apply(source, range);
   }
 
-  template <class GPS, int pS, class RS, int rS, int rCS, class VS, class GPR, int pR, class RR, int rR, int rCR,
-            class VR>
+  template <class GPS, int pS, class RS, size_t rS, size_t rCS, class VS, class GPR, int pR, class RR, size_t rR,
+            size_t rCR, class VR>
   inline void
   redirect_to_appropriate_operator(const ConstDiscreteFunction<Spaces::DG::FemBased<GPS, pS, RS, rS, rCS>, VS>& source,
                                    DiscreteFunction<Spaces::CG::FemBased<GPR, pR, RR, rR, rCR>, VR>& range) const
@@ -431,8 +431,8 @@ private:
     lagrange_prolongation_operator_.apply(source, range);
   }
 
-  template <class GPS, int pS, class RS, int rS, int rCS, class VS, class GPR, int pR, class RR, int rR, int rCR,
-            class VR>
+  template <class GPS, int pS, class RS, size_t rS, size_t rCS, class VS, class GPR, int pR, class RR, size_t rR,
+            size_t rCR, class VR>
   inline void redirect_to_appropriate_operator(
       const ConstDiscreteFunction<Spaces::CG::PdelabBased<GPS, pS, RS, rS, rCS>, VS>& source,
       DiscreteFunction<Spaces::CG::PdelabBased<GPR, pR, RR, rR, rCR>, VR>& range) const
diff --git a/dune/gdt/playground/localevaluation/ESV2007.hh b/dune/gdt/playground/localevaluation/ESV2007.hh
index 6c4e7f417b7a3e900c87b361f88face7b768e5c9..b95755930a1096e75dc0e2d428dcc39616ada54a 100644
--- a/dune/gdt/playground/localevaluation/ESV2007.hh
+++ b/dune/gdt/playground/localevaluation/ESV2007.hh
@@ -67,7 +67,7 @@ public:
                      std::shared_ptr<LocalDiffusiveFluxType>> LocalfunctionTupleType;
   typedef typename LocalizableDiffusionFactorType::EntityType EntityType;
   typedef typename LocalizableDiffusionFactorType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = LocalizableDiffusionFactorType::dimDomain;
+  static const size_t dimDomain = LocalizableDiffusionFactorType::dimDomain;
 }; // class DiffusiveFluxEstimateTraits
 
 
@@ -94,7 +94,7 @@ public:
       LocalfunctionTupleType;
   typedef typename LocalizableDiffusionType::EntityType EntityType;
   typedef typename LocalizableDiffusionType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = LocalizableDiffusionType::dimDomain;
+  static const size_t dimDomain = LocalizableDiffusionType::dimDomain;
 }; // class DiffusiveFluxEstimateTraits
 
 
@@ -112,7 +112,7 @@ public:
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   DiffusiveFluxEstimate(const LocalizableDiffusionType& diffusion, const LocalizableDiffusiveFluxType& diffusive_flux)
     : diffusion_(diffusion)
@@ -125,7 +125,7 @@ public:
     return std::make_tuple(diffusion_.local_function(entity), diffusive_flux_.local_function(entity));
   }
 
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const LocalfunctionTupleType localFuncs,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
@@ -136,7 +136,7 @@ public:
     return redirect_order(*local_diffusion, *local_diffusive_flux, testBase, ansatzBase);
   } // ... order(...)
 
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void evaluate(const LocalfunctionTupleType localFuncs,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& test_base,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rA, rCA>& ansatz_base,
@@ -148,7 +148,7 @@ public:
   } // ... evaluate(...)
 
 private:
-  template <class R, int rLD, int rCLD, int rLDF, int rCLDF, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rLD, size_t rCLD, size_t rLDF, size_t rCLDF, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t redirect_order(
       const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rLD, rCLD>& local_diffusion,
       const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rLDF, rCLDF>& local_diffusive_flux,
@@ -163,7 +163,7 @@ private:
                        local_diffusive_flux.order()));
   } // ... redirect_order(...)
 
-  template <class R, int rLD, int rCLD, int rLDF, int rCLDF, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rLD, size_t rCLD, size_t rLDF, size_t rCLDF, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void redirect_evaluate(
       const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rLD, rCLD>& /*local_diffusion*/,
       const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rLDF,
@@ -236,7 +236,7 @@ public:
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   DiffusiveFluxEstimate(const LocalizableDiffusionFactorType& diffusion_factor,
                         const LocalizableDiffusionTensorType& diffusion_tensor,
@@ -254,7 +254,7 @@ public:
                            diffusive_flux_.local_function(entity));
   }
 
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const LocalfunctionTupleType localFuncs,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
@@ -267,7 +267,7 @@ public:
         *local_diffusion_factor, *local_diffusion_tensor, *local_diffusive_flux, testBase, ansatzBase);
   } // ... order(...)
 
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void evaluate(const LocalfunctionTupleType localFuncs,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& test_base,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rA, rCA>& ansatz_base,
@@ -286,7 +286,8 @@ public:
   } // ... evaluate(...)
 
 private:
-  template <class R, int rLD, int rCLD, int rLDT, int rCLDT, int rLDF, int rCLDF, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rLD, size_t rCLD, size_t rLDT, size_t rCLDT, size_t rLDF, size_t rCLDF, size_t rT,
+            size_t rCT, size_t rA, size_t rCA>
   size_t redirect_order(
       const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rLD, rCLD>& local_diffusion_factor,
       const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rLDT, rCLDT>&
@@ -305,7 +306,8 @@ private:
                        local_diffusive_flux.order()));
   } // ... redirect_order(...)
 
-  template <class R, int rLD, int rCLD, int rLDT, int rCLDT, int rLDF, int rCLDF, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rLD, size_t rCLD, size_t rLDT, size_t rCLDT, size_t rLDF, size_t rCLDF, size_t rT,
+            size_t rCT, size_t rA, size_t rCA>
   void redirect_evaluate(
       const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rLD,
                                           rCLD>& /*local_diffusion_factor*/,
diff --git a/dune/gdt/playground/localevaluation/OS2014.hh b/dune/gdt/playground/localevaluation/OS2014.hh
index 94c407c89176b4cb3a8923a38c0abf39c11bfb44..ab0154d9dd52cdf5751f74ed58c7f362539d65e7 100644
--- a/dune/gdt/playground/localevaluation/OS2014.hh
+++ b/dune/gdt/playground/localevaluation/OS2014.hh
@@ -78,7 +78,7 @@ public:
                      std::shared_ptr<LocalDiffusiveFluxFunctionType>> LocalfunctionTupleType;
   typedef typename LocalizableDiffusionFactorFunctionType::EntityType EntityType;
   typedef typename LocalizableDiffusionFactorFunctionType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = LocalizableDiffusionFactorFunctionType::dimDomain;
+  static const size_t dimDomain = LocalizableDiffusionFactorFunctionType::dimDomain;
 }; // class DiffusiveFluxEstimateTraits
 
 
@@ -102,7 +102,7 @@ public:
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   DiffusiveFluxEstimateStar(const LocalizableDiffusionFactorFunctionType& diffusion_factor,
                             const LocalizableDiffusionFactorHatFunctionType& diffusion_factor_hat,
@@ -123,7 +123,7 @@ public:
                            diffusive_flux_.local_function(entity));
   }
 
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const LocalfunctionTupleType& localFuncs,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
@@ -142,7 +142,8 @@ public:
   } // ... order(...)
 
 private:
-  template <class R, int rLD, int rCLD, int rLDT, int rCLDT, int rLDF, int rCLDF, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rLD, size_t rCLD, size_t rLDT, size_t rCLDT, size_t rLDF, size_t rCLDF, size_t rT,
+            size_t rCT, size_t rA, size_t rCA>
   size_t redirect_order(
       const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rLD, rCLD>& local_diffusion_factor,
       const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rLD, rCLD>&
@@ -165,7 +166,7 @@ private:
   } // ... redirect_order(...)
 
 public:
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void evaluate(const LocalfunctionTupleType& localFuncs,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& test_base,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rA, rCA>& ansatz_base,
@@ -186,8 +187,8 @@ public:
   } // ... evaluate(...)
 
 private:
-  template <class R, int rLD, int rCLD, int rLDh, int rCLDh, int rLDT, int rCLDT, int rLDF, int rCLDF, int rT, int rCT,
-            int rA, int rCA>
+  template <class R, size_t rLD, size_t rCLD, size_t rLDh, size_t rCLDh, size_t rLDT, size_t rCLDT, size_t rLDF,
+            size_t rCLDF, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void redirect_evaluate(
       const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rLD,
                                           rCLD>& /*local_diffusion_factor*/,
diff --git a/dune/gdt/playground/localevaluation/swipdg.hh b/dune/gdt/playground/localevaluation/swipdg.hh
index 1d518fe76981e9d1ba8f3aa048f67ca2bed2d932..8a0b0cea702eca0e6226a0ab7285400aacd75c89 100644
--- a/dune/gdt/playground/localevaluation/swipdg.hh
+++ b/dune/gdt/playground/localevaluation/swipdg.hh
@@ -29,7 +29,7 @@ public:
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   Inner(const LocalizableDiffusionFactorFunctionType& diffusion_factor,
         const LocalizableDiffusionTensorFunctionType& inducingFunction,
@@ -48,7 +48,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct order() method
    */
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const LocalfunctionTupleType& localFunctionsEntity, const LocalfunctionTupleType& localFunctionsNeighbor,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBaseEntity,
@@ -74,7 +74,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct evaluate() method
    */
-  template <class IntersectionType, class R, int rT, int rCT, int rA, int rCA>
+  template <class IntersectionType, class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void evaluate(
       const LocalfunctionTupleType& localFunctionsEntity, const LocalfunctionTupleType& localFunctionsNeighbor,
       const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBaseEntity,
@@ -105,7 +105,7 @@ public:
              neighborEntityRet);
   }
 
-  template <class R, int rDF, int rCDF, int rDT, int rCDT, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rDF, size_t rCDF, size_t rDT, size_t rCDT, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rDF, rCDF>&
             localDiffusionFactorEntity,
@@ -289,7 +289,7 @@ public:
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   InnerPenalty(const LocalizableDiffusionFactorFunctionType& diffusion_factor,
                const LocalizableDiffusionTensorFunctionType& inducingFunction,
@@ -308,7 +308,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct order() method
    */
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const LocalfunctionTupleType& localFunctionsEntity, const LocalfunctionTupleType& localFunctionsNeighbor,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBaseEntity,
@@ -334,7 +334,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct evaluate() method
    */
-  template <class IntersectionType, class R, int rT, int rCT, int rA, int rCA>
+  template <class IntersectionType, class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void evaluate(
       const LocalfunctionTupleType& localFunctionsEntity, const LocalfunctionTupleType& localFunctionsNeighbor,
       const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBaseEntity,
@@ -365,7 +365,7 @@ public:
              neighborEntityRet);
   }
 
-  template <class R, int rDF, int rCDF, int rDT, int rCDT, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rDF, size_t rCDF, size_t rDT, size_t rCDT, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rDF, rCDF>&
             localDiffusionFactorEntity,
@@ -512,7 +512,7 @@ public:
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   BoundaryLHS(const LocalizableDiffusionFactorFunctionType& diffusion_factor,
               const LocalizableDiffusionTensorFunctionType& diffusion_tensor,
@@ -531,7 +531,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct order() method
    */
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const LocalfunctionTupleType& localFuncs,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
@@ -545,7 +545,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct evaluate() method
    */
-  template <class IntersectionType, class R, int rT, int rCT, int rA, int rCA>
+  template <class IntersectionType, class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void evaluate(const LocalfunctionTupleType& localFuncs,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rA, rCA>& ansatzBase,
@@ -557,7 +557,7 @@ public:
     evaluate(*local_diffusion_factor, *local_diffusion_tensor, testBase, ansatzBase, intersection, localPoint, ret);
   }
 
-  template <class R, int rDF, int rCDF, int rDT, int rCDT, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rDF, size_t rCDF, size_t rDT, size_t rCDT, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rDF, rCDF>& localDiffusionFactor,
         const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rDT, rCDT>& localDiffusionTensor,
@@ -567,7 +567,8 @@ public:
     return localDiffusionFactor.order() + localDiffusionTensor.order() + testBase.order() + ansatzBase.order();
   } // size_t order< ... >(...)
 
-  template <class IntersectionType, class R, int rDF, int rCDF, int rDT, int rCDT, int rT, int rCT, int rA, int rCA>
+  template <class IntersectionType, class R, size_t rDF, size_t rCDF, size_t rDT, size_t rCDT, size_t rT, size_t rCT,
+            size_t rA, size_t rCA>
   void
   evaluate(const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rDF,
                                                rCDF>& /*localDiffusionFactor*/,
@@ -665,7 +666,7 @@ public:
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   BoundaryLHSPenalty(const LocalizableDiffusionFactorFunctionType& diffusion_factor,
                      const LocalizableDiffusionTensorFunctionType& diffusion_tensor,
@@ -684,7 +685,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct order() method
    */
-  template <class R, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const LocalfunctionTupleType& localFuncs,
         const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
@@ -698,7 +699,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct evaluate() method
    */
-  template <class IntersectionType, class R, int rT, int rCT, int rA, int rCA>
+  template <class IntersectionType, class R, size_t rT, size_t rCT, size_t rA, size_t rCA>
   void evaluate(const LocalfunctionTupleType& localFuncs,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rT, rCT>& testBase,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, rA, rCA>& ansatzBase,
@@ -710,7 +711,7 @@ public:
     evaluate(*local_diffusion_factor, *local_diffusion_tensor, testBase, ansatzBase, intersection, localPoint, ret);
   }
 
-  template <class R, int rDF, int rCDF, int rDT, int rCDT, int rT, int rCT, int rA, int rCA>
+  template <class R, size_t rDF, size_t rCDF, size_t rDT, size_t rCDT, size_t rT, size_t rCT, size_t rA, size_t rCA>
   size_t
   order(const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rDF, rCDF>& localDiffusionFactor,
         const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rDT, rCDT>& localDiffusionTensor,
@@ -720,7 +721,8 @@ public:
     return localDiffusionFactor.order() + localDiffusionTensor.order() + testBase.order() + ansatzBase.order();
   } // size_t order< ... >(...)
 
-  template <class IntersectionType, class R, int rDF, int rCDF, int rDT, int rCDT, int rT, int rCT, int rA, int rCA>
+  template <class IntersectionType, class R, size_t rDF, size_t rCDF, size_t rDT, size_t rCDT, size_t rT, size_t rCT,
+            size_t rA, size_t rCA>
   void
   evaluate(const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rDF,
                                                rCDF>& /*localDiffusionFactor*/,
@@ -835,7 +837,7 @@ public:
   typedef typename Traits::LocalfunctionTupleType LocalfunctionTupleType;
   typedef typename Traits::EntityType EntityType;
   typedef typename Traits::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = Traits::dimDomain;
+  static const size_t dimDomain = Traits::dimDomain;
 
   BoundaryRHS(const LocalizableDiffusionFactorFunctionType& diffusion_factor,
               const LocalizableDiffusionTensorFunctionType& diffusion_tensor,
@@ -858,7 +860,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct order() method
    */
-  template <class R, int r, int rC>
+  template <class R, size_t r, size_t rC>
   size_t order(const LocalfunctionTupleType& localFuncs,
                const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, r, rC>& testBase) const
   {
@@ -871,7 +873,7 @@ public:
   /**
    * \brief extracts the local functions and calls the correct evaluate() method
    */
-  template <class IntersectionType, class R, int r, int rC>
+  template <class IntersectionType, class R, size_t r, size_t rC>
   void evaluate(const LocalfunctionTupleType& localFuncs,
                 const Stuff::LocalfunctionSetInterface<EntityType, DomainFieldType, dimDomain, R, r, rC>& testBase,
                 const IntersectionType& intersection,
@@ -884,7 +886,7 @@ public:
   }
 
 private:
-  template <class R, int rDF, int rCDF, int rDT, int rCDT, int rLR, int rCLR, int rT, int rCT>
+  template <class R, size_t rDF, size_t rCDF, size_t rDT, size_t rCDT, size_t rLR, size_t rCLR, size_t rT, size_t rCT>
   size_t
   order(const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rDF, rCDF>& localDiffusionFactor,
         const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rDT, rCDT>& localDiffusionTensor,
@@ -898,7 +900,8 @@ private:
     return std::max(testOrder + dirichletOrder, diffusionOrder + testGradientOrder + dirichletOrder);
   } // size_t order(...)
 
-  template <class IntersectionType, class R, int rDF, int rCDF, int rDT, int rCDT, int rLDR, int rCLDR, int rT, int rCT>
+  template <class IntersectionType, class R, size_t rDF, size_t rCDF, size_t rDT, size_t rCDT, size_t rLDR,
+            size_t rCLDR, size_t rT, size_t rCT>
   void evaluate(
       const Stuff::LocalfunctionInterface<EntityType, DomainFieldType, dimDomain, R, rDF,
                                           rCDF>& /*localDiffusionFactor*/,
diff --git a/dune/gdt/playground/operators/fluxreconstruction.hh b/dune/gdt/playground/operators/fluxreconstruction.hh
index 19c039cd60f169add80b9824128f09896bd509a7..02e6a8c8167c763c691887f2bb0595c86dbbd7a3 100644
--- a/dune/gdt/playground/operators/fluxreconstruction.hh
+++ b/dune/gdt/playground/operators/fluxreconstruction.hh
@@ -28,7 +28,7 @@ class DiffusiveFluxReconstruction
 public:
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename GridViewType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridViewType::dimension;
+  static const size_t dimDomain = GridViewType::dimension;
   typedef typename DiffusionFactorType::RangeFieldType FieldType;
   typedef typename DiffusionFactorType::DomainType DomainType;
 
diff --git a/dune/gdt/playground/spaces/block.hh b/dune/gdt/playground/spaces/block.hh
index c6571ab14c76eee86fbc6ae45000e322c0253024..e13c3e68a6f51f58a5a902cef03d8ea89e22658b 100644
--- a/dune/gdt/playground/spaces/block.hh
+++ b/dune/gdt/playground/spaces/block.hh
@@ -147,7 +147,7 @@ public:
     DUNE_THROW(NotImplemented, "I am not sure yet how to implement this!");
   }
 
-  template <class G, class S, int d, int r, int rC>
+  template <class G, class S, size_t d, size_t r, size_t rC>
   PatternType compute_pattern(const GridView<G>& /*local_grid_view*/,
                               const SpaceInterface<S, d, r, rC>& /*ansatz_space*/) const
   {
diff --git a/dune/gdt/playground/spaces/cg/fem-localfunctions.hh b/dune/gdt/playground/spaces/cg/fem-localfunctions.hh
index 9d9261c0ee17f69e0a3d9205f774de35cb63fc68..b5b7a3e1b40121aad2bf67488353adf4f552c250 100644
--- a/dune/gdt/playground/spaces/cg/fem-localfunctions.hh
+++ b/dune/gdt/playground/spaces/cg/fem-localfunctions.hh
@@ -41,14 +41,14 @@ namespace CG {
 
 
 // forward, to be used in the traits and to allow for specialization
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class FemLocalfunctionsBased
 {
   static_assert(Dune::AlwaysFalse<GridPartImp>::value, "Untested for these dimensions!");
 };
 
 
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols>
 class FemLocalfunctionsBasedTraits
 {
 public:
@@ -59,7 +59,7 @@ public:
 
 private:
   typedef typename GridPartType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridPartType::dimension;
+  static const size_t dimDomain = GridPartType::dimension;
 
 public:
   typedef RangeFieldImp RangeFieldType;
@@ -95,7 +95,7 @@ public:
   typedef double CommunicatorType;
 
 private:
-  template <class G, int p, class R, int r, int rC>
+  template <class G, int p, class R, size_t r, size_t rC>
   friend class FemLocalfunctionsBased;
 }; // class FemLocalfunctionsBasedTraits
 
@@ -116,7 +116,7 @@ public:
   typedef typename Traits::GridViewType GridViewType;
   static const int polOrder = Traits::polOrder;
   typedef typename GridPartType::ctype DomainFieldType;
-  static const unsigned int dimDomain = BaseType::dimension;
+  static const size_t dimDomain = BaseType::dimension;
 
 private:
   static_assert(GridPartType::dimension == dimDomain, "Dimension of GridPart has to match dimDomain");
@@ -124,8 +124,8 @@ private:
 public:
   typedef FieldVector<DomainFieldType, dimDomain> DomainType;
   typedef typename Traits::RangeFieldType RangeFieldType;
-  static const unsigned int dimRange     = BaseType::dimRange;
-  static const unsigned int dimRangeCols = BaseType::dimRangeCols;
+  static const size_t dimRange     = BaseType::dimRange;
+  static const size_t dimRangeCols = BaseType::dimRangeCols;
 
   typedef typename Traits::BackendType BackendType;
   typedef typename Traits::MapperType MapperType;
@@ -225,7 +225,7 @@ private:
 #else // HAVE_DUNE_FEM_LOCALFUNCTIONS
 
 
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class FemLocalfunctionsBased
 {
   static_assert(Dune::AlwaysFalse<GridPartImp>::value, "You are missing dune-fem-localfunctions!");
diff --git a/dune/gdt/playground/spaces/continuouslagrange/fem-localfunctions.hh b/dune/gdt/playground/spaces/continuouslagrange/fem-localfunctions.hh
index a2073fa87f838d8e48fad6d5e429170f17f36acd..f3ae26b46eff4097fda9ddea45f0798858f8db48 100644
--- a/dune/gdt/playground/spaces/continuouslagrange/fem-localfunctions.hh
+++ b/dune/gdt/playground/spaces/continuouslagrange/fem-localfunctions.hh
@@ -15,7 +15,7 @@ namespace Spaces {
 namespace ContinuousLagrange {
 
 
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class DUNE_DEPRECATED_MSG("Use CG::FemLocalfunctionsBased instead (21.11.2014)!") FemLocalfunctionsBased
     : public CG::FemLocalfunctionsBased<GridPartImp, polynomialOrder, RangeFieldImp, rangeDim, rangeDimCols>
 {
diff --git a/dune/gdt/playground/spaces/dg/fem-localfunctions.hh b/dune/gdt/playground/spaces/dg/fem-localfunctions.hh
index aee042a0bf2ba126f2564de30611b4ff5f4013d7..b3ab3da606ea86a1e8c4fc216e27454571fec5fb 100644
--- a/dune/gdt/playground/spaces/dg/fem-localfunctions.hh
+++ b/dune/gdt/playground/spaces/dg/fem-localfunctions.hh
@@ -39,7 +39,7 @@ namespace DG {
 
 
 // forward, to be used in the traits and to allow for specialization
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class FemLocalfunctionsBased
 {
   static_assert(rangeDim == 1 && rangeDimCols == 1, "Not yet implemented (find suitable vector valued basis)!");
@@ -47,7 +47,7 @@ class FemLocalfunctionsBased
 };
 
 
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols>
 class FemLocalfunctionsBasedTraits
 {
   static_assert(polynomialOrder >= 1, "Wrong polOrder given!");
@@ -61,7 +61,7 @@ public:
 
 private:
   typedef typename GridPartType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridPartType::dimension;
+  static const size_t dimDomain = GridPartType::dimension;
   typedef typename GridPartType::GridType GridType;
   static_assert(dimDomain == 1 || Dune::Capabilities::hasSingleGeometryType<GridType>::v,
                 "This space is only implemented for fully simplicial grids!");
@@ -93,7 +93,7 @@ public:
   typedef double CommunicatorType;
 
 private:
-  template <class G, int p, class R, int r, int rC>
+  template <class G, int p, class R, size_t r, size_t rC>
   friend class FemLocalfunctionsBased;
 }; // class FemLocalfunctionsBasedTraits
 
@@ -113,16 +113,16 @@ public:
   typedef typename Traits::GridPartType GridPartType;
   typedef typename Traits::GridViewType GridViewType;
   typedef typename GridPartType::ctype DomainFieldType;
-  static const int polOrder           = Traits::polOrder;
-  static const unsigned int dimDomain = BaseType::dimDomain;
+  static const int polOrder     = Traits::polOrder;
+  static const size_t dimDomain = BaseType::dimDomain;
 
 private:
   static_assert(GridPartType::dimension == dimDomain, "Dimension of GridPart has to match dimDomain");
 
 public:
   typedef typename Traits::RangeFieldType RangeFieldType;
-  static const unsigned int dimRange     = BaseType::dimRange;
-  static const unsigned int dimRangeCols = BaseType::dimRangeCols;
+  static const size_t dimRange     = BaseType::dimRange;
+  static const size_t dimRangeCols = BaseType::dimRangeCols;
 
   typedef typename Traits::BackendType BackendType;
   typedef typename Traits::MapperType MapperType;
@@ -216,7 +216,7 @@ private:
 #else // HAVE_DUNE_FEM_LOCALFUNCTIONS
 
 
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class FemLocalfunctionsBased
 {
   static_assert(Dune::AlwaysFalse<GridPartImp>::value, "You are missing dune-fem-localfunctions!");
diff --git a/dune/gdt/playground/spaces/dg/fem.hh b/dune/gdt/playground/spaces/dg/fem.hh
index d4b63d80bae6d81c0b33cbd1f05ef1543a2f2756..d03194b61aa4809eff3cea3a85a456fbef9f1cde 100644
--- a/dune/gdt/playground/spaces/dg/fem.hh
+++ b/dune/gdt/playground/spaces/dg/fem.hh
@@ -33,14 +33,14 @@ namespace DG {
 
 
 // forward, to be used in the traits and to allow for specialization
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class FemBased
 {
   static_assert(Dune::AlwaysFalse<GridPartImp>::value, "Untested for these dimensions!");
 };
 
 
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols>
 class FemBasedTraits
 {
 public:
@@ -52,7 +52,7 @@ public:
 
 private:
   typedef typename GridPartType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridPartType::dimension;
+  static const size_t dimDomain = GridPartType::dimension;
 
 public:
   typedef RangeFieldImp RangeFieldType;
@@ -86,10 +86,10 @@ class FemBased<GridPartImp, polynomialOrder, RangeFieldImp, 1, 1>
 public:
   typedef FemBasedTraits<GridPartImp, polynomialOrder, RangeFieldImp, 1, 1> Traits;
 
-  static const int polOrder              = Traits::polOrder;
-  static const unsigned int dimDomain    = BaseType::dimDomain;
-  static const unsigned int dimRange     = BaseType::dimRange;
-  static const unsigned int dimRangeCols = BaseType::dimRangeCols;
+  static const int polOrder        = Traits::polOrder;
+  static const size_t dimDomain    = BaseType::dimDomain;
+  static const size_t dimRange     = BaseType::dimRange;
+  static const size_t dimRangeCols = BaseType::dimRangeCols;
 
   typedef typename Traits::GridPartType GridPartType;
   typedef typename Traits::GridViewType GridViewType;
@@ -123,7 +123,7 @@ public:
 
   using BaseType::compute_pattern;
 
-  template <class G, class S, int d, int r, int rC>
+  template <class G, class S, size_t d, size_t r, size_t rC>
   PatternType compute_pattern(const GridView<G>& local_grid_view, const SpaceInterface<S, d, r, rC>& ansatz_space) const
   {
     return BaseType::compute_face_and_volume_pattern(local_grid_view, ansatz_space);
@@ -172,7 +172,7 @@ private:
 #else // HAVE_DUNE_FEM
 
 
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class FemBased
 {
   static_assert(Dune::AlwaysFalse<GridPartImp>::value, "You are missing dune-fem!");
diff --git a/dune/gdt/playground/spaces/dg/pdelab.hh b/dune/gdt/playground/spaces/dg/pdelab.hh
index 6940155bad78946e4773b72e48dd5960dcc3fb0e..90c9ba971021a2b412ad775d827ed32f099ec890 100644
--- a/dune/gdt/playground/spaces/dg/pdelab.hh
+++ b/dune/gdt/playground/spaces/dg/pdelab.hh
@@ -38,14 +38,14 @@ namespace DG {
 
 
 // forward, to be used in the traits and to allow for specialization
-template <class GridViewImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridViewImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class PdelabBased
 {
   static_assert(Dune::AlwaysFalse<GridViewImp>::value, "Untested for this combination of dimensions!");
 }; // class PdelabBased
 
 
-template <class GridViewImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridViewImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class PdelabBasedTraits
 {
 public:
@@ -55,7 +55,7 @@ public:
 
 private:
   typedef typename GridViewType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridViewType::dimension;
+  static const size_t dimDomain = GridViewType::dimension;
 
 public:
   typedef RangeFieldImp RangeFieldType;
@@ -114,10 +114,10 @@ class PdelabBased<GridViewImp, polynomialOrder, RangeFieldImp, 1, 1>
 public:
   typedef PdelabBasedTraits<GridViewImp, polynomialOrder, RangeFieldImp, 1, 1> Traits;
 
-  static const int polOrder              = Traits::polOrder;
-  static const unsigned int dimDomain    = BaseType::dimDomain;
-  static const unsigned int dimRange     = BaseType::dimRange;
-  static const unsigned int dimRangeCols = BaseType::dimRangeCols;
+  static const int polOrder        = Traits::polOrder;
+  static const size_t dimDomain    = BaseType::dimDomain;
+  static const size_t dimRange     = BaseType::dimRange;
+  static const size_t dimRangeCols = BaseType::dimRangeCols;
 
   typedef typename Traits::GridViewType GridViewType;
   typedef typename Traits::RangeFieldType RangeFieldType;
@@ -186,7 +186,7 @@ public:
 
   using BaseType::compute_pattern;
 
-  template <class G, class S, int d, int r, int rC>
+  template <class G, class S, size_t d, size_t r, size_t rC>
   PatternType compute_pattern(const GridView<G>& local_grid_view, const SpaceInterface<S, d, r, rC>& ansatz_space) const
   {
     return BaseType::compute_face_and_volume_pattern(local_grid_view, ansatz_space);
@@ -234,7 +234,7 @@ private:
 #else // HAVE_DUNE_PDELAB
 
 
-template <class GridViewImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridViewImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class PdelabBased
 {
   static_assert(Dune::AlwaysFalse<GridViewImp>::value, "You are missing dune-pdelab!");
diff --git a/dune/gdt/playground/spaces/discontinuouslagrange/fem-localfunctions.hh b/dune/gdt/playground/spaces/discontinuouslagrange/fem-localfunctions.hh
index 477b9b232f3289f6a92537e381d68c970184885a..e8028c3ed64fe662f25f150d0bf88e97b65fb7a8 100644
--- a/dune/gdt/playground/spaces/discontinuouslagrange/fem-localfunctions.hh
+++ b/dune/gdt/playground/spaces/discontinuouslagrange/fem-localfunctions.hh
@@ -15,7 +15,7 @@ namespace Spaces {
 namespace DiscontinuousLagrange {
 
 
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class DUNE_DEPRECATED_MSG("Use DG::FemLocalfunctionsBased instead (21.11.2014)!") FemLocalfunctionsBased
     : public DG::FemLocalfunctionsBased<GridPartImp, polynomialOrder, RangeFieldImp, rangeDim, rangeDimCols>
 {
diff --git a/dune/gdt/playground/spaces/discontinuouslagrange/fem.hh b/dune/gdt/playground/spaces/discontinuouslagrange/fem.hh
index 6b1cc1e4a1e6ab34a4bdaf776896dcf273da71d2..098f3dbc81b607b43bfc95b906d588634872bcd7 100644
--- a/dune/gdt/playground/spaces/discontinuouslagrange/fem.hh
+++ b/dune/gdt/playground/spaces/discontinuouslagrange/fem.hh
@@ -15,7 +15,7 @@ namespace Spaces {
 namespace DiscontinuousLagrange {
 
 
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class DUNE_DEPRECATED_MSG("Use DG::FemBased instead (21.11.2014)!") FemBased
     : public DG::FemBased<GridPartImp, polynomialOrder, RangeFieldImp, rangeDim, rangeDimCols>
 {
diff --git a/dune/gdt/playground/spaces/discontinuouslagrange/pdelab.hh b/dune/gdt/playground/spaces/discontinuouslagrange/pdelab.hh
index dd33af6b0bc08b8700dd251b70660568cfa04d50..85407c0c6c1772c3547546520f9a29515ee81fe3 100644
--- a/dune/gdt/playground/spaces/discontinuouslagrange/pdelab.hh
+++ b/dune/gdt/playground/spaces/discontinuouslagrange/pdelab.hh
@@ -15,7 +15,7 @@ namespace Spaces {
 namespace DiscontinuousLagrange {
 
 
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class DUNE_DEPRECATED_MSG("Use DG::PdelabBased instead (21.11.2014)!") PdelabBased
     : public DG::PdelabBased<GridPartImp, polynomialOrder, RangeFieldImp, rangeDim, rangeDimCols>
 {
diff --git a/dune/gdt/playground/spaces/finitevolume/default.hh b/dune/gdt/playground/spaces/finitevolume/default.hh
index 9859517664090927a25b19d454f14807dbb7c864..f7f1485b36fb099f2c18e629b8fcbd484e91ea61 100644
--- a/dune/gdt/playground/spaces/finitevolume/default.hh
+++ b/dune/gdt/playground/spaces/finitevolume/default.hh
@@ -15,7 +15,7 @@ namespace Spaces {
 namespace FiniteVolume {
 
 
-template <class GridViewImp, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridViewImp, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class DUNE_DEPRECATED_MSG("Use FV::Default instead (19.11.2014)!") Default
     : public FV::Default<GridViewImp, RangeFieldImp, rangeDim, rangeDimCols>
 {
diff --git a/dune/gdt/playground/spaces/raviartthomas/fem-localfunctions.hh b/dune/gdt/playground/spaces/raviartthomas/fem-localfunctions.hh
index 6f880da8ff3193a90c31e5635b266646bd0c1a31..fe62673374b05d0ca7a3108350d32e5bd6a17cf0 100644
--- a/dune/gdt/playground/spaces/raviartthomas/fem-localfunctions.hh
+++ b/dune/gdt/playground/spaces/raviartthomas/fem-localfunctions.hh
@@ -15,7 +15,7 @@ namespace Spaces {
 namespace RaviartThomas {
 
 
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class DUNE_DEPRECATED_MSG("Use RT::FemLocalfunctionsBased instead (21.11.2014)!") FemLocalfunctionsBased
     : public RT::FemLocalfunctionsBased<GridPartImp, polynomialOrder, RangeFieldImp, rangeDim, rangeDimCols>
 {
diff --git a/dune/gdt/playground/spaces/raviartthomas/pdelab.hh b/dune/gdt/playground/spaces/raviartthomas/pdelab.hh
index b3c4ed45711a4ab4669325dd12445147e2ffcf2e..5e156fccc165c2e20153805f7f01c5766874c695 100644
--- a/dune/gdt/playground/spaces/raviartthomas/pdelab.hh
+++ b/dune/gdt/playground/spaces/raviartthomas/pdelab.hh
@@ -15,7 +15,7 @@ namespace Spaces {
 namespace RaviartThomas {
 
 
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class DUNE_DEPRECATED_MSG("Use RT::PdelabBased instead (21.11.2014)!") PdelabBased
     : public RT::PdelabBased<GridPartImp, polynomialOrder, RangeFieldImp, rangeDim, rangeDimCols>
 {
diff --git a/dune/gdt/playground/spaces/rt/fem-localfunctions.hh b/dune/gdt/playground/spaces/rt/fem-localfunctions.hh
index 7eafa1d04907e8a6fdc06aef20263bbe2d301279..bc91d169289f1a6f969f75f14626de344b0678f6 100644
--- a/dune/gdt/playground/spaces/rt/fem-localfunctions.hh
+++ b/dune/gdt/playground/spaces/rt/fem-localfunctions.hh
@@ -39,7 +39,7 @@ namespace RT {
 
 
 // forward, to be used in the traits and to allow for specialization
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class FemLocalfunctionsBased
 {
   static_assert(Dune::AlwaysFalse<GridPartImp>::value, "Untested for these dimensions!");
@@ -47,7 +47,7 @@ class FemLocalfunctionsBased
 
 
 // forward, to allow for specialization
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols>
 class FemLocalfunctionsBasedTraits
 {
   static_assert(Dune::AlwaysFalse<GridPartImp>::value, "Untested for these dimensions!");
@@ -67,12 +67,12 @@ public:
 
 private:
   typedef typename GridPartType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridPartType::dimension;
+  static const size_t dimDomain = GridPartType::dimension;
 
 public:
   typedef RangeFieldImp RangeFieldType;
-  static const unsigned int dimRange     = 2;
-  static const unsigned int dimRangeCols = 1;
+  static const size_t dimRange     = 2;
+  static const size_t dimRangeCols = 1;
   typedef FemLocalfunctionsBased<GridPartType, polOrder, RangeFieldType, dimRange, dimRangeCols> derived_type;
 
 private:
@@ -98,7 +98,7 @@ public:
   static const bool needs_grid_view                       = false;
 
 private:
-  template <class G, int p, class R, int r, int rC>
+  template <class G, int p, class R, size_t r, size_t rC>
   friend class FemLocalfunctionsBased;
 }; // class FemLocalfunctionsBasedTraits< ..., 2, 1 >
 
@@ -118,11 +118,11 @@ public:
   typedef typename Traits::GridPartType GridPartType;
   typedef typename Traits::GridViewType GridViewType;
   typedef typename GridPartType::ctype DomainFieldType;
-  static const int polOrder           = Traits::polOrder;
-  static const unsigned int dimDomain = GridPartType::dimension;
+  static const int polOrder     = Traits::polOrder;
+  static const size_t dimDomain = GridPartType::dimension;
   typedef typename Traits::RangeFieldType RangeFieldType;
-  static const unsigned int dimRange     = Traits::dimRange;
-  static const unsigned int dimRangeCols = Traits::dimRangeCols;
+  static const size_t dimRange     = Traits::dimRange;
+  static const size_t dimRangeCols = Traits::dimRangeCols;
 
   typedef typename Traits::BackendType BackendType;
   typedef typename Traits::MapperType MapperType;
@@ -196,7 +196,7 @@ public:
 
   using BaseType::compute_pattern;
 
-  template <class G, class S, int d, int r, int rC>
+  template <class G, class S, size_t d, size_t r, size_t rC>
   PatternType compute_pattern(const GridView<G>& local_grid_view, const SpaceInterface<S, d, r, rC>& ansatz_space) const
   {
     return BaseType::compute_face_and_volume_pattern(local_grid_view, ansatz_space);
@@ -214,7 +214,7 @@ private:
 #else // HAVE_DUNE_FEM_LOCALFUNCTIONS
 
 
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class FemLocalfunctionsBased
 {
   static_assert(Dune::AlwaysFalse<GridPartImp>::value, "You are missing dune-fem-localfunctions!");
diff --git a/dune/gdt/products/base.hh b/dune/gdt/products/base.hh
index 6fc220cd2a4dc002962f6c9af9f4c5f9aa8d2fd1..011da103f4f1fb37e942453d92695d25bd23fd22 100644
--- a/dune/gdt/products/base.hh
+++ b/dune/gdt/products/base.hh
@@ -340,7 +340,7 @@ public:
 
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename GridViewType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridViewType::dimension;
+  static const size_t dimDomain = GridViewType::dimension;
 
   template <class... Args>
   GenericBase(const GridViewType& grd_vw, Args&&... args)
@@ -354,7 +354,7 @@ public:
     return grid_view_;
   }
 
-  template <class RR, int rRR, int rCR, class RS, int rRS, int rCS>
+  template <class RR, size_t rRR, size_t rCR, class RS, size_t rRS, size_t rCS>
   FieldType
   apply2(const Stuff::LocalizableFunctionInterface<EntityType, DomainFieldType, dimDomain, RR, rRR, rCR>& range,
          const Stuff::LocalizableFunctionInterface<EntityType, DomainFieldType, dimDomain, RS, rRS, rCS>& source) const
diff --git a/dune/gdt/products/interfaces.hh b/dune/gdt/products/interfaces.hh
index 5ad3615633851e3af1da0e4629ec7f7066638c8b..84f619ce5386607533d7490a8d1d951fe971fd4d 100644
--- a/dune/gdt/products/interfaces.hh
+++ b/dune/gdt/products/interfaces.hh
@@ -68,7 +68,7 @@ public:
 
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename GridViewType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridViewType::dimension;
+  static const size_t dimDomain = GridViewType::dimension;
 
 private:
   static_assert(std::is_base_of<Stuff::IsLocalizableFunction, SourceType>::value,
@@ -130,7 +130,7 @@ public:
   typedef typename MatrixType::ScalarType FieldType;
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename GridViewType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridViewType::dimension;
+  static const size_t dimDomain = GridViewType::dimension;
 
   typedef Stuff::LA::SparsityPatternDefault PatternType;
 
diff --git a/dune/gdt/spaces/cg.hh b/dune/gdt/spaces/cg.hh
index b44ce81244f2023d5bb51acaf603ade5dffbc58e..7f838dcc457a221b1943a18078de4fc3045feb57 100644
--- a/dune/gdt/spaces/cg.hh
+++ b/dune/gdt/spaces/cg.hh
@@ -29,7 +29,7 @@ namespace Spaces {
 
 
 template <class GridType, Stuff::Grid::ChooseLayer layer_type, ChooseSpaceBackend backend_type, int polOrder,
-          class RangeFieldType, int dimRange, int dimRangeCols = 1>
+          class RangeFieldType, size_t dimRange, size_t dimRangeCols = 1>
 class CGProvider
 {
   static const Stuff::Grid::ChoosePartView part_view_type = ChooseGridPartView<backend_type>::type;
@@ -38,19 +38,19 @@ public:
   typedef typename Stuff::Grid::Layer<GridType, layer_type, part_view_type>::Type GridLayerType;
 
 private:
-  template <class G, int p, class R, int r, int rC, GDT::ChooseSpaceBackend b>
+  template <class G, int p, class R, size_t r, size_t rC, GDT::ChooseSpaceBackend b>
   struct SpaceChooser
   {
     static_assert(AlwaysFalse<G>::value, "No space available for this backend!");
   };
 
-  template <class G, int p, class R, int r, int rC>
+  template <class G, int p, class R, size_t r, size_t rC>
   struct SpaceChooser<G, p, R, r, rC, GDT::ChooseSpaceBackend::fem>
   {
     typedef GDT::Spaces::CG::FemBased<GridLayerType, p, R, r> Type;
   };
 
-  template <class G, int p, class R, int r, int rC>
+  template <class G, int p, class R, size_t r, size_t rC>
   struct SpaceChooser<G, p, R, r, rC, GDT::ChooseSpaceBackend::pdelab>
   {
     typedef GDT::Spaces::CG::PdelabBased<GridLayerType, p, R, r> Type;
@@ -69,13 +69,13 @@ public:
     return Type(grid_layer);
   }
 
-  static Type create(GridProviderType& grid_provider, const int level = 0)
+  static Type create(GridProviderType& grid_provider, const size_t level = 0)
   {
     return Type(grid_provider.template layer<layer_type, part_view_type>(level));
   }
 
 #if HAVE_DUNE_GRID_MULTISCALE
-  static Type create(const MsGridProviderType& grid_provider, const int level_or_subdomain = 0)
+  static Type create(const MsGridProviderType& grid_provider, const size_t level_or_subdomain = 0)
   {
     return Type(grid_provider.template layer<layer_type, part_view_type>(level_or_subdomain));
   }
@@ -84,7 +84,7 @@ public:
 
 
 template <class GridType, Stuff::Grid::ChooseLayer layer_type, ChooseSpaceBackend backend_type, int polOrder,
-          class RangeFieldType, int dimRange, int dimRangeCols = 1>
+          class RangeFieldType, size_t dimRange, size_t dimRangeCols = 1>
 class DUNE_DEPRECATED_MSG("Use CGProvider instead (02.02.2015)!") ContinuousLagrangeProvider
     : public CGProvider<GridType, layer_type, backend_type, polOrder, RangeFieldType, dimRange, dimRangeCols>
 {
diff --git a/dune/gdt/spaces/cg/fem.hh b/dune/gdt/spaces/cg/fem.hh
index 36a0209842b03afece23b7882453980bf53d3619..721c578fabd46b7a03a06b9d16768ba615fa12da 100644
--- a/dune/gdt/spaces/cg/fem.hh
+++ b/dune/gdt/spaces/cg/fem.hh
@@ -34,14 +34,14 @@ namespace CG {
 
 
 // forward, to be used in the traits and to allow for specialization
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class FemBased
 {
   static_assert(Dune::AlwaysFalse<GridPartImp>::value, "Untested for these dimensions!");
 };
 
 
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols>
 class FemBasedTraits
 {
 public:
@@ -53,7 +53,7 @@ public:
 
 private:
   typedef typename GridPartType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridPartType::dimension;
+  static const size_t dimDomain = GridPartType::dimension;
 
 public:
   typedef RangeFieldImp RangeFieldType;
@@ -87,10 +87,10 @@ class FemBased<GridPartImp, polynomialOrder, RangeFieldImp, 1, 1>
 public:
   typedef FemBasedTraits<GridPartImp, polynomialOrder, RangeFieldImp, 1, 1> Traits;
 
-  static const int polOrder              = Traits::polOrder;
-  static const unsigned int dimDomain    = BaseType::dimDomain;
-  static const unsigned int dimRange     = BaseType::dimRange;
-  static const unsigned int dimRangeCols = BaseType::dimRangeCols;
+  static const int polOrder        = Traits::polOrder;
+  static const size_t dimDomain    = BaseType::dimDomain;
+  static const size_t dimRange     = BaseType::dimRange;
+  static const size_t dimRangeCols = BaseType::dimRangeCols;
 
   typedef typename Traits::GridPartType GridPartType;
   typedef typename Traits::GridViewType GridViewType;
@@ -176,7 +176,7 @@ private:
 #else // HAVE_DUNE_FEM
 
 
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class FemBased
 {
   static_assert(Dune::AlwaysFalse<GridPartImp>::value, "You are missing dune-fem!");
diff --git a/dune/gdt/spaces/cg/interface.hh b/dune/gdt/spaces/cg/interface.hh
index d47f7630c04b154501defabecb19b9c31bceb13a..7128c6253bf015c3d399e1a0562df801b3499cd8 100644
--- a/dune/gdt/spaces/cg/interface.hh
+++ b/dune/gdt/spaces/cg/interface.hh
@@ -6,6 +6,8 @@
 #ifndef DUNE_GDT_SPACES_CG_INTERFACE_HH
 #define DUNE_GDT_SPACES_CG_INTERFACE_HH
 
+#include <boost/numeric/conversion/cast.hpp>
+
 #include <dune/common/dynvector.hh>
 #include <dune/common/version.hh>
 #include <dune/common/typetraits.hh>
@@ -26,7 +28,7 @@ namespace GDT {
 namespace Spaces {
 
 
-template <class ImpTraits, int domainDim, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class ImpTraits, size_t domainDim, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class CGInterface : public SpaceInterface<ImpTraits, domainDim, rangeDim, rangeDimCols>
 {
   typedef SpaceInterface<ImpTraits, domainDim, rangeDim, rangeDimCols> BaseType;
@@ -85,13 +87,13 @@ public:
     typedef typename BaseType::BaseFunctionSetType::RangeType RangeType;
     std::vector<RangeType> tmp_basis_values(basis.size(), RangeType(0));
     const auto& reference_element = ReferenceElements<DomainFieldType, dimDomain>::general(entity.type());
-    const int num_vertices = reference_element.size(dimDomain);
+    const auto num_vertices = reference_element.size(dimDomain);
     assert(num_vertices >= 0);
-    assert(size_t(num_vertices) == basis.size() && "This should not happen with polOrder 1!");
+    assert(boost::numeric_cast<size_t>(num_vertices) == basis.size() && "This should not happen with polOrder 1!");
     // prepare return vector
     std::vector<DomainType> local_vertices(num_vertices, DomainType(0));
     // loop over all vertices
-    for (int ii = 0; ii < num_vertices; ++ii) {
+    for (auto ii : DSC::valueRange(num_vertices)) {
       // get the local coordinate of the iith vertex
       const auto local_vertex = reference_element.position(ii, dimDomain);
       // evaluate the basefunctionset
@@ -135,7 +137,7 @@ public:
       if (boundaryInfo.dirichlet(intersection) || (!intersection.neighbor() && !intersection.boundary())) {
         // and get the vertices of the intersection
         const auto geometry = intersection.geometry();
-        for (int cc = 0; cc < geometry.corners(); ++cc)
+        for (auto cc : DSC::valueRange(geometry.corners()))
           dirichlet_vertices.emplace_back(entity.geometry().local(geometry.corner(cc)));
       } // only work on dirichlet ones
     } // loop over all intersections
@@ -165,7 +167,7 @@ public:
 
   using BaseType::compute_pattern;
 
-  template <class G, class S, int d, int r, int rC>
+  template <class G, class S, size_t d, size_t r, size_t rC>
   PatternType compute_pattern(const GridView<G>& local_grid_view, const SpaceInterface<S, d, r, rC>& ansatz_space) const
   {
     return BaseType::compute_volume_pattern(local_grid_view, ansatz_space);
@@ -173,14 +175,14 @@ public:
 
   using BaseType::local_constraints;
 
-  template <class S, int d, int r, int rC, class ConstraintsType>
+  template <class S, size_t d, size_t r, size_t rC, class ConstraintsType>
   void local_constraints(const SpaceInterface<S, d, r, rC>& /*other*/, const EntityType& /*entity*/,
                          ConstraintsType& /*ret*/) const
   {
     static_assert(AlwaysFalse<S>::value, "Not implemented for these constraints!");
   } // ... local_constraints(...)
 
-  template <class S, int d, int r, int rC>
+  template <class S, size_t d, size_t r, size_t rC>
   void local_constraints(const SpaceInterface<S, d, r, rC>& other, const EntityType& entity,
                          Constraints::Dirichlet<IntersectionType, RangeFieldType>& ret) const
   {
diff --git a/dune/gdt/spaces/cg/pdelab.hh b/dune/gdt/spaces/cg/pdelab.hh
index 8cb52e20b87ee0a8f092a3f8ed905133313c471f..590d695aa2f21370ef99230b885cea6245d84549 100644
--- a/dune/gdt/spaces/cg/pdelab.hh
+++ b/dune/gdt/spaces/cg/pdelab.hh
@@ -44,14 +44,14 @@ namespace CG {
 
 
 // forward, to be used in the traits and to allow for specialization
-template <class GridViewImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridViewImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class PdelabBased
 {
   static_assert(Dune::AlwaysFalse<GridViewImp>::value, "Untested for this combination of dimensions!");
 };
 
 
-template <class GridViewImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridViewImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class PdelabBasedTraits
 {
 public:
@@ -62,7 +62,7 @@ public:
 
 private:
   typedef typename GridViewType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridViewType::dimension;
+  static const size_t dimDomain = GridViewType::dimension;
 
 public:
   typedef RangeFieldImp RangeFieldType;
@@ -121,10 +121,10 @@ class PdelabBased<GridViewImp, polynomialOrder, RangeFieldImp, 1, 1>
 public:
   typedef PdelabBasedTraits<GridViewImp, polynomialOrder, RangeFieldImp, 1, 1> Traits;
 
-  static const int polOrder              = Traits::polOrder;
-  static const unsigned int dimDomain    = BaseType::dimDomain;
-  static const unsigned int dimRange     = BaseType::dimRange;
-  static const unsigned int dimRangeCols = BaseType::dimRangeCols;
+  static const int polOrder        = Traits::polOrder;
+  static const size_t dimDomain    = BaseType::dimDomain;
+  static const size_t dimRange     = BaseType::dimRange;
+  static const size_t dimRangeCols = BaseType::dimRangeCols;
 
   typedef typename Traits::GridViewType GridViewType;
   typedef typename Traits::RangeFieldType RangeFieldType;
@@ -243,7 +243,7 @@ private:
 #else // HAVE_DUNE_PDELAB
 
 
-template <class GridViewImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridViewImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class PdelabBased
 {
   static_assert(Dune::AlwaysFalse<GridViewImp>::value, "You are missing dune-pdelab!");
diff --git a/dune/gdt/spaces/continuouslagrange/base.hh b/dune/gdt/spaces/continuouslagrange/base.hh
index cee8395519b5b403aa6e32c573a381fe603deb28..ac1fd909f587543d1cd23a360c7a583f650e183f 100644
--- a/dune/gdt/spaces/continuouslagrange/base.hh
+++ b/dune/gdt/spaces/continuouslagrange/base.hh
@@ -27,7 +27,7 @@ namespace Spaces {
 
 
 // forward, to allow for specialization
-template <class ImpTraits, int domainDim, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class ImpTraits, size_t domainDim, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class DUNE_DEPRECATED_MSG("Include <dune/gdt/spaces/cg/fem.hh> and use CGInterface instead (21.11.2014)!")
     ContinuousLagrangeBase
 {
@@ -35,7 +35,7 @@ class DUNE_DEPRECATED_MSG("Include <dune/gdt/spaces/cg/fem.hh> and use CGInterfa
 };
 
 
-template <class ImpTraits, int domainDim, class RangeFieldImp, int rangeDim>
+template <class ImpTraits, size_t domainDim, class RangeFieldImp, size_t rangeDim>
 class DUNE_DEPRECATED_MSG("Include <dune/gdt/spaces/cg/fem.hh> and use CGInterface instead (21.11.2014)!")
     ContinuousLagrangeBase<ImpTraits, domainDim, RangeFieldImp, rangeDim, 1>
     : public SpaceInterface<ImpTraits, domainDim, rangeDim, 1>
@@ -69,7 +69,7 @@ public:
 
   using BaseType::compute_pattern;
 
-  template <class G, class S, int d, int r, int rC>
+  template <class G, class S, size_t d, size_t r, size_t rC>
   PatternType compute_pattern(const GridView<G>& local_grid_view, const SpaceInterface<S, d, r, rC>& ansatz_space) const
   {
     return BaseType::compute_volume_pattern(local_grid_view, ansatz_space);
@@ -167,14 +167,14 @@ public:
 
   using BaseType::local_constraints;
 
-  template <class S, int d, int r, int rC, class ConstraintsType>
+  template <class S, size_t d, size_t r, size_t rC, class ConstraintsType>
   void local_constraints(const SpaceInterface<S, d, r, rC>& /*other*/, const EntityType& /*entity*/,
                          ConstraintsType& /*ret*/) const
   {
     static_assert(AlwaysFalse<S>::value, "Not implemented for these constraints!");
   }
 
-  template <class S, int d, int r, int rC>
+  template <class S, size_t d, size_t r, size_t rC>
   void local_constraints(const SpaceInterface<S, d, r, rC>& other, const EntityType& entity,
                          Constraints::Dirichlet<IntersectionType, RangeFieldType>& ret) const
   {
diff --git a/dune/gdt/spaces/continuouslagrange/fem.hh b/dune/gdt/spaces/continuouslagrange/fem.hh
index a64d0dc9f35642f138cb22a019a61db06f97c277..beec2e74f524cf7330e3b25c8f2b3c0df74f7106 100644
--- a/dune/gdt/spaces/continuouslagrange/fem.hh
+++ b/dune/gdt/spaces/continuouslagrange/fem.hh
@@ -15,7 +15,7 @@ namespace Spaces {
 namespace ContinuousLagrange {
 
 
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class DUNE_DEPRECATED_MSG("Use CG::FemBased instead (21.11.2014)!") FemBased
     : public CG::FemBased<GridPartImp, polynomialOrder, RangeFieldImp, rangeDim, rangeDimCols>
 {
diff --git a/dune/gdt/spaces/continuouslagrange/pdelab.hh b/dune/gdt/spaces/continuouslagrange/pdelab.hh
index 5fc32a54cf28b7c6f965687381100ea49715f46d..882fd6c9511f7fb7f2cada17e2c8824d7f2ab501 100644
--- a/dune/gdt/spaces/continuouslagrange/pdelab.hh
+++ b/dune/gdt/spaces/continuouslagrange/pdelab.hh
@@ -15,7 +15,7 @@ namespace Spaces {
 namespace ContinuousLagrange {
 
 
-template <class GridPartImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridPartImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class DUNE_DEPRECATED_MSG("Use CG::FemBased instead (21.11.2014)!") PdelabBased
     : public CG::PdelabBased<GridPartImp, polynomialOrder, RangeFieldImp, rangeDim, rangeDimCols>
 {
diff --git a/dune/gdt/spaces/dg.hh b/dune/gdt/spaces/dg.hh
index 0e5594f888558b3d990fc5d0bb281f350f604236..c3d852174c438a9f440442097cd0886a457ddc43 100644
--- a/dune/gdt/spaces/dg.hh
+++ b/dune/gdt/spaces/dg.hh
@@ -29,7 +29,7 @@ namespace Spaces {
 
 
 template <class GridType, Stuff::Grid::ChooseLayer layer_type, ChooseSpaceBackend backend_type, int polOrder,
-          class RangeFieldType, int dimRange, int dimRangeCols = 1>
+          class RangeFieldType, size_t dimRange, size_t dimRangeCols = 1>
 class DGProvider
 {
   static const Stuff::Grid::ChoosePartView part_view_type = ChooseGridPartView<backend_type>::type;
@@ -38,19 +38,19 @@ public:
   typedef typename Stuff::Grid::Layer<GridType, layer_type, part_view_type>::Type GridLayerType;
 
 private:
-  template <class G, int p, class R, int r, int rC, GDT::ChooseSpaceBackend b>
+  template <class G, int p, class R, size_t r, size_t rC, GDT::ChooseSpaceBackend b>
   struct SpaceChooser
   {
     static_assert(AlwaysFalse<G>::value, "No space available for this backend!");
   };
 
-  template <class G, int p, class R, int r, int rC>
+  template <class G, int p, class R, size_t r, size_t rC>
   struct SpaceChooser<G, p, R, r, rC, GDT::ChooseSpaceBackend::fem>
   {
     typedef GDT::Spaces::DG::FemBased<GridLayerType, p, R, r> Type;
   };
 
-  template <class G, int p, class R, int r, int rC>
+  template <class G, int p, class R, size_t r, size_t rC>
   struct SpaceChooser<G, p, R, r, rC, GDT::ChooseSpaceBackend::pdelab>
   {
     typedef GDT::Spaces::DG::PdelabBased<GridLayerType, p, R, r> Type;
@@ -69,13 +69,13 @@ public:
     return Type(grid_layer);
   }
 
-  static Type create(GridProviderType& grid_provider, const int level = 0)
+  static Type create(GridProviderType& grid_provider, const size_t level = 0)
   {
     return Type(grid_provider.template layer<layer_type, part_view_type>(level));
   }
 
 #if HAVE_DUNE_GRID_MULTISCALE
-  static Type create(const MsGridProviderType& grid_provider, const int level_or_subdomain = 0)
+  static Type create(const MsGridProviderType& grid_provider, const size_t level_or_subdomain = 0)
   {
     return Type(grid_provider.template layer<layer_type, part_view_type>(level_or_subdomain));
   }
@@ -84,7 +84,7 @@ public:
 
 
 template <class GridType, Stuff::Grid::ChooseLayer layer_type, ChooseSpaceBackend backend_type, int polOrder,
-          class RangeFieldType, int dimRange, int dimRangeCols = 1>
+          class RangeFieldType, size_t dimRange, size_t dimRangeCols = 1>
 class DUNE_DEPRECATED_MSG("Use DGProvider instead (02.02.2015)!") DiscontinuousLagrangeProvider
     : public DGProvider<GridType, layer_type, backend_type, polOrder, RangeFieldType, dimRange, dimRangeCols>
 {
diff --git a/dune/gdt/spaces/fv/default.hh b/dune/gdt/spaces/fv/default.hh
index 8a984226d7d34fe4500ef062e842392a91d819a0..a5260593010376b892263f5ce8334eb4a5adfe93 100644
--- a/dune/gdt/spaces/fv/default.hh
+++ b/dune/gdt/spaces/fv/default.hh
@@ -22,7 +22,7 @@ namespace FV {
 
 
 // forward, to be used in the traits and to allow for specialization
-template <class GridViewImp, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridViewImp, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class Default
 {
   static_assert(Dune::AlwaysFalse<GridViewImp>::value, "Untested for these dimensions!");
@@ -32,7 +32,7 @@ class Default
 /**
  *  \brief Traits class for Spaces::CG::FemBased.
  */
-template <class GridViewImp, class RangeFieldImp, int rangeDim, int rangeDimCols>
+template <class GridViewImp, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols>
 class DefaultTraits
 {
 public:
@@ -53,7 +53,7 @@ public:
 }; // class DefaultTraits
 
 
-template <class GridViewImp, class RangeFieldImp, int rangeDim>
+template <class GridViewImp, class RangeFieldImp, size_t rangeDim>
 class Default<GridViewImp, RangeFieldImp, rangeDim, 1>
     : public SpaceInterface<DefaultTraits<GridViewImp, RangeFieldImp, rangeDim, 1>, GridViewImp::dimension, rangeDim, 1>
 {
@@ -64,10 +64,10 @@ class Default<GridViewImp, RangeFieldImp, rangeDim, 1>
 public:
   typedef DefaultTraits<GridViewImp, RangeFieldImp, rangeDim, 1> Traits;
 
-  static const int polOrder              = Traits::polOrder;
-  static const unsigned int dimDomain    = BaseType::dimDomain;
-  static const unsigned int dimRange     = BaseType::dimRange;
-  static const unsigned int dimRangeCols = BaseType::dimRangeCols;
+  static const int polOrder        = Traits::polOrder;
+  static const size_t dimDomain    = BaseType::dimDomain;
+  static const size_t dimRange     = BaseType::dimRange;
+  static const size_t dimRangeCols = BaseType::dimRangeCols;
 
   typedef typename Traits::GridViewType GridViewType;
   typedef typename Traits::RangeFieldType RangeFieldType;
@@ -123,7 +123,7 @@ public:
 
   using BaseType::compute_pattern;
 
-  template <class G, class S, int d, int r, int rC>
+  template <class G, class S, size_t d, size_t r, size_t rC>
   PatternType compute_pattern(const GridView<G>& local_grid_view, const SpaceInterface<S, d, r, rC>& ansatz_space) const
   {
     return BaseType::compute_face_and_volume_pattern(local_grid_view, ansatz_space);
diff --git a/dune/gdt/spaces/interface.hh b/dune/gdt/spaces/interface.hh
index dffa83910ebd4b4b8cbf7186752475f2920f90b5..9f1675032922501b3ccebdd3f009e4d186a2f292 100644
--- a/dune/gdt/spaces/interface.hh
+++ b/dune/gdt/spaces/interface.hh
@@ -8,6 +8,8 @@
 
 #include <memory>
 
+#include <boost/numeric/conversion/cast.hpp>
+
 #include <dune/common/dynvector.hh>
 #include <dune/common/fvector.hh>
 
@@ -62,7 +64,7 @@ struct ChooseGridPartView<ChooseSpaceBackend::fem>
 };
 
 
-template <class Traits, int domainDim, int rangeDim, int rangeDimCols = 1>
+template <class Traits, size_t domainDim, size_t rangeDim, size_t rangeDimCols = 1>
 class SpaceInterface : public Stuff::CRTPInterface<SpaceInterface<Traits, domainDim, rangeDim, rangeDimCols>, Traits>
 {
 public:
@@ -74,9 +76,9 @@ public:
   typedef typename Traits::CommunicatorType CommunicatorType;
   typedef typename Traits::GridViewType GridViewType;
   typedef typename Traits::RangeFieldType RangeFieldType;
-  static const unsigned int dimDomain    = domainDim;
-  static const unsigned int dimRange     = rangeDim;
-  static const unsigned int dimRangeCols = rangeDimCols;
+  static const size_t dimDomain    = domainDim;
+  static const size_t dimRange     = rangeDim;
+  static const size_t dimRangeCols = rangeDimCols;
 
 private:
   static_assert(dimDomain > 0, "dimDomain has to be positive");
@@ -140,14 +142,14 @@ public:
    *
    *  \note  Any derived class has to implement this method, even if it does not support any kind of constraints!
    *         In that case just provide exactly the following method:\code
-template< class S, int d, int r, int rC, class ConstraintsType >
+template< class S, size_t d, size_t r, size_t rC, class ConstraintsType >
 void local_constraints(const SpaceInterface< S, d, r, rC > >&, const EntityType&, ConstraintsType&) const
 {
   static_assert(AlwaysFalse< S >::value, "Not implemented for these constraints!");
 }
 \endcode
    */
-  template <class S, int d, int r, int rC, class C>
+  template <class S, size_t d, size_t r, size_t rC, class C>
   void local_constraints(const SpaceInterface<S, d, r, rC>& ansatz_space, const EntityType& entity,
                          Spaces::ConstraintsInterface<C, RangeFieldType>& ret) const
   {
@@ -165,7 +167,7 @@ void local_constraints(const SpaceInterface< S, d, r, rC > >&, const EntityType&
    *  \note   This method can be implemented in a derived class by a forward to one of the methods provided by this
    * class, namely compute_volume_pattern(), compute_face_pattern() or compute_face_and_volume_pattern().
    */
-  template <class G, class S, int d, int r, int rC>
+  template <class G, class S, size_t d, size_t r, size_t rC>
   PatternType compute_pattern(const GridView<G>& local_grid_view, const SpaceInterface<S, d, r, rC>& ansatz_space) const
   {
     CHECK_CRTP(this->as_imp().compute_pattern(local_grid_view, ansatz_space.as_imp()));
@@ -183,7 +185,7 @@ void local_constraints(const SpaceInterface< S, d, r, rC > >&, const EntityType&
     return compute_pattern(*this);
   }
 
-  template <class S, int d, int r, int rC>
+  template <class S, size_t d, size_t r, size_t rC>
   PatternType compute_pattern(const SpaceInterface<S, d, r, rC>& ansatz_space) const
   {
     return compute_pattern(grid_view(), ansatz_space);
@@ -200,7 +202,7 @@ void local_constraints(const SpaceInterface< S, d, r, rC > >&, const EntityType&
     return compute_volume_pattern(*this);
   }
 
-  template <class S, int d, int r, int rC>
+  template <class S, size_t d, size_t r, size_t rC>
   PatternType compute_volume_pattern(const SpaceInterface<S, d, r, rC>& ansatz_space) const
   {
     return compute_volume_pattern(grid_view(), ansatz_space);
@@ -216,7 +218,7 @@ void local_constraints(const SpaceInterface< S, d, r, rC > >&, const EntityType&
    *  \brief  computes a sparsity pattern, where this space is the test space (rows/outer) and the other space is the
    *          ansatz space (cols/inner)
    */
-  template <class G, class S, int d, int r, int rC>
+  template <class G, class S, size_t d, size_t r, size_t rC>
   PatternType compute_volume_pattern(const GridView<G>& local_grid_view,
                                      const SpaceInterface<S, d, r, rC>& ansatz_space) const
   {
@@ -250,7 +252,7 @@ void local_constraints(const SpaceInterface< S, d, r, rC > >&, const EntityType&
     return compute_face_and_volume_pattern(local_grid_view, *this);
   }
 
-  template <class S, int d, int r, int rC>
+  template <class S, size_t d, size_t r, size_t rC>
   PatternType compute_face_and_volume_pattern(const SpaceInterface<S, d, r, rC>& ansatz_space) const
   {
     return compute_face_and_volume_pattern(grid_view(), ansatz_space);
@@ -260,7 +262,7 @@ void local_constraints(const SpaceInterface< S, d, r, rC > >&, const EntityType&
    *  \brief  computes a DG sparsity pattern, where this space is the test space (rows/outer) and the other space is the
    *          ansatz space (cols/inner)
    */
-  template <class G, class S, int d, int r, int rC>
+  template <class G, class S, size_t d, size_t r, size_t rC>
   PatternType compute_face_and_volume_pattern(const GridView<G>& local_grid_view,
                                               const SpaceInterface<S, d, r, rC>& ansatz_space) const
   {
@@ -315,13 +317,13 @@ void local_constraints(const SpaceInterface< S, d, r, rC > >&, const EntityType&
     return compute_face_pattern(local_grid_view, *this);
   }
 
-  template <class S, int d, int r, int rC>
+  template <class S, size_t d, size_t r, size_t rC>
   PatternType compute_face_pattern(const SpaceInterface<S, d, r, rC>& ansatz_space) const
   {
     return compute_face_pattern(grid_view(), ansatz_space);
   }
 
-  template <class G, class S, int d, int r, int rC>
+  template <class G, class S, size_t d, size_t r, size_t rC>
   PatternType compute_face_pattern(const /*GridView<*/ G /*>*/& local_grid_view,
                                    const SpaceInterface<S, d, r, rC>& ansatz_space) const
   {
@@ -394,11 +396,11 @@ private:
       const auto baseFunctionSet = space_.base_function_set(entity);
       if (component < 0)
         DUNE_THROW(Dune::RangeError, "component must not be negative (is " << component << ")!");
-      if (component < int(baseFunctionSet.size())) {
+      if (component < boost::numeric_cast<int>(baseFunctionSet.size())) {
         baseFunctionSet.evaluate(xx, values_);
-        assert(component < int(values_.size()) && "This should not happen!");
+        assert(component < boost::numeric_cast<int>(values_.size()) && "This should not happen!");
         return values_[index_][component];
-      } else if (component < int(space_.mapper().maxNumDofs()))
+      } else if (component < boost::numeric_cast<int>(space_.mapper().maxNumDofs()))
         return 0.0;
       else
         DUNE_THROW(Dune::RangeError,
@@ -441,14 +443,14 @@ public:
 }; // class SpaceInterface
 
 
-template <class Traits, int d, int r, int rC, int codim = 0>
+template <class Traits, size_t d, size_t r, size_t rC, size_t codim = 0>
 typename Traits::GridViewType::template Codim<codim>::Iterator
 begin(const Dune::GDT::SpaceInterface<Traits, d, r, rC>& space)
 {
   return space.grid_view().template begin<codim>();
 }
 
-template <class Traits, int d, int r, int rC, int codim = 0>
+template <class Traits, size_t d, size_t r, size_t rC, size_t codim = 0>
 typename Traits::GridViewType::template Codim<codim>::Iterator
 end(const Dune::GDT::SpaceInterface<Traits, d, r, rC>& space)
 {
diff --git a/dune/gdt/spaces/rt/interface.hh b/dune/gdt/spaces/rt/interface.hh
index 9ad62c1e4a600210af1bca19e32cbae2aef1f766..72dd0ea4659bc7b10a61b15d562f532be4c3b828 100644
--- a/dune/gdt/spaces/rt/interface.hh
+++ b/dune/gdt/spaces/rt/interface.hh
@@ -6,6 +6,8 @@
 #ifndef DUNE_GDT_SPACES_RT_INTERFACE_HH
 #define DUNE_GDT_SPACES_RT_INTERFACE_HH
 
+#include <boost/numeric/conversion/cast.hpp>
+
 #include <dune/stuff/common/timedlogging.hh>
 
 #include <dune/gdt/spaces/interface.hh>
@@ -15,7 +17,7 @@ namespace GDT {
 namespace Spaces {
 
 
-template <class ImpTraits, int domainDim, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class ImpTraits, size_t domainDim, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class RTInterface : public SpaceInterface<ImpTraits, domainDim, rangeDim, rangeDimCols>
 {
   typedef SpaceInterface<ImpTraits, domainDim, rangeDim, rangeDimCols> BaseType;
@@ -56,7 +58,7 @@ public:
     static_assert(dimDomain == 2, "Not implemented!");
     static_assert(polOrder == 0, "Not implemented!");
     // prepare
-    const size_t num_intersections = entity.template count<1>();
+    const auto num_intersections = boost::numeric_cast<size_t>(entity.template count<1>());
     std::vector<size_t> local_DoF_index_of_vertex(num_intersections, std::numeric_limits<size_t>::infinity());
     std::vector<size_t> local_DoF_index_of_intersection(num_intersections, std::numeric_limits<size_t>::infinity());
     typedef typename BaseFunctionSetType::DomainType DomainType;
@@ -73,13 +75,13 @@ public:
     // find the basis function index that corresponds to each vertex of the entity
     // (find the basis function that evaluates to zero at the vertex, and nonzero at the other ones)
     // therefore we walk the vertices
-    assert(int(num_intersections) == entity.template count<dimDomain>());
+    assert(num_intersections == boost::numeric_cast<size_t>(entity.template count<dimDomain>()));
     for (size_t vv = 0; vv < num_intersections; ++vv) {
-      const auto vertex_ptr = entity.template subEntity<dimDomain>(int(vv));
+      const auto vertex_ptr = entity.template subEntity<dimDomain>(boost::numeric_cast<int>(vv));
       const auto& vertex    = *vertex_ptr;
       // get the vertex coordinates
       vertices[vv]              = vertex.geometry().center();
-      const auto& vertex_entity = reference_element.position(int(vv), dimDomain);
+      const auto& vertex_entity = reference_element.position(boost::numeric_cast<int>(vv), dimDomain);
       // evalaute the basis
       basis.evaluate(vertex_entity, basis_values);
       // and find the basis that evaluates zero here
@@ -118,7 +120,7 @@ public:
       assert(local_DoF_index_of_intersection[local_intersection_index] == std::numeric_limits<size_t>::infinity());
       // walk the corners of the intersection
       for (size_t cc = 0; cc < num_intersections; ++cc) {
-        corner = intersection_geometry.corner(int(cc));
+        corner = intersection_geometry.corner(boost::numeric_cast<int>(cc));
         // check which vertices lie on the intersection
         for (size_t vv = 0; vv < num_intersections; ++vv)
           if (Stuff::Common::FloatCmp::eq(vertices[vv], corner))
@@ -155,7 +157,7 @@ public:
 
   using BaseType::compute_pattern;
 
-  template <class G, class S, int d, int r, int rC>
+  template <class G, class S, size_t d, size_t r, size_t rC>
   PatternType compute_pattern(const GridView<G>& local_grid_view, const SpaceInterface<S, d, r, rC>& ansatz_space) const
   {
     DSC::TimedLogger().get("gdt.spaces.rt.pdelab.compute_pattern").warn() << "Returning largest possible pattern!"
@@ -165,7 +167,7 @@ public:
 
   using BaseType::local_constraints;
 
-  template <class S, int d, int r, int rC, class C, class R>
+  template <class S, size_t d, size_t r, size_t rC, class C, class R>
   void local_constraints(const SpaceInterface<S, d, r, rC>& /*ansatz_space*/, const EntityType& /*entity*/,
                          Spaces::ConstraintsInterface<C, R>& /*ret*/) const
   {
diff --git a/dune/gdt/spaces/rt/pdelab.hh b/dune/gdt/spaces/rt/pdelab.hh
index 26edb80bc1b849675ed90c1c1ddbd18ad2fd0edd..f63e27e59e710385909a559a31466a75f5d54864 100644
--- a/dune/gdt/spaces/rt/pdelab.hh
+++ b/dune/gdt/spaces/rt/pdelab.hh
@@ -41,7 +41,7 @@ namespace RT {
 
 
 // forward, to be used in the traits and to allow for specialization
-template <class GridViewImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridViewImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class PdelabBased
 {
   static_assert(AlwaysFalse<GridViewImp>::value, "Untested for these dimensions or polynomial order!");
@@ -51,7 +51,7 @@ class PdelabBased
 namespace internal {
 
 
-template <class GridViewImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols>
+template <class GridViewImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols>
 class PdelabBasedTraits
 {
 public:
@@ -64,7 +64,7 @@ public:
 
 private:
   typedef typename GridViewType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridViewType::dimension;
+  static const size_t dimDomain = GridViewType::dimension;
 
 public:
   typedef RangeFieldImp RangeFieldType;
@@ -115,7 +115,7 @@ private:
 } // namespace internal
 
 
-template <class GridViewImp, class RangeFieldImp, int rangeDim>
+template <class GridViewImp, class RangeFieldImp, size_t rangeDim>
 class PdelabBased<GridViewImp, 0, RangeFieldImp, rangeDim, 1>
     : public Spaces::RTInterface<internal::PdelabBasedTraits<GridViewImp, 0, RangeFieldImp, rangeDim, 1>,
                                  GridViewImp::dimension, RangeFieldImp, rangeDim, 1>
@@ -219,7 +219,7 @@ public:
   } // ... communicator(...)
 
 private:
-  template <class S, int d, int p, bool simplicial>
+  template <class S, size_t d, int p, bool simplicial>
   struct Helper
   {
     static_assert(AlwaysFalse<S>::value, "Not available for this combination!");
@@ -255,7 +255,7 @@ private:
 #else // HAVE_DUNE_PDELAB
 
 
-template <class GridViewImp, int polynomialOrder, class RangeFieldImp, int rangeDim, int rangeDimCols = 1>
+template <class GridViewImp, int polynomialOrder, class RangeFieldImp, size_t rangeDim, size_t rangeDimCols = 1>
 class PdelabBased
 {
   static_assert(AlwaysFalse<GridViewImp>::value, "You are missing dune-pdelab!");
diff --git a/test/elliptic-cg-discretization.hh b/test/elliptic-cg-discretization.hh
index ba9929ee3aa08ce4f377de55ad1ad58314c8a95e..9098e315059d3f4573748dddb91b1f5b4e394e3a 100644
--- a/test/elliptic-cg-discretization.hh
+++ b/test/elliptic-cg-discretization.hh
@@ -48,10 +48,10 @@ template <class GridViewType, int polynomialOrder,
 class Discretization
 {
 public:
-  static const unsigned int dimDomain = GridViewType::dimension;
+  static const size_t dimDomain = GridViewType::dimension;
   typedef typename GridViewType::ctype DomainFieldType;
 
-  static const unsigned int dimRange = 1;
+  static const size_t dimRange = 1;
   typedef double RangeFieldType;
 
   static const unsigned int polOrder = polynomialOrder;
@@ -199,9 +199,9 @@ protected:
   typedef typename TestCase::EntityType EntityType;
 
   typedef typename TestCase::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = TestCase::dimDomain;
+  static const size_t dimDomain = TestCase::dimDomain;
   typedef typename TestCase::RangeFieldType RangeFieldType;
-  static const unsigned int dimRange = TestCase::dimRange;
+  static const size_t dimRange = TestCase::dimRange;
 
   typedef Discretization<GridViewType, polOrder> DiscretizationType;
   typedef typename DiscretizationType::VectorType VectorType;
diff --git a/test/elliptic-sipdg-discretization.hh b/test/elliptic-sipdg-discretization.hh
index 7a19dd9f781ed4e88e0d6d6e465203eaa17b7ba4..854210c2b75e759f9590173706cb107ed5739b71 100644
--- a/test/elliptic-sipdg-discretization.hh
+++ b/test/elliptic-sipdg-discretization.hh
@@ -55,10 +55,10 @@ template <class GridPartType, int polynomialOrder,
 class Discretization
 {
 public:
-  static const unsigned int dimDomain = GridPartType::dimension;
+  static const size_t dimDomain = GridPartType::dimension;
   typedef typename GridPartType::ctype DomainFieldType;
 
-  static const unsigned int dimRange = 1;
+  static const size_t dimRange = 1;
   typedef double RangeFieldType;
 
   static const unsigned int polOrder = polynomialOrder;
@@ -215,9 +215,9 @@ class EocStudy : public Dune::Stuff::Common::ConvergenceStudy
   typedef typename TestCase::EntityType EntityType;
 
   typedef typename TestCase::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = TestCase::dimDomain;
+  static const size_t dimDomain = TestCase::dimDomain;
   typedef typename TestCase::RangeFieldType RangeFieldType;
-  static const unsigned int dimRange = TestCase::dimRange;
+  static const size_t dimRange = TestCase::dimRange;
 
   typedef Discretization<GridPartType, polOrder> DiscretizationType;
   typedef typename DiscretizationType::VectorType VectorType;
diff --git a/test/elliptic-swipdg-discretization.hh b/test/elliptic-swipdg-discretization.hh
index e74a9bc512939aafd0a8db8a3911bec39ad4cb6d..db8ede055144466b6238c9fa29b44120192dab73 100644
--- a/test/elliptic-swipdg-discretization.hh
+++ b/test/elliptic-swipdg-discretization.hh
@@ -12,6 +12,8 @@
 #include <cmath>
 #include <limits>
 
+#include <boost/numeric/conversion/cast.hpp>
+
 #include <dune/common/timer.hh>
 
 #include <dune/geometry/quadraturerules.hh>
@@ -70,10 +72,10 @@ template <class GridPartType, int polynomialOrder,
 class Discretization
 {
 public:
-  static const unsigned int dimDomain = GridPartType::dimension;
+  static const size_t dimDomain = GridPartType::dimension;
   typedef typename GridPartType::ctype DomainFieldType;
 
-  static const unsigned int dimRange = 1;
+  static const size_t dimRange = 1;
   typedef double RangeFieldType;
 
   static const unsigned int polOrder = polynomialOrder;
@@ -231,9 +233,9 @@ protected:
   typedef typename TestCase::GridViewType GridViewType;
 
   typedef typename TestCase::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = TestCase::dimDomain;
+  static const size_t dimDomain = TestCase::dimDomain;
   typedef typename TestCase::RangeFieldType RangeFieldType;
-  static const unsigned int dimRange = TestCase::dimRange;
+  static const size_t dimRange = TestCase::dimRange;
 
   typedef Discretization<GridPartType, polOrder> DiscretizationType;
 
@@ -559,9 +561,9 @@ class EstimatorStudy : public EocStudy<TestCase, 1>
   typedef typename BaseType::EntityType EntityType;
 
   typedef typename BaseType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = BaseType::dimDomain;
+  static const size_t dimDomain = BaseType::dimDomain;
   typedef typename BaseType::RangeFieldType RangeFieldType;
-  static const unsigned int dimRange = BaseType::dimRange;
+  static const size_t dimRange = BaseType::dimRange;
 
   typedef typename BaseType::DiscretizationType DiscretizationType;
   typedef typename DiscretizationType::VectorType VectorType;
@@ -1235,7 +1237,7 @@ private:
         if (intersection.boundary() && !intersection.neighbor()) {
           const auto& intersection_geometry = intersection.geometry();
           for (size_t local_intersection_corner_id = 0;
-               int(local_intersection_corner_id) < intersection_geometry.corners();
+               local_intersection_corner_id < boost::numeric_cast< size_t >(intersection_geometry.corners());
                ++local_intersection_corner_id) {
             const auto global_intersection_corner = intersection_geometry.corner(local_intersection_corner_id);
             // now, we need to find the entity's vertex this intersection's corner point equals to, so we
diff --git a/test/elliptic-testcases.hh b/test/elliptic-testcases.hh
index 0eb6963da159b250e0c1ac6d3283cca3e616797a..1490dbcfb2afa197f1b6b1136867b048a19c43e6 100644
--- a/test/elliptic-testcases.hh
+++ b/test/elliptic-testcases.hh
@@ -53,7 +53,7 @@ public:
   typedef typename Dune::GDT::SpaceTools::LevelGridPartView<GridType>::Type GridViewType;
   typedef typename GridType::template Codim<0>::Entity EntityType;
   typedef typename GridType::ctype DomainFieldType;
-  static const unsigned int dimDomain = GridType::dimension;
+  static const size_t dimDomain = GridType::dimension;
 
   Base(std::unique_ptr<GridProviderType>&& grd_prv, size_t num_refinements)
     : grid_provider_(std::move(grd_prv))
@@ -145,9 +145,9 @@ public:
   typedef typename BaseType::GridViewType GridViewType;
   typedef typename BaseType::EntityType EntityType;
   typedef typename BaseType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = BaseType::dimDomain;
+  static const size_t dimDomain = BaseType::dimDomain;
   typedef double RangeFieldType;
-  static const unsigned int dimRange = 1;
+  static const size_t dimRange = 1;
   typedef DSG::BoundaryInfos::AllDirichlet<typename GridViewType::Intersection> BoundaryInfoType;
 
   typedef Dune::Stuff::Functions::Constant<EntityType, DomainFieldType, dimDomain, RangeFieldType, dimRange>
@@ -251,9 +251,9 @@ public:
   typedef typename BaseType::GridViewType GridViewType;
   typedef typename BaseType::EntityType EntityType;
   typedef typename BaseType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = BaseType::dimDomain;
+  static const size_t dimDomain = BaseType::dimDomain;
   typedef double RangeFieldType;
-  static const unsigned int dimRange = 1;
+  static const size_t dimRange = 1;
   typedef DSG::BoundaryInfos::AllDirichlet<typename GridViewType::Intersection> BoundaryInfoType;
 
   typedef Dune::Stuff::Functions::Constant<EntityType, DomainFieldType, dimDomain, RangeFieldType, dimRange>
@@ -368,9 +368,9 @@ public:
   typedef typename BaseType::GridViewType GridViewType;
   typedef typename BaseType::EntityType EntityType;
   typedef typename BaseType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = BaseType::dimDomain;
+  static const size_t dimDomain = BaseType::dimDomain;
   typedef double RangeFieldType;
-  static const unsigned int dimRange = 1;
+  static const size_t dimRange = 1;
   typedef DSG::BoundaryInfos::AllDirichlet<typename GridViewType::Intersection> BoundaryInfoType;
 
   typedef Dune::Stuff::Functions::Constant<EntityType, DomainFieldType, dimDomain, RangeFieldType, dimRange>
@@ -506,9 +506,9 @@ public:
   typedef typename BaseType::GridViewType GridViewType;
   typedef typename BaseType::EntityType EntityType;
   typedef typename BaseType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = BaseType::dimDomain;
+  static const size_t dimDomain = BaseType::dimDomain;
   typedef double RangeFieldType;
-  static const unsigned int dimRange = 1;
+  static const size_t dimRange = 1;
   typedef DSG::BoundaryInfos::NormalBased<typename GridViewType::Intersection> BoundaryInfoType;
 
   typedef Dune::Stuff::Functions::Constant<EntityType, DomainFieldType, dimDomain, RangeFieldType, dimRange>
@@ -618,9 +618,9 @@ public:
   typedef typename BaseType::GridViewType GridViewType;
   typedef typename BaseType::EntityType EntityType;
   typedef typename BaseType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = BaseType::dimDomain;
+  static const size_t dimDomain = BaseType::dimDomain;
   typedef double RangeFieldType;
-  static const unsigned int dimRange = 1;
+  static const size_t dimRange = 1;
   typedef DSG::BoundaryInfos::AllDirichlet<typename GridViewType::Intersection> BoundaryInfoType;
 
   typedef Dune::Stuff::Functions::Constant<EntityType, DomainFieldType, dimDomain, RangeFieldType, dimRange>
diff --git a/test/operators_darcy.hh b/test/operators_darcy.hh
index ad755e7a1b95fa69d3a5e763caf892cf59700f2f..5ed0625f4247c0f5a087307bb851b371b09c68d3 100644
--- a/test/operators_darcy.hh
+++ b/test/operators_darcy.hh
@@ -37,7 +37,7 @@ struct DarcyOperator : public ::testing::Test
   typedef Dune::Stuff::Grid::Providers::Cube<GridType> GridProviderType;
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename GridViewType::ctype DomainFieldType;
-  static const unsigned int dimDomain = SourceSpaceType::dimDomain;
+  static const size_t dimDomain = SourceSpaceType::dimDomain;
   typedef double RangeFieldType;
 
   typedef typename Dune::Stuff::LA::Container<RangeFieldType>::VectorType VectorType;
diff --git a/test/operators_elliptic_swipdg.cc b/test/operators_elliptic_swipdg.cc
index 4985f517d4bbf73a899466d2d13568a24d1124d4..4ea3bbd5b61b5832c722f0aabc25711153113584 100644
--- a/test/operators_elliptic_swipdg.cc
+++ b/test/operators_elliptic_swipdg.cc
@@ -24,13 +24,13 @@ using namespace Dune::GDT;
 
 TEST(EllipticSWIPDGOperator, is_affinely_decomposable)
 {
-  static const unsigned int d = 2;
+  static const size_t d = 2;
   typedef SGrid<d, d> GridType;
   typedef GridType::template Codim<0>::Entity E;
   typedef GridType::ctype D;
   typedef double R;
-  static const unsigned int r = 1;
-  auto grid_provider          = Stuff::Grid::Providers::Cube<GridType>::create();
+  static const size_t r = 1;
+  auto grid_provider    = Stuff::Grid::Providers::Cube<GridType>::create();
   typedef Spaces::
       DiscontinuousLagrangeProvider<GridType, Stuff::Grid::ChooseLayer::leaf, ChooseSpaceBackend::fem, 1, R, r>
           SpaceProvider;
diff --git a/test/operators_oswaldinterpolation.hh b/test/operators_oswaldinterpolation.hh
index c5f9b1f5a70d3e3b5f21e08c9a1c5a5ce465a718..c31198c1cb62c5903f6d11b4d389319a3f8af779 100644
--- a/test/operators_oswaldinterpolation.hh
+++ b/test/operators_oswaldinterpolation.hh
@@ -25,7 +25,7 @@ struct Oswald_Interpolation_Operator : public ::testing::Test
   typedef typename SpaceType::GridViewType GridViewType;
   typedef typename GridViewType::Grid GridType;
   typedef Dune::Stuff::Grid::Providers::Cube<GridType> GridProviderType;
-  static const unsigned int dimDomain = SpaceType::dimDomain;
+  static const size_t dimDomain = SpaceType::dimDomain;
 
   /**
    * \note This is not a test for correct results yet!
diff --git a/test/operators_products_prolong.hh b/test/operators_products_prolong.hh
index 6dd68a9a23469c121f8f190fdaf16061a1efa040..ce7a4cfdbba334f1c7b6642a70f3822323b62cce 100644
--- a/test/operators_products_prolong.hh
+++ b/test/operators_products_prolong.hh
@@ -30,10 +30,10 @@ struct ProlongationOperatorBase
   typedef Dune::Stuff::Grid::Providers::Cube<GridType> GridProviderType;
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename FineSpaceType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = FineSpaceType::dimDomain;
+  static const size_t dimDomain = FineSpaceType::dimDomain;
   typedef Dune::FieldVector<DomainFieldType, dimDomain> DomainType;
   typedef typename FineSpaceType::RangeFieldType RangeFieldType;
-  static const unsigned int dimRange = FineSpaceType::dimRange;
+  static const size_t dimRange = FineSpaceType::dimRange;
   typedef Dune::Stuff::Functions::Expression<EntityType, DomainFieldType, dimDomain, RangeFieldType, dimRange>
       FunctionType;
   typedef typename Dune::Stuff::LA::Container<RangeFieldType>::VectorType VectorType;
diff --git a/test/operators_projections.hh b/test/operators_projections.hh
index d5b5fb7d020fb57610322491c48085077e641701..11f9ad25df16ffb23eb375fb846e646feda2fa28 100644
--- a/test/operators_projections.hh
+++ b/test/operators_projections.hh
@@ -30,10 +30,10 @@ struct ProjectionOperatorBase : ::testing::Test
   typedef Dune::Stuff::Grid::Providers::Cube<GridType> GridProviderType;
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename SpaceType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = SpaceType::dimDomain;
+  static const size_t dimDomain = SpaceType::dimDomain;
   typedef typename SpaceType::RangeFieldType RangeFieldType;
-  static const unsigned int dimRange = SpaceType::dimRange;
   static const unsigned int polOrder = SpaceType::polOrder;
+  static const size_t dimRange       = SpaceType::dimRange;
   typedef Dune::Stuff::Functions::Expression<EntityType, DomainFieldType, dimDomain, RangeFieldType, dimRange>
       FunctionType;
   typedef typename Stuff::LA::Container<RangeFieldType, Stuff::LA::default_backend>::VectorType VectorType;
diff --git a/test/products.hh b/test/products.hh
index ea884ea706fc32ca99555918ce578514a21da1c4..b63b95eddcdd4f65a8b7399a081d8ca743f2701a 100644
--- a/test/products.hh
+++ b/test/products.hh
@@ -22,9 +22,9 @@ struct ProductBase
   typedef Dune::Stuff::Grid::Providers::Cube<GridType> GridProviderType;
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename SpaceType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = SpaceType::dimDomain;
+  static const size_t dimDomain = SpaceType::dimDomain;
   typedef typename SpaceType::RangeFieldType RangeFieldType;
-  static const unsigned int dimRange = SpaceType::dimRange;
+  static const size_t dimRange = SpaceType::dimRange;
   typedef Dune::Stuff::Functions::Expression<EntityType, DomainFieldType, dimDomain, RangeFieldType, dimRange>
       FunctionType;
   typedef typename Dune::GDT::ProductInterface<typename ProductType::Traits> InterfaceType;
@@ -66,9 +66,9 @@ struct LocalizableProductBase
   typedef Dune::Stuff::Grid::Providers::Cube<GridType> GridProviderType;
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename SpaceType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = SpaceType::dimDomain;
+  static const size_t dimDomain = SpaceType::dimDomain;
   typedef typename SpaceType::RangeFieldType RangeFieldType;
-  static const unsigned int dimRange = SpaceType::dimRange;
+  static const size_t dimRange = SpaceType::dimRange;
   typedef typename Dune::GDT::LocalizableProductInterface<typename ProductType::Traits> InterfaceType;
 
   static void fulfills_interface(ProductType& product)
@@ -119,9 +119,9 @@ struct AssemblableProductBase
   typedef Dune::Stuff::Grid::Providers::Cube<GridType> GridProviderType;
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename SpaceType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = SpaceType::dimDomain;
+  static const size_t dimDomain = SpaceType::dimDomain;
   typedef typename SpaceType::RangeFieldType RangeFieldType;
-  static const unsigned int dimRange = SpaceType::dimRange;
+  static const size_t dimRange = SpaceType::dimRange;
   typedef typename Dune::GDT::AssemblableProductInterface<typename ProductType::Traits> InterfaceType;
 
   static void fulfills_interface(ProductType& product)
diff --git a/test/products_boundaryl2.hh b/test/products_boundaryl2.hh
index 17e5df8f436171213486d0120b8d57c040184ff2..e5a0e147c43f6965a117f40ee3945eb73bf31476 100644
--- a/test/products_boundaryl2.hh
+++ b/test/products_boundaryl2.hh
@@ -28,13 +28,13 @@ struct BoundaryL2ProductBase : public ::testing::Test
   typedef Dune::Stuff::Grid::Providers::Cube<GridType> GridProviderType;
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename SpaceType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = SpaceType::dimDomain;
+  static const size_t dimDomain = SpaceType::dimDomain;
   typedef typename SpaceType::RangeFieldType RangeFieldType;
-  static const unsigned int dimRange = SpaceType::dimRange;
+  static const size_t dimRange = SpaceType::dimRange;
   typedef Stuff::Functions::Expression<EntityType, DomainFieldType, dimDomain, RangeFieldType, dimRange> FunctionType;
 
   BoundaryL2ProductBase()
-    : grid_(GridProviderType(0.0, 1.0, boost::numeric_cast<unsigned int>(dsc_grid_elements())).grid_ptr())
+    : grid_(GridProviderType(0.0, 1.0, boost::numeric_cast<size_t>(dsc_grid_elements())).grid_ptr())
     , space_(Dune::GDT::SpaceTools::GridPartView<SpaceType>::create_leaf(*grid_))
     , one_("x", "1.0", 0)
   {
diff --git a/test/products_elliptic.hh b/test/products_elliptic.hh
index 93e1595b5cc78fa151000c7b93161465ad56c631..4a1303788b615314a0e09619b10f65ba47373981 100644
--- a/test/products_elliptic.hh
+++ b/test/products_elliptic.hh
@@ -30,15 +30,15 @@ struct EllipticProductBase : public ::testing::Test
   typedef Dune::Stuff::Grid::Providers::Cube<GridType> GridProviderType;
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename SpaceType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = SpaceType::dimDomain;
+  static const size_t dimDomain = SpaceType::dimDomain;
   typedef typename SpaceType::RangeFieldType RangeFieldType;
-  static const unsigned int dimRange = SpaceType::dimRange;
+  static const size_t dimRange = SpaceType::dimRange;
   typedef Stuff::Functions::Expression<EntityType, DomainFieldType, dimDomain, RangeFieldType, dimRange> FunctionType;
   typedef Stuff::Functions::Constant<EntityType, DomainFieldType, dimDomain, RangeFieldType, dimDomain, dimDomain>
       TensorType;
 
   EllipticProductBase()
-    : grid_(GridProviderType(0.0, 1.0, boost::numeric_cast<unsigned int>(dsc_grid_elements())).grid_ptr())
+    : grid_(GridProviderType(0.0, 1.0, boost::numeric_cast<size_t>(dsc_grid_elements())).grid_ptr())
     , leaf_view_(Dune::GDT::SpaceTools::GridPartView<SpaceType>::create_leaf(*grid_))
     , space_(leaf_view_)
     , one_("x", "1.0", 1, "constant gradient", {{"1.0", "1.0", "1.0"}})
diff --git a/test/products_swipdgpenalty.hh b/test/products_swipdgpenalty.hh
index 6a2663b33167496a21e99932ac78077a60f836a6..16c8097432464b1bc648c7f9f2d185df4f2dc175 100644
--- a/test/products_swipdgpenalty.hh
+++ b/test/products_swipdgpenalty.hh
@@ -31,9 +31,9 @@ struct SwipdgPenaltyProductBase : public ::testing::Test
   typedef Dune::Stuff::Grid::Providers::Cube<GridType> GridProviderType;
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename SpaceType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = SpaceType::dimDomain;
+  static const size_t dimDomain = SpaceType::dimDomain;
   typedef typename SpaceType::RangeFieldType RangeFieldType;
-  static const unsigned int dimRange = SpaceType::dimRange;
+  static const size_t dimRange = SpaceType::dimRange;
   typedef Stuff::Functions::Expression<EntityType, DomainFieldType, dimDomain, RangeFieldType, dimRange> ScalarType;
   typedef Stuff::Functions::Constant<EntityType, DomainFieldType, dimDomain, RangeFieldType, dimDomain, dimDomain>
       TensorType;
diff --git a/test/products_weightedl2.hh b/test/products_weightedl2.hh
index 836c2f02921cb076a70f697a9f23e571a8332afd..676e70d758d2c9ae3dac2f22f5e8e521757862d6 100644
--- a/test/products_weightedl2.hh
+++ b/test/products_weightedl2.hh
@@ -28,13 +28,13 @@ struct WeightedL2ProductBase : public ::testing::Test
   typedef Dune::Stuff::Grid::Providers::Cube<GridType> GridProviderType;
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
   typedef typename SpaceType::DomainFieldType DomainFieldType;
-  static const unsigned int dimDomain = SpaceType::dimDomain;
+  static const size_t dimDomain = SpaceType::dimDomain;
   typedef typename SpaceType::RangeFieldType RangeFieldType;
-  static const unsigned int dimRange = SpaceType::dimRange;
+  static const size_t dimRange = SpaceType::dimRange;
   typedef Stuff::Functions::Expression<EntityType, DomainFieldType, dimDomain, RangeFieldType, dimRange> FunctionType;
 
   WeightedL2ProductBase()
-    : grid_(GridProviderType(0.0, 1.0, boost::numeric_cast<unsigned int>(dsc_grid_elements())).grid_ptr())
+    : grid_(GridProviderType(0.0, 1.0, boost::numeric_cast<size_t>(dsc_grid_elements())).grid_ptr())
     , space_(Dune::GDT::SpaceTools::GridPartView<SpaceType>::create_leaf(*grid_))
     , one_("x", "1.0", 0)
   {
diff --git a/test/spaces.hh b/test/spaces.hh
index c666673601cf3b3f0c361f423ed4fbdaf9e522f1..0959d989c5e435a71673a5cb130d8f4fe075e43d 100644
--- a/test/spaces.hh
+++ b/test/spaces.hh
@@ -9,6 +9,8 @@
 
 #include <type_traits>
 
+#include <boost/numeric/conversion/cast.hpp>
+
 #include <dune/stuff/grid/provider/cube.hh>
 #include <dune/stuff/test/gtest/gtest.h>
 
@@ -84,11 +86,11 @@ public:
     typedef typename SpaceType::Traits Traits;
     typedef typename SpaceType::GridViewType D_GridViewType;
     typedef typename SpaceType::DomainFieldType D_DomainFieldType;
-    static const unsigned int d_dimDomain = SpaceType::dimDomain;
+    static const size_t d_dimDomain = SpaceType::dimDomain;
     typedef typename SpaceType::RangeFieldType D_RangeFieldType;
-    static const unsigned int d_dimRange     = SpaceType::dimRange;
-    static const unsigned int d_dimRangeCols = SpaceType::dimRangeCols;
-    static const int d_polOrder              = SpaceType::polOrder;
+    static const int d_polOrder        = SpaceType::polOrder;
+    static const size_t d_dimRange     = SpaceType::dimRange;
+    static const size_t d_dimRangeCols = SpaceType::dimRangeCols;
     typedef typename SpaceType::BackendType D_BackendType;
     typedef typename SpaceType::MapperType D_MapperType;
     typedef typename SpaceType::BaseFunctionSetType D_BaseFunctionSetType;
@@ -103,11 +105,11 @@ public:
     typedef typename InterfaceType::derived_type derived_type;
     typedef typename InterfaceType::GridViewType I_GridViewType;
     typedef typename InterfaceType::DomainFieldType I_DomainFieldType;
-    static const unsigned int i_dimDomain = InterfaceType::dimDomain;
+    static const size_t i_dimDomain = InterfaceType::dimDomain;
     typedef typename InterfaceType::RangeFieldType I_RangeFieldType;
-    static const unsigned int i_dimRange     = InterfaceType::dimRange;
-    static const unsigned int i_dimRangeCols = InterfaceType::dimRangeCols;
-    static const int i_polOrder              = InterfaceType::polOrder;
+    static const int i_polOrder        = InterfaceType::polOrder;
+    static const size_t i_dimRange     = InterfaceType::dimRange;
+    static const size_t i_dimRangeCols = InterfaceType::dimRangeCols;
     typedef typename InterfaceType::BackendType I_BackendType;
     typedef typename InterfaceType::MapperType I_MapperType;
     typedef typename InterfaceType::BaseFunctionSetType I_BaseFunctionSetType;
@@ -315,11 +317,11 @@ public:
     typedef typename BaseFunctionSetType::BackendType D_BackendType;
     typedef typename BaseFunctionSetType::EntityType D_EntityType;
     typedef typename BaseFunctionSetType::DomainFieldType D_DomainFieldType;
-    static const unsigned int d_dimDomain = BaseFunctionSetType::dimDomain;
+    static const size_t d_dimDomain = BaseFunctionSetType::dimDomain;
     typedef typename BaseFunctionSetType::DomainType D_DomainType;
     typedef typename BaseFunctionSetType::RangeFieldType D_RangeFieldType;
-    static const unsigned int d_dimRange     = BaseFunctionSetType::dimRange;
-    static const unsigned int d_dimRangeCols = BaseFunctionSetType::dimRangeCols;
+    static const size_t d_dimRange     = BaseFunctionSetType::dimRange;
+    static const size_t d_dimRangeCols = BaseFunctionSetType::dimRangeCols;
     typedef typename BaseFunctionSetType::RangeType D_RangeType;
     typedef typename BaseFunctionSetType::JacobianRangeType D_JacobianRangeType;
     static_assert(std::is_same<D_EntityType, typename SpaceType::EntityType>::value, "Types do not match!");
@@ -340,11 +342,11 @@ public:
     typedef typename InterfaceType::BackendType I_BackendType;
     typedef typename InterfaceType::EntityType I_EntityType;
     typedef typename InterfaceType::DomainFieldType I_DomainFieldType;
-    static const unsigned int i_dimDomain = InterfaceType::dimDomain;
+    static const size_t i_dimDomain = InterfaceType::dimDomain;
     typedef typename InterfaceType::DomainType I_DomainType;
     typedef typename InterfaceType::RangeFieldType I_RangeFieldType;
-    static const unsigned int i_dimRange     = InterfaceType::dimRange;
-    static const unsigned int i_dimRangeCols = InterfaceType::dimRangeCols;
+    static const size_t i_dimRange     = InterfaceType::dimRange;
+    static const size_t i_dimRangeCols = InterfaceType::dimRangeCols;
     typedef typename InterfaceType::RangeType I_RangeType;
     typedef typename InterfaceType::JacobianRangeType I_JacobianRangeType;
     static_assert(std::is_same<derived_type, BaseFunctionSetType>::value, "Types do not match!");
@@ -368,10 +370,11 @@ public:
       const D_BackendType& d_backend          = d_base_function_set.backend();
       size_t d_order                          = d_base_function_set.order();
 #if DUNE_GDT_TEST_SPACES_RT_CHECK
-      EXPECT_GE(d_order, int(SpaceType::polOrder)); // <- normaly we would expect equality here, but the raviart
+      EXPECT_GE(d_order, boost::numeric_cast<size_t>(SpaceType::polOrder)); // <- normaly we would expect equality here,
+// but the raviart
 //    thomas space of order 0 reports order 1 here
 #else
-      EXPECT_EQ(d_order, int(SpaceType::polOrder));
+      EXPECT_EQ(d_order, boost::numeric_cast<size_t>(SpaceType::polOrder));
 #endif
       //   the size has already been checked in fulfills_interface() above
       // * as the interface
diff --git a/test/spaces_cg.hh b/test/spaces_cg.hh
index 708fe0de064779728413d0438cef44a47669fbfb..fa676830214967ce40ad623af599d3c19c35bff1 100644
--- a/test/spaces_cg.hh
+++ b/test/spaces_cg.hh
@@ -6,12 +6,13 @@
 #ifndef DUNE_GDT_TEST_SPACES_CG
 #define DUNE_GDT_TEST_SPACES_CG
 
-#include "spaces.hh"
+#include <boost/numeric/conversion/cast.hpp>
 
 #include <dune/common/typetraits.hh>
 #include <dune/common/fvector.hh>
 
 #include <dune/stuff/common/print.hh>
+#include <dune/stuff/common/ranges.hh>
 #include <dune/stuff/grid/walker.hh>
 
 #include <dune/gdt/spaces/cg/fem.hh>
@@ -19,6 +20,8 @@
 #include <dune/gdt/mapper/interface.hh>
 #include <dune/gdt/basefunctionset/interface.hh>
 
+#include "spaces.hh"
+
 
 template <class SpaceType>
 class CG_Space : public SpaceBase<SpaceType>
@@ -32,7 +35,7 @@ struct P1Q1_CG_Space : public SpaceBase<SpaceType>
   typedef typename SpaceType::GridViewType GridViewType;
   typedef typename GridViewType::Grid GridType;
   typedef Dune::Stuff::Grid::Providers::Cube<GridType> GridProviderType;
-  static const unsigned int dimDomain = GridType::dimension;
+  static const size_t dimDomain = GridType::dimension;
   typedef typename GridType::ctype DomainFieldType;
   typedef Dune::FieldVector<DomainFieldType, dimDomain> DomainType;
 
@@ -44,7 +47,7 @@ struct P1Q1_CG_Space : public SpaceBase<SpaceType>
     return ret;
   }
 
-  template <class T, int d, class R, int r, int rC>
+  template <class T, size_t d, class R, size_t r, size_t rC>
   void matches_signature(const Dune::GDT::Spaces::CGInterface<T, d, R, r, rC>& /*space*/)
   {
     static_assert(std::is_same<typename SpaceType::Traits, T>::value, "");
@@ -82,7 +85,7 @@ struct P1Q1_CG_Space : public SpaceBase<SpaceType>
     const auto entity_end_it = this->space_.grid_view().template end<0>();
     for (auto entity_it = this->space_.grid_view().template begin<0>(); entity_it != entity_end_it; ++entity_it) {
       const auto& entity = *entity_it;
-      for (int cc = 0; cc < entity.template count<dimDomain>(); ++cc) {
+      for (auto cc : DSC::valueRange(entity.template count<dimDomain>())) {
         const auto vertex_ptr   = entity.template subEntity<dimDomain>(cc);
         const DomainType vertex = vertex_ptr->geometry().center();
         vertex_to_indices_map[convert_vector(vertex)] = std::set<size_t>();
@@ -90,16 +93,16 @@ struct P1Q1_CG_Space : public SpaceBase<SpaceType>
     }
 
     // walk the grid again to find all DoF ids
-    auto functor             = [&](const typename GridProviderType::EntityType& entity) {
-      const int num_vertices = entity.template count<dimDomain>();
+    auto functor                = [&](const typename GridProviderType::EntityType& entity) {
+      const size_t num_vertices = boost::numeric_cast<size_t>(entity.template count<dimDomain>());
       const auto basis = this->space_.base_function_set(entity);
-      EXPECT_EQ(basis.size(), size_t(num_vertices));
-      for (int cc = 0; cc < num_vertices; ++cc) {
-        const auto vertex_ptr   = entity.template subEntity<dimDomain>(cc);
+      EXPECT_EQ(basis.size(), num_vertices);
+      for (size_t cc = 0; cc < num_vertices; ++cc) {
+        const auto vertex_ptr   = entity.template subEntity<dimDomain>(boost::numeric_cast<int>(cc));
         const DomainType vertex = vertex_ptr->geometry().center();
         // find the local basis function which corresponds to this vertex
         const auto basis_values = basis.evaluate(entity.geometry().local(vertex));
-        EXPECT_EQ(basis_values.size(), size_t(num_vertices));
+        EXPECT_EQ(basis_values.size(), num_vertices);
         size_t ones            = 0;
         size_t zeros           = 0;
         size_t failures        = 0;
diff --git a/test/spaces_dg.hh b/test/spaces_dg.hh
index e42e3009b1f057c920a7a4735651f1e5b52a5fcb..2e9617542a8abcb7b61423e0e15c74a658f1b1bb 100644
--- a/test/spaces_dg.hh
+++ b/test/spaces_dg.hh
@@ -6,7 +6,10 @@
 #ifndef DUNE_GDT_SPACES_DG_COMMON_HH
 #define DUNE_GDT_SPACES_DG_COMMON_HH
 
+#include <boost/numeric/conversion/cast.hpp>
+
 #include <dune/stuff/common/print.hh>
+#include <dune/stuff/common/ranges.hh>
 
 #include "spaces.hh"
 
@@ -23,7 +26,7 @@ struct P1Q1_DG_Space : public SpaceBase<SpaceType>
   typedef typename SpaceType::GridViewType GridViewType;
   typedef typename GridViewType::Grid GridType;
   typedef Dune::Stuff::Grid::Providers::Cube<GridType> GridProviderType;
-  static const unsigned int dimDomain = GridType::dimension;
+  static const size_t dimDomain = GridType::dimension;
   typedef typename GridType::ctype DomainFieldType;
   typedef Dune::FieldVector<DomainFieldType, dimDomain> DomainType;
 
@@ -43,7 +46,7 @@ struct P1Q1_DG_Space : public SpaceBase<SpaceType>
     const auto entity_end_it = this->space_.grid_view().template end<0>();
     for (auto entity_it = this->space_.grid_view().template begin<0>(); entity_it != entity_end_it; ++entity_it) {
       const auto& entity = *entity_it;
-      for (int cc = 0; cc < entity.template count<dimDomain>(); ++cc) {
+      for (auto cc : DSC::valueRange(entity.template count<dimDomain>())) {
         const auto vertex_ptr   = entity.template subEntity<dimDomain>(cc);
         const DomainType vertex = vertex_ptr->geometry().center();
         vertex_to_indices_map[convert_vector(vertex)].first = std::set<size_t>();
@@ -52,16 +55,16 @@ struct P1Q1_DG_Space : public SpaceBase<SpaceType>
     }
     // walk the grid again to find all DoF ids
     for (auto entity_it = this->space_.grid_view().template begin<0>(); entity_it != entity_end_it; ++entity_it) {
-      const auto& entity     = *entity_it;
-      const int num_vertices = entity.template count<dimDomain>();
+      const auto& entity        = *entity_it;
+      const size_t num_vertices = boost::numeric_cast<size_t>(entity.template count<dimDomain>());
       const auto basis = this->space_.base_function_set(entity);
-      EXPECT_EQ(basis.size(), size_t(num_vertices));
-      for (int cc = 0; cc < num_vertices; ++cc) {
-        const auto vertex_ptr   = entity.template subEntity<dimDomain>(cc);
+      EXPECT_EQ(basis.size(), num_vertices);
+      for (size_t cc = 0; cc < num_vertices; ++cc) {
+        const auto vertex_ptr   = entity.template subEntity<dimDomain>(boost::numeric_cast<int>(cc));
         const DomainType vertex = vertex_ptr->geometry().center();
         // find the local basis function which corresponds to this vertex
         const auto basis_values = basis.evaluate(entity.geometry().local(vertex));
-        EXPECT_EQ(basis_values.size(), size_t(num_vertices));
+        EXPECT_EQ(basis_values.size(), num_vertices);
         size_t ones            = 0;
         size_t zeros           = 0;
         size_t failures        = 0;
diff --git a/test/spaces_rt.hh b/test/spaces_rt.hh
index 4e18e824be8fb286799da9e58fa8629494f9af53..da48b99e7a6c0ef0f0bfbbfb96955b7f8e5db671 100644
--- a/test/spaces_rt.hh
+++ b/test/spaces_rt.hh
@@ -18,7 +18,7 @@
 template <class SpaceType>
 class RT_Space : public SpaceBase<SpaceType>
 {
-  template <class T, int d, class R, int r, int rC>
+  template <class T, size_t d, class R, size_t r, size_t rC>
   void matches_signature(const Dune::GDT::Spaces::RTInterface<T, d, R, r, rC>& /*space*/)
   {
     static_assert(Dune::GDT::is_rt_space<SpaceType>::value, "");