diff --git a/dune/gfe/trustregionsolver.hh b/dune/gfe/trustregionsolver.hh
index 064052a7b933f591648407b499326cd5dfd3c438..3fc5c87138b0eb395c3ffb19fb3c4244d622dd82 100644
--- a/dune/gfe/trustregionsolver.hh
+++ b/dune/gfe/trustregionsolver.hh
@@ -20,11 +20,13 @@
 #include <dune/gfe/feassembler.hh>
 
 /** \brief Trust-region solver  */
-template <class GridType, class VectorType>
+template <class BasisType, class VectorType>
 class TrustRegionSolver
     : public IterativeSolver<VectorType,
                              Dune::BitSetVector<VectorType::value_type::dimension> >
 {
+    typedef typename BasisType::GridView::Grid GridType;
+
     const static int blocksize = VectorType::value_type::dimension;
 
     const static int gridDim = GridType::dimension;
@@ -37,14 +39,6 @@ class TrustRegionSolver
     typedef Dune::BlockVector<Dune::FieldVector<field_type, blocksize> >           CorrectionType;
     typedef VectorType                                                             SolutionType;
 
-#ifdef THIRD_ORDER
-    typedef P3NodalBasis<typename GridType::LeafGridView,double> BasisType;
-#elif defined SECOND_ORDER
-    typedef P2NodalBasis<typename GridType::LeafGridView,double> BasisType;
-#else
-    typedef P1NodalBasis<typename GridType::LeafGridView,double> BasisType;
-#endif
-
 public:
 
     TrustRegionSolver()