diff --git a/dune/gfe/riemannianpnsolver.cc b/dune/gfe/riemannianpnsolver.cc
index a10252d6bbc6e930d7361581eeeabaea106e84af..480c1ae9ee67c000183b4f15934ad96c97d1e408 100644
--- a/dune/gfe/riemannianpnsolver.cc
+++ b/dune/gfe/riemannianpnsolver.cc
@@ -253,7 +253,7 @@ void RiemannianProximalNewtonSolver<Basis,TargetSpace,Assembler>::solve()
             // Add the regularization - Identity Matrix for now
             for (std::size_t i=0; i<stiffnessMatrix.N(); i++)
               for(int j=0; j<blocksize; j++)
-                stiffnessMatrix[i][i][j][j] += regularization;
+                stiffnessMatrix[i][i][j][j] += regularization*scaling_[j];
 
             innerSolver_->setProblem(stiffnessMatrix,corr_global,rhs_global);
             innerSolver_->preprocess();
diff --git a/dune/gfe/riemannianpnsolver.hh b/dune/gfe/riemannianpnsolver.hh
index b3584fdf9b8553e0311a671d8e3b14732fd3e5f8..7ea10fe6f4737bf6005560134cf52e3f281338d4 100644
--- a/dune/gfe/riemannianpnsolver.hh
+++ b/dune/gfe/riemannianpnsolver.hh
@@ -69,7 +69,9 @@ public:
     RiemannianProximalNewtonSolver()
         : IterativeSolver<std::vector<TargetSpace>, Dune::BitSetVector<blocksize> >(0,100,NumProc::FULL),
           hessianMatrix_(nullptr), h1SemiNorm_(NULL)
-    {}
+    {
+        std::fill(scaling_.begin(), scaling_.end(), 1.0);
+    }
 
     /** \brief Set up the solver using a choldmod or umfpack solver as the inner solver */
     void setup(const GridType& grid,
@@ -81,6 +83,11 @@ public:
                double initialRegularization,
                bool instrumented);
 
