diff --git a/dune/common/parallel/indicessyncer.hh b/dune/common/parallel/indicessyncer.hh
index 178464e8617c2dc08f3feedc4f1d68cc24304e70..7208149b117c1821745fdc4e3a6325e3f2f1f4e9 100644
--- a/dune/common/parallel/indicessyncer.hh
+++ b/dune/common/parallel/indicessyncer.hh
@@ -657,7 +657,11 @@ namespace Dune
     displacement[0] -= base;
     displacement[1] -= base;
 
+    #if MPI_2
+    MPI_Type_create_struct( 2, blocklength, displacement, type, &datatype_);
+    #else
     MPI_Type_struct( 2, blocklength, displacement, type, &datatype_);
+    #endif
     MPI_Type_commit(&datatype_);
   }
 
diff --git a/dune/common/parallel/plocalindex.hh b/dune/common/parallel/plocalindex.hh
index e371545d81d56c0eddf95d1439f63d651d162a99..06a85ee5f95b953b09d5dcf77fad279b0bf65745 100644
--- a/dune/common/parallel/plocalindex.hh
+++ b/dune/common/parallel/plocalindex.hh
@@ -305,7 +305,11 @@ namespace Dune
       #endif
       for(int i=2; i >= 0; --i)
         disp[i] -= disp[0];
+      #if MPI_2
+      MPI_Type_create_struct(3, length, disp, types, &type);
+      #else
       MPI_Type_struct(3, length, disp, types, &type);
+      #endif
       MPI_Type_commit(&type);
     }
     return type;
diff --git a/dune/common/parallel/remoteindices.hh b/dune/common/parallel/remoteindices.hh
index fc0cd13c8c5656b43bba4a021bf9c173d41e605c..597cc524afe5b882bc88b7d8bfc044b3c2b2db9a 100644
--- a/dune/common/parallel/remoteindices.hh
+++ b/dune/common/parallel/remoteindices.hh
@@ -904,7 +904,11 @@ namespace Dune {
       #endif
       for(int i=3; i >= 0; --i)
         disp[i] -= disp[0];
+      #if MPI_2
+      MPI_Type_create_struct(4, length, disp, types, &type);
+      #else
       MPI_Type_struct(4, length, disp, types, &type);
+      #endif
       MPI_Type_commit(&type);
     }
     return type;