diff --git a/dune/subgrid/test/common.hh b/dune/subgrid/test/common.hh
index 96c9545dfc9a408711fdbbe6565b5bd6113b8d2e..d41cf2543964cff029aa7d0f9a9ccc777ef693d7 100644
--- a/dune/subgrid/test/common.hh
+++ b/dune/subgrid/test/common.hh
@@ -233,9 +233,9 @@ size_t checkWithHostGrid(size_t host_prerefine=2, int sub_initlevel=-1, size_t s
     }
     catch (Dune::NotImplemented& e)
     {
-        std::cerr << e << std::endl;
-    } catch (Dune::Exception e) {
-        std::cerr << e <<std::endl;
+        std::cerr << e.what() << std::endl;
+    } catch (const Dune::Exception& e) {
+        std::cerr << e.what() <<std::endl;
         ret = 1;
     }
 
@@ -245,9 +245,9 @@ size_t checkWithHostGrid(size_t host_prerefine=2, int sub_initlevel=-1, size_t s
     }
     catch (Dune::NotImplemented& e)
     {
-        std::cerr << e << std::endl;
-    } catch (Dune::Exception e) {
-        std::cerr << e <<std::endl;
+        std::cerr << e.what() << std::endl;
+    } catch (const Dune::Exception& e) {
+        std::cerr << e.what() <<std::endl;
         ret = 1;
     }
     try {
@@ -255,9 +255,9 @@ size_t checkWithHostGrid(size_t host_prerefine=2, int sub_initlevel=-1, size_t s
         checkLeafIntersections(subgrid);
     } catch (Dune::NotImplemented& e)
     {
-        std::cerr << e << std::endl;
-    } catch (Dune::Exception e) {
-        std::cerr << e <<std::endl;
+        std::cerr << e.what() << std::endl;
+    } catch (const Dune::Exception& e) {
+        std::cerr << e.what() <<std::endl;
         ret = 1;
     }
 
@@ -285,9 +285,9 @@ size_t checkWithHostGrid(size_t host_prerefine=2, int sub_initlevel=-1, size_t s
     }
     catch (Dune::NotImplemented& e)
     {
-        std::cerr << e << std::endl;
-    } catch (Dune::Exception e) {
-        std::cerr << e <<std::endl;
+        std::cerr << e.what() << std::endl;
+    } catch (const Dune::Exception& e) {
+        std::cerr << e.what() <<std::endl;
         ret = 1;
     }
     try {
@@ -296,9 +296,9 @@ size_t checkWithHostGrid(size_t host_prerefine=2, int sub_initlevel=-1, size_t s
     }
     catch (Dune::NotImplemented& e)
     {
-        std::cerr << e << std::endl;
-    } catch (Dune::Exception e) {
-        std::cerr << e <<std::endl;
+        std::cerr << e.what() << std::endl;
+    } catch (const Dune::Exception& e) {
+        std::cerr << e.what() <<std::endl;
         ret = 1;
     }
      try {
@@ -307,9 +307,9 @@ size_t checkWithHostGrid(size_t host_prerefine=2, int sub_initlevel=-1, size_t s
     }
     catch (Dune::NotImplemented& e)
     {
-        std::cerr << e << std::endl;
-    } catch (Dune::Exception e) {
-        std::cerr << e <<std::endl;
+        std::cerr << e.what() << std::endl;
+    } catch (const Dune::Exception& e) {
+        std::cerr << e.what() <<std::endl;
         ret = 1;
     }
 
@@ -327,8 +327,8 @@ size_t checkWithHostGrid(size_t host_prerefine=2, int sub_initlevel=-1, size_t s
     catch (Dune::NotImplemented& e)
     {
         std::cerr << e << std::endl;
-    } catch (Dune::Exception e) {
-        std::cerr << e <<std::endl;
+    } catch (const Dune::Exception& e) {
+        std::cerr << e.what() <<std::endl;
         ret = 1;
     }
  /* // IntersectionIterator tests only make sense if coarse grid elements are fully covered by the subgrid
@@ -336,11 +336,11 @@ size_t checkWithHostGrid(size_t host_prerefine=2, int sub_initlevel=-1, size_t s
         std::cout << "Performing checkIntersectionIterator\n";
         checkIntersectionIterator(subgrid);
     }
-    catch (Dune::NotImplemented& e)
+    catch (const Dune::NotImplemented& e)
     {
-        std::cerr << e << std::endl;
-    } catch (Dune::Exception e) {
-        std::cerr << e <<std::endl;
+        std::cerr << e.what() << std::endl;
+    } catch (const Dune::Exception& e) {
+        std::cerr << e.what() <<std::endl;
         ret = 1;
     }
 */
@@ -350,9 +350,9 @@ size_t checkWithHostGrid(size_t host_prerefine=2, int sub_initlevel=-1, size_t s
     }
     catch (Dune::NotImplemented& e)
     {
-        std::cerr << e << std::endl;
-    } catch (Dune::Exception e) {
-        std::cerr << e <<std::endl;
+        std::cerr << e.what() << std::endl;
+    } catch (const Dune::Exception& e) {
+        std::cerr << e.what() <<std::endl;
         ret = 1;
     }
 
diff --git a/dune/subgrid/test/test-w-albertagrid2d.cc b/dune/subgrid/test/test-w-albertagrid2d.cc
index 80efa5c7040c138a2b2783381a0769ab46e2177b..ca55015613642648f09ea2445242b705d6357a47 100644
--- a/dune/subgrid/test/test-w-albertagrid2d.cc
+++ b/dune/subgrid/test/test-w-albertagrid2d.cc
@@ -23,7 +23,7 @@ int main(int argc, char* argv[]) try {
   std::cout << "Test for SubGrid with AlbertaGrid<2,2> " << (return_val==0 ? "passed." : "failed.") << std::endl;
   return return_val;
 
-} catch (Exception e) {
-  std::cout << e << std::endl;
+} catch (const Exception& e) {
+  std::cout << e.what() << std::endl;
   return 1;
 }
diff --git a/dune/subgrid/test/test-w-albertagrid3d.cc b/dune/subgrid/test/test-w-albertagrid3d.cc
index 8aa19a3874e0c649c3c0d02c029be83950cd9113..4def2001aed9485577ebaaa4b88893f143d344c2 100644
--- a/dune/subgrid/test/test-w-albertagrid3d.cc
+++ b/dune/subgrid/test/test-w-albertagrid3d.cc
@@ -23,7 +23,7 @@ int main(int argc, char* argv[]) try {
   std::cout << "Test for SubGrid with AlbertaGrid<3,3> " << (return_val==0 ? "passed." : "failed.") << std::endl;
   return return_val;
 
-} catch (Exception e) {
-  std::cout << e << std::endl;
+} catch (const Exception& e) {
+  std::cout << e.what() << std::endl;
   return 1;
 }
diff --git a/dune/subgrid/test/test-w-alugrid.cc b/dune/subgrid/test/test-w-alugrid.cc
index 6443e92c156cdaa2596f6cb03f543c58afd05269..5ebff2d99f70e8f4c1952cb98ab19feba20c5af3 100644
--- a/dune/subgrid/test/test-w-alugrid.cc
+++ b/dune/subgrid/test/test-w-alugrid.cc
@@ -66,7 +66,7 @@ int main(int argc, char* argv[]) try {
   std::cout << "Skip tests for ALUGrid, because it wasn't' found." << std::endl;
   return 0;
 #endif
-} catch (Dune::Exception e) {
-  std::cout << e << std::endl;
+} catch (const Dune::Exception& e) {
+  std::cout << e.what() << std::endl;
   return 1;
 }
diff --git a/dune/subgrid/test/test-w-onedgrid.cc b/dune/subgrid/test/test-w-onedgrid.cc
index cc1b956f24c858ae78fd4eeadd5b7d903825af27..424c079bcaa11c578bdc71995dcf3c15e1b5ce42 100644
--- a/dune/subgrid/test/test-w-onedgrid.cc
+++ b/dune/subgrid/test/test-w-onedgrid.cc
@@ -38,7 +38,7 @@ int main (int argc, char *argv[]) try
     try {
         gridcheck(subGrid);
         checkIntersectionIterator(subGrid);
-    } catch(Dune::NotImplemented e) {
+    } catch(const Dune::NotImplemented& e) {
         std::cout<<e<<std::endl;
     }
 
@@ -62,8 +62,8 @@ int main (int argc, char *argv[]) try
     try{
         gridcheck(subGrid);
         checkIntersectionIterator(subGrid);
-    } catch(Dune::NotImplemented e) {
-        std::cout<<e<<std::endl;
+    } catch(const Dune::NotImplemented& e) {
+        std::cout << e.what() << std::endl;
     }
     return 0;
 }
@@ -71,7 +71,7 @@ int main (int argc, char *argv[]) try
 // //////////////////////////////////
 //   Error handler
 // /////////////////////////////////
-catch (Exception e) {
-    std::cout << e << std::endl;
+catch (const Exception& e) {
+    std::cout << e.what() << std::endl;
     return 1;
 }
diff --git a/dune/subgrid/test/test-w-ug.cc b/dune/subgrid/test/test-w-ug.cc
index 0de651d4dba61e47a6d98c87d7db2bd6245e5747..8cc02c64a824d34fbd7d1fb88b9f49a50d870ee4 100644
--- a/dune/subgrid/test/test-w-ug.cc
+++ b/dune/subgrid/test/test-w-ug.cc
@@ -27,7 +27,7 @@ int main (int argc, char *argv[]) try
 // //////////////////////////////////
 //   Error handler
 // /////////////////////////////////
-catch (Exception e) {
-    std::cout << e << std::endl;
+catch (const Exception& e) {
+    std::cout << e.what() << std::endl;
     return 1;
 }
diff --git a/dune/subgrid/test/test-w-yaspgrid.cc b/dune/subgrid/test/test-w-yaspgrid.cc
index f97ced48f5d5be430ebb45056b65acc7bb30ba35..850b8368d35f21b1dfca46c44642fc0e27a2e66f 100644
--- a/dune/subgrid/test/test-w-yaspgrid.cc
+++ b/dune/subgrid/test/test-w-yaspgrid.cc
@@ -60,8 +60,8 @@ size_t testDim()
         gridcheck(subGrid);
         checkIntersectionIterator(subGrid);
         checkLeafIntersections(subGrid);
-    } catch(Dune::NotImplemented e) {
-        std::cout<<e<<std::endl;
+    } catch(const Dune::NotImplemented& e) {
+        std::cout << e.what() << std::endl;
     }
 
     // refine subgrid
@@ -84,8 +84,8 @@ size_t testDim()
         gridcheck(subGrid);
         checkIntersectionIterator(subGrid);
         checkLeafIntersections(subGrid);
-    } catch(Dune::NotImplemented e) {
-        std::cout<<e<<std::endl;
+    } catch(const Dune::NotImplemented& e) {
+        std::cout << e.what() << std::endl;
     }
     return 0;
 }
@@ -102,8 +102,8 @@ int main (int argc, char *argv[]) try
 
     std::cout << "Test for SubGrid with YaspGrid " << (return_val==0 ? "passed." : "failed.") << std::endl;
     return return_val;
-} catch (Exception e) {
+} catch (const Exception& e) {
 
-    std::cout << e << std::endl;
+    std::cout << e.what() << std::endl;
     return 1;
  }