diff --git a/dune/istl/novlpschwarz.hh b/dune/istl/novlpschwarz.hh
index d5c5bc0e82222d3c6c84369ba31d3dba2ae8cfa0..722194c28fa3aad9ae368ceb80ef979f1c849582 100644
--- a/dune/istl/novlpschwarz.hh
+++ b/dune/istl/novlpschwarz.hh
@@ -250,7 +250,7 @@ namespace Dune {
 
   namespace Amg
   {
-    template<class T> class ConstructionTraits;
+    template<class T> struct ConstructionTraits;
   }
 
   /**
diff --git a/dune/istl/paamg/construction.hh b/dune/istl/paamg/construction.hh
index 7cd17a757ad42a93772c74c9fe0052d0a137b853..883896cea6c6a147c070d496d5a5e42be29651d2 100644
--- a/dune/istl/paamg/construction.hh
+++ b/dune/istl/paamg/construction.hh
@@ -34,9 +34,8 @@ namespace Dune
      * too expensive.
      */
     template<typename T>
-    class ConstructionTraits
+    struct ConstructionTraits
     {
-    public:
       /**
        * @brief A type holding all the arguments needed to call the
        * constructor.
@@ -56,9 +55,8 @@ namespace Dune
     };
 
     template<class T, class A>
-    class ConstructionTraits<BlockVector<T,A> >
+    struct ConstructionTraits<BlockVector<T,A> >
     {
-    public:
       typedef const int Arguments;
       static inline std::shared_ptr<BlockVector<T,A>> construct(Arguments& n)
       {
@@ -112,9 +110,8 @@ namespace Dune
   namespace Amg
   {
     template<class M, class X, class Y, class C>
-    class ConstructionTraits<OverlappingSchwarzOperator<M,X,Y,C> >
+    struct ConstructionTraits<OverlappingSchwarzOperator<M,X,Y,C> >
     {
-    public:
       typedef ParallelOperatorArgs<M,C> Arguments;
 
       static inline std::shared_ptr<OverlappingSchwarzOperator<M,X,Y,C>> construct(const Arguments& args)
@@ -125,9 +122,8 @@ namespace Dune
     };
 
     template<class M, class X, class Y, class C>
-    class ConstructionTraits<NonoverlappingSchwarzOperator<M,X,Y,C> >
+    struct ConstructionTraits<NonoverlappingSchwarzOperator<M,X,Y,C> >
     {
-    public:
       typedef ParallelOperatorArgs<M,C> Arguments;
 
       static inline std::shared_ptr<NonoverlappingSchwarzOperator<M,X,Y,C>> construct(const Arguments& args)
@@ -148,9 +144,8 @@ namespace Dune
     };
 
     template<class M, class X, class Y>
-    class ConstructionTraits<MatrixAdapter<M,X,Y> >
+    struct ConstructionTraits<MatrixAdapter<M,X,Y> >
     {
-    public:
       typedef const MatrixAdapterArgs<M,X,Y> Arguments;
 
       static inline std::shared_ptr<MatrixAdapter<M,X,Y>> construct(Arguments& args)
@@ -160,9 +155,8 @@ namespace Dune
     };
 
     template<>
-    class ConstructionTraits<SequentialInformation>
+    struct ConstructionTraits<SequentialInformation>
     {
-    public:
       typedef const SequentialCommunicationArgs Arguments;
       static inline std::shared_ptr<SequentialInformation> construct(Arguments& args)
       {
@@ -174,9 +168,8 @@ namespace Dune
 #if HAVE_MPI
 
     template<class T1, class T2>
-    class ConstructionTraits<OwnerOverlapCopyCommunication<T1,T2> >
+    struct ConstructionTraits<OwnerOverlapCopyCommunication<T1,T2> >
     {
-    public:
       typedef const OwnerOverlapCopyCommunicationArgs Arguments;
 
       static inline std::shared_ptr<OwnerOverlapCopyCommunication<T1,T2>> construct(Arguments& args)
diff --git a/dune/istl/paamg/smoother.hh b/dune/istl/paamg/smoother.hh
index edb7d12a18240f3ab873ac940d6035b2f53d74bc..779d29c682fc7c0dc9fe0d582d9154ba472b6d22 100644
--- a/dune/istl/paamg/smoother.hh
+++ b/dune/istl/paamg/smoother.hh
@@ -215,7 +215,7 @@ namespace Dune
 
 
     template<class T>
-    class ConstructionTraits;
+    struct ConstructionTraits;
 
     /**
      * @brief Policy for the construction of the SeqSSOR smoother
diff --git a/dune/istl/schwarz.hh b/dune/istl/schwarz.hh
index 0c7665850c244988a7df0abc6535c955a27f2a3f..397430497c5a6138d26f9acd2071e6a0773a5b8a 100644
--- a/dune/istl/schwarz.hh
+++ b/dune/istl/schwarz.hh
@@ -243,7 +243,7 @@ namespace Dune {
 
   namespace Amg
   {
-    template<class T> class ConstructionTraits;
+    template<class T> struct ConstructionTraits;
   }
 
   /**