+    void setScaling(const Dune::FieldVector<double,blocksize>& scaling)
+    {
+      scaling_ = scaling;
+    }
+
     void setIgnoreNodes(const Dune::BitSetVector<blocksize>& ignoreNodes)
     {
         ignoreNodes_ = &ignoreNodes;
@@ -118,6 +125,9 @@ protected:
     double initialRegularization_;
     double tolerance_;
 
+    /** \brief Regularization scaling */
+    Dune::FieldVector<double,blocksize> scaling_;
+
     /** \brief Maximum number of proximal-newton steps */
     std::size_t maxProximalNewtonSteps_;
 
diff --git a/problems/cosserat-continuum-cantilever.parset b/problems/cosserat-continuum-cantilever.parset
index 9440301af2c2e3a244b9799310e33768d16e1212..bfa21a8436ebefa2092dc2b059faac5f2d8323fd 100644
--- a/problems/cosserat-continuum-cantilever.parset
+++ b/problems/cosserat-continuum-cantilever.parset
@@ -26,7 +26,7 @@ tolerance = 1e-3
 # Max number of steps of the trust region solver
 maxSolverSteps = 200
 
-trustRegionScaling = 1 1 1 0.01 0.01 0.01
+solverScaling = 1 1 1 0.01 0.01 0.01
 
 # Initial trust-region radius
 initialTrustRegionRadius = 3.125
diff --git a/problems/cosserat-continuum-twisted-strip.parset b/problems/cosserat-continuum-twisted-strip.parset
index 04c738f4608aa5e30d30c5af4c6a7add32cd6fbe..a10d3197bfb8c791a656639c061b892cb5c48282 100644
--- a/problems/cosserat-continuum-twisted-strip.parset
+++ b/problems/cosserat-continuum-twisted-strip.parset
@@ -23,7 +23,7 @@ tolerance = 1e-8
 # Max number of steps of the trust region solver
 maxTrustRegionSteps = 200
 
-trustRegionScaling = 1 1 1 1 1 1
+solverScaling = 1 1 1 1 1 1
 
 # Initial trust-region radius
 initialTrustRegionRadius = 0.1
diff --git a/problems/cosserat-continuum-wong-pellegrino-wrinkling.parset b/problems/cosserat-continuum-wong-pellegrino-wrinkling.parset
index 790a91cd3f649131399a63fbccc924a41ee268c5..4af4a38d59003379a994bb2db4d246ac43351ceb 100644
--- a/problems/cosserat-continuum-wong-pellegrino-wrinkling.parset
+++ b/problems/cosserat-continuum-wong-pellegrino-wrinkling.parset
@@ -23,6 +23,8 @@ tolerance = 1e-8
 # Max number of steps of the trust region solver
 maxTrustRegionSteps = 500
 
+solverScaling = 1 1 1 0.01 0.01 0.01
+
 # Initial trust-region radius
 initialTrustRegionRadius = 0.001
 
diff --git a/problems/cosserat-continuum-wriggers-l-shape.parset b/problems/cosserat-continuum-wriggers-l-shape.parset
index 12c715bd9e9618fa4ce069b8409584294f0f5660..745f333600956d4c13e55af38ef37db5d6e7d74e 100644
--- a/problems/cosserat-continuum-wriggers-l-shape.parset
+++ b/problems/cosserat-continuum-wriggers-l-shape.parset
@@ -22,7 +22,7 @@ tolerance = 1e-8
 # Max number of steps of the trust region solver
 maxSolverSteps = 1000
 
-trustRegionScaling = 1 1 1 0.01 0.01 0.01
+solverScaling = 1 1 1 0.01 0.01 0.01
 
 # Initial trust-region radius
 initialTrustRegionRadius = 1
@@ -105,4 +105,4 @@ neumannValues =  0.09 0 0
 
 startFromFile = yes
 initialIterateGridFilename = wriggers-L-shape_99_mm.msh
-initialIterateFilename = initial-wriggers-l-shape.vtu
\ No newline at end of file
+initialIterateFilename = initial-wriggers-l-shape.vtu
diff --git a/problems/film-on-substrate.parset b/problems/film-on-substrate.parset
index e6cf6ce9164fe7216fc7b8392d764965e02aa2c0..1ce5db4b6676909c3c747f427fddc174dccbc3c7 100644
--- a/problems/film-on-substrate.parset
+++ b/problems/film-on-substrate.parset
@@ -87,7 +87,7 @@ initialRegularization = 1000000
 #  Solver parameters specific for trust-region solver using multigrid solver 
 #############################################
 
-trustRegionScaling = 1 1 1 0.01 0.01 0.01
+solverScaling = 1 1 1 0.01 0.01 0.01
 
 # Initial trust-region radius
 initialTrustRegionRadius = 3.125
diff --git a/problems/gradient-flow-curve-shortening.parset b/problems/gradient-flow-curve-shortening.parset
index cf5f31f492d398fe59d167365f950dcb87647e8e..857ec53c5a07417d907c7f09df73b059a5582233 100644
--- a/problems/gradient-flow-curve-shortening.parset
+++ b/problems/gradient-flow-curve-shortening.parset
@@ -20,6 +20,8 @@ tolerance = 1e-8
 # Max number of steps of the trust region solver
 maxTrustRegionSteps = 100
 
+solverScaling = 1 1 1 0.01 0.01 0.01
+
 # Initial trust-region radius
 initialTrustRegionRadius = 0.25
 
diff --git a/problems/harmonicmaps-skyrmions-hexagon.parset b/problems/harmonicmaps-skyrmions-hexagon.parset
index 1394c0ecd0a14308f4abc54a8fac66e40499044e..4cd7c41b71d19b0e8e76f1183cccf11ec26312e6 100644
--- a/problems/harmonicmaps-skyrmions-hexagon.parset
+++ b/problems/harmonicmaps-skyrmions-hexagon.parset
@@ -21,6 +21,8 @@ tolerance = 1e-12
 # Max number of steps of the trust region solver
 maxTrustRegionSteps = 100
 
+solverScaling = 1 1 1 0.01 0.01 0.01
+
 # Initial trust-region radius
 initialTrustRegionRadius = 1
 
diff --git a/problems/simofox-cantilever.parset b/problems/simofox-cantilever.parset
index 1eab7e5b40a79956681dc71b7bf0be101e824f3d..4351b50e165c7a9356728eaf4f2049dd80573f8c 100644
--- a/problems/simofox-cantilever.parset
+++ b/problems/simofox-cantilever.parset
@@ -26,7 +26,7 @@ tolerance = 1e-6
 # Max number of steps of the trust region solver
 maxTrustRegionSteps = 200
 
-trustRegionScaling = 1 1 1 0.01 0.01
+solverScaling = 1 1 1 0.01 0.01
 
 # Initial trust-region radius
 initialTrustRegionRadius = 10
diff --git a/problems/staticrod.parset b/problems/staticrod.parset
index 2d001ecad0fbe15fff3188010c99d570ae8c0909..7f8e5fe57d9b1415fca73ae3aca3effedaf644d2 100644
--- a/problems/staticrod.parset
+++ b/problems/staticrod.parset
@@ -21,6 +21,8 @@ tolerance = 1e-6
 # Max number of steps of the trust region solver
 maxTrustRegionSteps = 100
 
+solverScaling = 1 1 1 0.01 0.01 0.01
+
 # Initial trust-region radius
 initialTrustRegionRadius = 1
 
diff --git a/src/cosserat-continuum.cc b/src/cosserat-continuum.cc
index 17333187ba8891fcda1b2ea8faff965ec0f374bd..23941144b47d06b0d9fe1ac153554879922b5ad4 100644
--- a/src/cosserat-continuum.cc
+++ b/src/cosserat-continuum.cc
@@ -477,7 +477,7 @@ int main (int argc, char *argv[]) try
                      baseTolerance,
                      instrumented);
 
