diff --git a/dune/istl/test/scalarproductstest.cc b/dune/istl/test/scalarproductstest.cc
index f46ce2a97a7d5e0600302d1516da7adc154e9862..7f08d0908acb71825ccf81e4c65136c64619f3e6 100644
--- a/dune/istl/test/scalarproductstest.cc
+++ b/dune/istl/test/scalarproductstest.cc
@@ -119,24 +119,27 @@ int main(int argc, char** argv)
   // Test the ParallelScalarProduct class
   {
     using Vector = BlockVector<FieldVector<double,BlockSize> >;
-    using ScalarProduct = ParallelScalarProduct<Vector, OwnerOverlapCopyCommunication<std::size_t,std::size_t> >;
-    OwnerOverlapCopyCommunication<std::size_t,std::size_t> communicator;
+    using Comm = OwnerOverlapCopyCommunication<std::size_t,std::size_t>;
+    using ScalarProduct = ParallelScalarProduct<Vector, Comm>;
+    auto communicator = std::make_shared<Comm>();
     ScalarProduct scalarProduct(communicator,SolverCategory::nonoverlapping);
     scalarProductTest<ScalarProduct, Vector>(scalarProduct,numBlocks);
   }
 
   {
     using Vector = BlockVector<float>;
-    using ScalarProduct = ParallelScalarProduct<Vector, OwnerOverlapCopyCommunication<std::size_t,std::size_t> >;
-    OwnerOverlapCopyCommunication<std::size_t,std::size_t> communicator;
+    using Comm = OwnerOverlapCopyCommunication<std::size_t,std::size_t>;
+    using ScalarProduct = ParallelScalarProduct<Vector, Comm>;
+    auto communicator = std::make_shared<Comm>();
     ScalarProduct scalarProduct(communicator,SolverCategory::nonoverlapping);
     scalarProductTest<ScalarProduct, Vector>(scalarProduct,numBlocks);
   }
 
   {
     using Vector = BlockVector<FieldVector<std::complex<double>, 1> >;
-    using ScalarProduct = ParallelScalarProduct<Vector, OwnerOverlapCopyCommunication<std::size_t,std::size_t> >;
-    OwnerOverlapCopyCommunication<std::size_t,std::size_t> communicator;
+    using Comm = OwnerOverlapCopyCommunication<std::size_t,std::size_t>;
+    using ScalarProduct = ParallelScalarProduct<Vector, Comm>;
+    Comm communicator; // test constructor taking a const reference to the communicator
     ScalarProduct scalarProduct(communicator,SolverCategory::nonoverlapping);
     scalarProductTest<ScalarProduct, Vector>(scalarProduct,numBlocks);
   }