diff --git a/dune/gfe/mixedriemanniantrsolver.cc b/dune/gfe/mixedriemanniantrsolver.cc
index 532a06a7fbcfbc25df78608260ba8e28c49bb8b7..15def31270de0bec83cdc35286bc26e4f320a14d 100644
--- a/dune/gfe/mixedriemanniantrsolver.cc
+++ b/dune/gfe/mixedriemanniantrsolver.cc
@@ -87,20 +87,20 @@ setup(const GridType& grid,
     baseSolver1->setTolerance(baseTolerance);
 #else
     // First create a Gauss-seidel base solver
-    TrustRegionGSStep<MatrixType00, CorrectionType0>* baseSolverStep0 = new TrustRegionGSStep<MatrixType00, CorrectionType0>;
-    TrustRegionGSStep<MatrixType11, CorrectionType1>* baseSolverStep1 = new TrustRegionGSStep<MatrixType11, CorrectionType1>;
+    auto baseSolverStep0 = std::make_shared< TrustRegionGSStep<MatrixType00, CorrectionType0> >();
+    auto baseSolverStep1 = std::make_shared< TrustRegionGSStep<MatrixType11, CorrectionType1> >();
 
     // Hack: the two-norm may not scale all that well, but it is fast!
-    TwoNorm<CorrectionType0>* baseNorm0 = new TwoNorm<CorrectionType0>;
-    TwoNorm<CorrectionType1>* baseNorm1 = new TwoNorm<CorrectionType1>;
+    auto baseNorm0 = std::make_shared< TwoNorm<CorrectionType0> >();
+    auto baseNorm1 = std::make_shared< TwoNorm<CorrectionType1> >();
 
-    ::LoopSolver<CorrectionType0>* baseSolver0 = new ::LoopSolver<CorrectionType0>(baseSolverStep0,
+    auto baseSolver0 = std::make_shared< ::LoopSolver<CorrectionType0> >(baseSolverStep0,
                                                                                    baseIterations,
                                                                                    baseTolerance,
                                                                                    baseNorm0,
                                                                                    Solver::QUIET);
 
-    ::LoopSolver<CorrectionType1>* baseSolver1 = new ::LoopSolver<CorrectionType1>(baseSolverStep1,
+    auto baseSolver1 = std::make_shared< ::LoopSolver<CorrectionType1> >(baseSolverStep1,
                                                                                    baseIterations,
                                                                                    baseTolerance,
                                                                                    baseNorm1,
diff --git a/dune/gfe/rotation.hh b/dune/gfe/rotation.hh
index 371ef40c1c233c43fc02107e7aecc56a2b02421a..8589fcc4730410ba1aa1068eaa72d6d7292836fc 100644
--- a/dune/gfe/rotation.hh
+++ b/dune/gfe/rotation.hh
@@ -208,7 +208,7 @@ public:
         : Quaternion<T>(0,0,0,1)
     {}
 
-    explicit Rotation<T,3>(const std::array<T,4>& c)
+    explicit Rotation(const std::array<T,4>& c)
     {
         for (int i=0; i<4; i++)
             (*this)[i] = c[i];
@@ -216,13 +216,13 @@ public:
         *this /= this->two_norm();
     }
 
-    explicit Rotation<T,3>(const Dune::FieldVector<T,4>& c)
+    explicit Rotation(const Dune::FieldVector<T,4>& c)
         : Quaternion<T>(c)
     {
         *this /= this->two_norm();
     }
 
-    Rotation<T,3>(Dune::FieldVector<T,3> axis, T angle)
+    Rotation(Dune::FieldVector<T,3> axis, T angle)
     {
         axis /= axis.two_norm();
         axis *= std::sin(angle/2);