diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc
index b1780ea9dd2d963ffbeb49be53d241800259d38d..40c3286ce3849dd5553eb81733990478e7bad8ed 100644
--- a/dune/gfe/riemanniantrsolver.cc
+++ b/dune/gfe/riemanniantrsolver.cc
@@ -280,6 +280,7 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve()
     }
 
     MaxNormTrustRegion<blocksize> trustRegion(globalMapper_->size(), initialTrustRegionRadius_);
+    trustRegion.set(initialTrustRegionRadius_, scaling_);
 
     std::vector<BoxConstraint<field_type,blocksize> > trustRegionObstacles;
 
diff --git a/dune/gfe/riemanniantrsolver.hh b/dune/gfe/riemanniantrsolver.hh
index ccc3976254d555f7b70d05b20d15f8a8a60605ae..501254bc93e35ad3c62cd43411b884b22eb9a6ba 100644
--- a/dune/gfe/riemanniantrsolver.hh
+++ b/dune/gfe/riemanniantrsolver.hh
@@ -59,7 +59,9 @@ public:
     RiemannianTrustRegionSolver()
         : IterativeSolver<std::vector<TargetSpace>, Dune::BitSetVector<blocksize> >(0,100,NumProc::FULL),
           hessianMatrix_(std::auto_ptr<MatrixType>(NULL)), h1SemiNorm_(NULL)
-    {}
+    {
+      std::fill(scaling_.begin(), scaling_.end(), 1.0);
+    }
 
     /** \brief Set up the solver using a monotone multigrid method as the inner solver */
     void setup(const GridType& grid,
@@ -78,6 +80,11 @@ public:
                double baseTolerance,
                bool instrumented);
 
+    void setScaling(const Dune::FieldVector<double,blocksize>& scaling)
+    {
+      scaling_(scaling);
+    }
+    
     void setIgnoreNodes(const Dune::BitSetVector<blocksize>& ignoreNodes)
     {
         ignoreNodes_ = &ignoreNodes;
@@ -111,6 +118,9 @@ protected:
     /** \brief The initial trust-region radius in the maximum-norm */
     double initialTrustRegionRadius_;
 
+    /** \brief Trust-region norm scaling */
+    Dune::FieldVector<double,blocksize> scaling_;
+
     /** \brief Maximum number of trust-region steps */
     int maxTrustRegionSteps_;