-            solver.setScaling(parameterSet.get<FieldVector<double,6> >("trustRegionScaling"));
+            solver.setScaling(parameterSet.get<FieldVector<double,6> >("solverScaling"));
 
             solver.setInitialIterate(x);
             solver.solve();
@@ -516,7 +516,7 @@ int main (int argc, char *argv[]) try
                          baseTolerance,
                          instrumented);
     
-                solver.setScaling(parameterSet.get<FieldVector<double,6> >("trustRegionScaling"));
+                solver.setScaling(parameterSet.get<FieldVector<double,6> >("solverScaling"));
                 solver.setInitialIterate(xTargetSpace);
                 solver.solve();
                 xTargetSpace = solver.getSol();
@@ -530,6 +530,7 @@ int main (int argc, char *argv[]) try
                              maxSolverSteps,
                              initialRegularization,
                              instrumented);
+                solver.setScaling(parameterSet.get<FieldVector<double,6> >("solverScaling"));
                 solver.setInitialIterate(xTargetSpace);
                 solver.solve();
                 xTargetSpace = solver.getSol();
@@ -577,7 +578,7 @@ int main (int argc, char *argv[]) try
                      baseTolerance,
                      instrumented);
 
-            solver.setScaling(parameterSet.get<FieldVector<double,6> >("trustRegionScaling"));
+            solver.setScaling(parameterSet.get<FieldVector<double,6> >("solverScaling"));
 
             solver.setInitialIterate(x);
             solver.solve();
@@ -616,7 +617,7 @@ int main (int argc, char *argv[]) try
                          baseTolerance,
                          instrumented);
 
-                solver.setScaling(parameterSet.get<FieldVector<double,6> >("trustRegionScaling"));
+                solver.setScaling(parameterSet.get<FieldVector<double,6> >("solverScaling"));
                 solver.setInitialIterate(xTargetSpace);
                 solver.solve();
                 xTargetSpace = solver.getSol();
@@ -630,6 +631,7 @@ int main (int argc, char *argv[]) try
                              maxSolverSteps,
                              initialRegularization,
                              instrumented);
+                solver.setScaling(parameterSet.get<FieldVector<double,6> >("solverScaling"));
                 solver.setInitialIterate(xTargetSpace);
                 solver.solve();
                 xTargetSpace = solver.getSol();
diff --git a/src/film-on-substrate.cc b/src/film-on-substrate.cc
index 8978172ac9fe81b8ce9c8a0b68e5cddc08a9961f..2dd06845b58b715b3af5b9f926c94860986dbd7e 100644
--- a/src/film-on-substrate.cc
+++ b/src/film-on-substrate.cc
@@ -584,7 +584,7 @@ int main (int argc, char *argv[]) try
                    baseTolerance,
                    instrumented);
 
-      solver.setScaling(parameterSet.get<FieldVector<double,6> >("trustRegionScaling"));
+      solver.setScaling(parameterSet.get<FieldVector<double,6> >("solverScaling"));
       solver.setInitialIterate(x);
       solver.solve();
       x = solver.getSol();
@@ -604,7 +604,7 @@ int main (int argc, char *argv[]) try
                    baseTolerance,
                    instrumented);
 
-      solver.setScaling(parameterSet.get<FieldVector<double,6> >("trustRegionScaling"));
+      solver.setScaling(parameterSet.get<FieldVector<double,6> >("solverScaling"));
       solver.setInitialIterate(xRBM);
       solver.solve();
       xRBM = solver.getSol();
@@ -627,6 +627,7 @@ int main (int argc, char *argv[]) try
                    maxSolverSteps,
                    initialRegularization,
                    instrumented);
+      solver.setScaling(parameterSet.get<FieldVector<double,6> >("solverScaling"));
       solver.setInitialIterate(xRBM);
       solver.solve();
       xRBM = solver.getSol();