diff --git a/doc/refinement/refinement.tex b/doc/refinement/refinement.tex
index a45f4a158f0b4b1b45535c81a0529d29f9e6e163..9b83acd34fdc3982baa60a8e7c2de5366ad9165d 100644
--- a/doc/refinement/refinement.tex
+++ b/doc/refinement/refinement.tex
@@ -143,11 +143,11 @@ calculation with the same precision as the grid itself.
 template<NewGeometryType::BasicType geometryType,
          class CoordType,
          NewGeometryType::BasicType coerceTo,
-         int dimension>
+         int dimension_>
 class Refinement
 {
 public:
-  enum { dimension };
+  constexpr static int dimension = dimension_;
 
   template<int codimension>
   struct Codim {
diff --git a/dune/geometry/axisalignedcubegeometry.hh b/dune/geometry/axisalignedcubegeometry.hh
index 6758e85c2c640152aa07fb9f5e37b55ee639000a..d22d053b931e327a645cff2d56aba3868690111c 100644
--- a/dune/geometry/axisalignedcubegeometry.hh
+++ b/dune/geometry/axisalignedcubegeometry.hh
@@ -51,10 +51,10 @@ namespace Dune {
   public:
 
     /** \brief Dimension of the cube element */
-    enum {mydimension = dim};
+    constexpr static int mydimension = dim;
 
     /** \brief Dimension of the world space that the cube element is embedded in*/
-    enum {coorddimension = coorddim};
+    constexpr static int coorddimension = coorddim;
 
     /** \brief Type used for single coordinate coefficients */
     typedef CoordType ctype;
diff --git a/dune/geometry/quadraturerules.hh b/dune/geometry/quadraturerules.hh
index b329ecf1b27cb32f9a815d290acab30dd272035b..d1d7b1d96546c3f82f3812cb7b688171165231d1 100644
--- a/dune/geometry/quadraturerules.hh
+++ b/dune/geometry/quadraturerules.hh
@@ -42,7 +42,7 @@ namespace Dune {
   class QuadraturePoint {
   public:
     /** \brief Dimension of the integration domain */
-    enum { dimension = dim };
+    constexpr static int dimension = dim;
 
     /** \brief Number type used for coordinates and quadrature weights */
     typedef ct Field;
@@ -166,7 +166,7 @@ namespace Dune {
     QuadratureRule(GeometryType t, int order) : geometry_type(t), delivered_order(order) {}
   public:
     /** \brief The space dimension */
-    enum { d=dim };
+    constexpr static int d = dim;
 
     /** \brief The type used for coordinates */
     typedef ct CoordType;
@@ -337,7 +337,7 @@ namespace Dune {
   template<typename ctype>
   class QuadratureRuleFactory<ctype, 0> {
   private:
-    enum { dim = 0 };
+    constexpr static int dim = 0;
     friend class QuadratureRules<ctype, dim>;
     static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum)
     {
@@ -360,7 +360,7 @@ namespace Dune {
   template<typename ctype>
   class QuadratureRuleFactory<ctype, 1> {
   private:
-    enum { dim = 1 };
+    constexpr static int dim = 1;
     friend class QuadratureRules<ctype, dim>;
     static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum qt)
     {
@@ -417,7 +417,7 @@ namespace Dune {
   template<typename ctype>
   class QuadratureRuleFactory<ctype, 2> {
   private:
-    enum { dim = 2 };
+    constexpr static int dim = 2;
     friend class QuadratureRules<ctype, dim>;
     static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum qt)
     {
@@ -443,7 +443,7 @@ namespace Dune {
   template<typename ctype>
   class QuadratureRuleFactory<ctype, 3> {
   private:
-    enum { dim = 3 };
+    constexpr static int dim = 3;
     friend class QuadratureRules<ctype, dim>;
     static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum qt)
     {
diff --git a/dune/geometry/quadraturerules/jacobiNquadrature.hh b/dune/geometry/quadraturerules/jacobiNquadrature.hh
index bf3847e2b85f1ee5a0102d844b43064169ea8461..0db3697a071843265d17408e5399cf46d85ea72d 100644
--- a/dune/geometry/quadraturerules/jacobiNquadrature.hh
+++ b/dune/geometry/quadraturerules/jacobiNquadrature.hh
@@ -35,7 +35,7 @@ namespace Dune {
   {
   public:
     // compile time parameters
-    enum { dim=1 };
+    constexpr static int dim = 1;
 
   private:
 
diff --git a/dune/geometry/quadraturerules/pointquadrature.hh b/dune/geometry/quadraturerules/pointquadrature.hh
index 1956320f4f308b4a6f1094b89eff09bc47970cfc..1f02c89bdf4397098ebed11c46f87a8203c884d4 100644
--- a/dune/geometry/quadraturerules/pointquadrature.hh
+++ b/dune/geometry/quadraturerules/pointquadrature.hh
@@ -16,7 +16,7 @@ namespace Dune {
     public QuadratureRule<ct,0>
   {
     // compile time parameters
-    enum { dim=0 };
+    constexpr static int dim = 0;
 
     friend class QuadratureRuleFactory<ct,dim>;
 
diff --git a/dune/geometry/quadraturerules/prismquadrature.hh b/dune/geometry/quadraturerules/prismquadrature.hh
index 9a602fb8ab579f09e0fa954d1dfe3bfdb962a2a8..86a89aeb4636d045c1cef36c9268bcbe00a0c0f2 100644
--- a/dune/geometry/quadraturerules/prismquadrature.hh
+++ b/dune/geometry/quadraturerules/prismquadrature.hh
@@ -28,7 +28,7 @@ namespace Dune {
   {
   public:
     /** \brief The highest quadrature order available */
-    enum { highest_order = 2 };
+    constexpr static int highest_order = 2;
 
   private:
     friend class QuadratureRuleFactory<ct,3>;
@@ -59,8 +59,8 @@ namespace Dune {
   class PrismQuadraturePoints<3>
   {
   public:
-    enum { MAXP=6};
-    enum { highest_order=2 };
+    constexpr static int MAXP = 6;
+    constexpr static int highest_order = 2;
 
     //! initialize quadrature points on the interval for all orders
     PrismQuadraturePoints ()
diff --git a/dune/geometry/quadraturerules/simplexquadrature.hh b/dune/geometry/quadraturerules/simplexquadrature.hh
index 726d67745864821b8f8e1ee5fab4c8c31dca658c..71431f92544c0096b122c83fde185e4ce220ae64 100644
--- a/dune/geometry/quadraturerules/simplexquadrature.hh
+++ b/dune/geometry/quadraturerules/simplexquadrature.hh
@@ -28,7 +28,7 @@ namespace Dune {
   {
   public:
     /** \brief The highest quadrature order available */
-    enum { highest_order = 12 };
+    constexpr static int highest_order = 12;
   private:
     friend class QuadratureRuleFactory<ct,2>;
     SimplexQuadratureRule (int p);
@@ -43,7 +43,7 @@ namespace Dune {
   {
   public:
     /** \brief The highest quadrature order available */
-    enum { highest_order = 5 };
+    constexpr static int highest_order = 5;
   private:
     friend class QuadratureRuleFactory<ct,3>;
     SimplexQuadratureRule (int p);
@@ -72,8 +72,8 @@ namespace Dune {
   class SimplexQuadraturePoints<2>
   {
   public:
-    enum { MAXP=33};
-    enum { highest_order=12 };
+    constexpr static int MAXP = 33;
+    constexpr static int highest_order = 12;
 
     //! initialize quadrature points on the interval for all orders
     SimplexQuadraturePoints ()
@@ -835,8 +835,8 @@ namespace Dune {
   class SimplexQuadraturePoints<3>
   {
   public:
-    enum { MAXP=15};
-    enum { highest_order=5 };
+    constexpr static int MAXP = 15;
+    constexpr static int highest_order = 5;
 
     //! initialize quadrature points on the interval for all orders
     SimplexQuadraturePoints()
diff --git a/dune/geometry/quadraturerules/tensorproductquadrature.hh b/dune/geometry/quadraturerules/tensorproductquadrature.hh
index 3365f431e3146bc833f308fd342d4774924da0a4..939db673e22ae5c46251d98d21a8b56634011c7f 100644
--- a/dune/geometry/quadraturerules/tensorproductquadrature.hh
+++ b/dune/geometry/quadraturerules/tensorproductquadrature.hh
@@ -37,7 +37,7 @@ namespace Dune
     TensorProductQuadratureRule (unsigned int topologyId, unsigned int order, QuadratureType::Enum qt)
       : Base( GeometryType(topologyId, dim), order )
     {
-      enum { bitSize = sizeof(unsigned int)*8 };
+      constexpr static int bitSize = sizeof(unsigned int)*8;
       std::bitset<bitSize> baseId(topologyId);
       bool isPrism = baseId[dim-1];
       baseId.reset(dim-1);
@@ -155,7 +155,7 @@ namespace Dune
 
     static unsigned maxOrder(unsigned int topologyId, QuadratureType::Enum qt)
     {
-      enum { bitSize = sizeof(unsigned int)*8 };
+      constexpr static int bitSize = sizeof(unsigned int)*8;
       std::bitset<bitSize> baseId(topologyId);
       bool isPrism = baseId[dim-1];
       baseId.reset(dim-1);
diff --git a/dune/geometry/quadraturerules/writequad.mac b/dune/geometry/quadraturerules/writequad.mac
index 139ca2a15b72f393a56dcd1c50752f71f84405dd..058693e77e2d2458686aea93d1564c51ec6206ec 100644
--- a/dune/geometry/quadraturerules/writequad.mac
+++ b/dune/geometry/quadraturerules/writequad.mac
@@ -59,7 +59,7 @@ namespace Dune {
   {
   public:
     /** \brief The highest quadrature order available */
-    enum { highest_order=~d };
+    constexpr static int highest_order = ~d;
 
   private:
     friend class QuadratureRuleFactory<ct,1>;
diff --git a/dune/geometry/refinement.hh b/dune/geometry/refinement.hh
index 04e06d86d022b9deb8115c2d61f58159ce015e57..48cca666f7fd7fac2fea1673fb4dccddea549e83 100644
--- a/dune/geometry/refinement.hh
+++ b/dune/geometry/refinement.hh
@@ -61,11 +61,11 @@
  *
  * \code
  * template<unsigned topologyId, class CoordType,
- *          unsigned coerceToId, int dimension>
+ *          unsigned coerceToId, int dimension_>
  * class StaticRefinement
  * {
  * public:
- *   enum { dimension };
+ *   constexpr static int dimension = dimension_;
  *
  *   template<int codimension>
  *   struct codim
diff --git a/dune/geometry/refinement/hcube.cc b/dune/geometry/refinement/hcube.cc
index 67b3d4c66555e96f8d1093e5ff088df392077d83..ccb7ea5b7f651914f40243d3647cd903796f0800 100644
--- a/dune/geometry/refinement/hcube.cc
+++ b/dune/geometry/refinement/hcube.cc
@@ -72,7 +72,8 @@ namespace Dune
       class RefinementImp
       {
       public:
-        enum { dimension = dimension_ /*!< Know your own dimension \hideinitializer */ };
+        /** \brief Know your own dimension \hideinitializer */
+        constexpr static int dimension = dimension_;
         //- Know yourself
         typedef RefinementImp<dimension, CoordType> Refinement;
 
@@ -234,7 +235,7 @@ namespace Dune
       RefinementSubEntityIteratorSpecial<dimension, CoordType, 0>::
       vertexIndices() const
       {
-        enum { nIndices = (1 << dimension) };
+        constexpr static int nIndices = 1 << dimension;
 
         // cell index tuple
         std::array<unsigned int, dimension> e(asCommon().cellCoord());
diff --git a/dune/geometry/refinement/hcubetriangulation.cc b/dune/geometry/refinement/hcubetriangulation.cc
index f82b1110c6b07131e5d161e223b9c507be17b665..6b6efd363221b0777d712136bb8df0a7cdf6e475 100644
--- a/dune/geometry/refinement/hcubetriangulation.cc
+++ b/dune/geometry/refinement/hcubetriangulation.cc
@@ -64,7 +64,7 @@ namespace Dune
       class RefinementImp
       {
       public:
-        enum { dimension = dimension_ };
+        constexpr static int dimension = dimension_;
 
         typedef CoordType ctype;
 
@@ -171,7 +171,7 @@ namespace Dune
       protected:
         typedef typename Refinement::BackendRefinement BackendRefinement;
         typedef typename BackendRefinement::template Codim<dimension>::SubEntityIterator BackendIterator;
-        enum { nKuhnSimplices = factorial(int(dimension)) };
+        constexpr static int nKuhnSimplices = factorial(int(dimension));
 
         int nIntervals_;
 
@@ -256,7 +256,7 @@ namespace Dune
       protected:
         typedef typename Refinement::BackendRefinement BackendRefinement;
         typedef typename BackendRefinement::template Codim<0>::SubEntityIterator BackendIterator;
-        enum { nKuhnSimplices = factorial(dimension) };
+        constexpr static int nKuhnSimplices = factorial(dimension);
 
         int nIntervals_;
 
diff --git a/dune/geometry/refinement/prismtriangulation.cc b/dune/geometry/refinement/prismtriangulation.cc
index b0e6dab919f84526952e2c127fcf0b53d75c4afe..14427cbd7b5eb87c0552c230f0d1281b788e3a13 100644
--- a/dune/geometry/refinement/prismtriangulation.cc
+++ b/dune/geometry/refinement/prismtriangulation.cc
@@ -64,7 +64,7 @@ namespace Dune
       class RefinementImp
       {
       public:
-        enum {dimension = dimension_};
+        constexpr static int dimension = dimension_;
 
         typedef CoordType ctype;
 
@@ -171,7 +171,7 @@ namespace Dune
       protected:
         typedef typename Refinement::BackendRefinement BackendRefinement;
         typedef typename BackendRefinement::template Codim<dimension>::SubEntityIterator BackendIterator;
-        enum { nKuhnSimplices = 3 };
+        constexpr static int nKuhnSimplices = 3;
 
         int nIntervals_;
 
@@ -258,7 +258,7 @@ namespace Dune
       protected:
         typedef typename Refinement::BackendRefinement BackendRefinement;
         typedef typename BackendRefinement::template Codim<0>::SubEntityIterator BackendIterator;
-        enum { nKuhnSimplices = 3};
+        constexpr static int nKuhnSimplices = 3;
 
         int nIntervals_;
 
diff --git a/dune/geometry/refinement/pyramidtriangulation.cc b/dune/geometry/refinement/pyramidtriangulation.cc
index 138d4d4e7ea1f84702b0e61052751337e9e9c99d..9dccc5342fe4b29f8347594f88c1707875f901a3 100644
--- a/dune/geometry/refinement/pyramidtriangulation.cc
+++ b/dune/geometry/refinement/pyramidtriangulation.cc
@@ -65,7 +65,7 @@ namespace Dune
       class RefinementImp
       {
       public:
-        enum {dimension = dimension_};
+        constexpr static int dimension = dimension_;
 
         typedef CoordType ctype;
 
@@ -90,7 +90,7 @@ namespace Dune
 
         typedef Simplex::RefinementImp<dimension, CoordType> BackendRefinement;
 
-        enum { nKuhnSimplices = 2 };
+        constexpr static int nKuhnSimplices = 2;
       };
 
       template<int dimension, class CoordType>
@@ -175,7 +175,7 @@ namespace Dune
       protected:
         typedef typename Refinement::BackendRefinement BackendRefinement;
         typedef typename BackendRefinement::template Codim<dimension>::SubEntityIterator BackendIterator;
-        enum { nKuhnSimplices = 2 };
+        constexpr static int nKuhnSimplices = 2;
 
         int nIntervals_;
 
@@ -260,7 +260,7 @@ namespace Dune
       protected:
         typedef typename Refinement::BackendRefinement BackendRefinement;
         typedef typename BackendRefinement::template Codim<0>::SubEntityIterator BackendIterator;
-        enum { nKuhnSimplices = 2};
+        constexpr static int nKuhnSimplices = 2;
 
         int nIntervals_;
 
diff --git a/dune/geometry/refinement/simplex.cc b/dune/geometry/refinement/simplex.cc
index a0472cb635e4459622bfd8c905f329bf72e8b1ae..a5589f6458ec79e31accaee98c6d3af11aad4957 100644
--- a/dune/geometry/refinement/simplex.cc
+++ b/dune/geometry/refinement/simplex.cc
@@ -430,7 +430,7 @@ namespace Dune {
       class RefinementImp
       {
       public:
-        enum { dimension = dimension_ };
+        constexpr static int dimension = dimension_;
         typedef CoordType ctype;
 
         template<int codimension>
@@ -632,7 +632,7 @@ namespace Dune {
 
       protected:
         typedef FieldVector<int, dimension> Vertex;
-        enum { nKuhnIntervals = Dune::factorial(dimension) };
+        constexpr static int nKuhnIntervals = Dune::factorial(dimension);
 
         Vertex origin;
         int kuhnIndex;