diff --git a/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/DTRSMinimizer.h b/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/DTRSMinimizer.h
index 2b07e383166a5225222edc6a949328507524a7b5..d0e9051cc3f5ce461583ce896a2de9ed42e67d8e 100644
--- a/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/DTRSMinimizer.h
+++ b/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/DTRSMinimizer.h
@@ -53,7 +53,7 @@ private:
   DoubleFortranMatrix m_A, m_ev;
   DoubleFortranVector m_ew, m_v, m_v_trans, m_d_trans;
   NLLS::all_eig_symm_work m_all_eig_symm_ws;
-  NLLS::apply_scaling_work m_apply_scaling_ws;
+  DoubleFortranVector m_scale;
 };
 
 } // namespace FuncMinimisers
diff --git a/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/MoreSorensenMinimizer.h b/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/MoreSorensenMinimizer.h
index 0b101a8c9d47bc797b67b885851947cd4f43ebab..769f567284ac9f065b242360a6a5711f60ee6e12 100644
--- a/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/MoreSorensenMinimizer.h
+++ b/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/MoreSorensenMinimizer.h
@@ -59,7 +59,7 @@ private:
   DoubleFortranMatrix m_A, m_LtL, m_AplusSigma;
   DoubleFortranVector m_v, m_q, m_y1;
   NLLS::min_eig_symm_work m_min_eig_symm_ws;
-  NLLS::apply_scaling_work m_apply_scaling_ws;
+  DoubleFortranVector m_scale;
 };
 
 } // namespace FuncMinimisers
diff --git a/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/TrustRegion.h b/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/TrustRegion.h
index 644316ec56f588476453f1f3aea02d51d27faef7..34dedfe6b1553cd3188701e204c4a6bb864071f7 100644
--- a/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/TrustRegion.h
+++ b/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/TrustRegion.h
@@ -28,7 +28,7 @@ void rankOneUpdate(DoubleFortranMatrix &hf, NLLS_workspace &w);
 void testConvergence(double normF, double normJF, double normF0, double normJF0,
                      const nlls_options &options, nlls_inform &inform);
 void applyScaling(const DoubleFortranMatrix &J, DoubleFortranMatrix &A,
-                  DoubleFortranVector &v, apply_scaling_work &w,
+                  DoubleFortranVector &v, DoubleFortranVector &scale,
                   const nlls_options &options);
 void allEigSymm(const DoubleFortranMatrix &A, DoubleFortranVector &ew,
                 DoubleFortranMatrix &ev);
diff --git a/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/Workspaces.h b/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/Workspaces.h
index eff98a6bf6f23584d1abb85656e538a4dd2f089a..def0253127549562a54721d9d2bfa422f55fdbe8 100644
--- a/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/Workspaces.h
+++ b/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/Workspaces.h
@@ -237,11 +237,6 @@ struct all_eig_symm_work {
   DoubleFortranVector work;
 };
 
-/// workspace for subroutine applyScaling
-struct apply_scaling_work {
-  DoubleFortranVector diag;
-};
-
 /// workspace for subroutine getSvdJ
 struct get_svd_J_work {
   DoubleFortranVector Jcopy, S, work;
diff --git a/Framework/CurveFitting/src/FuncMinimizers/DTRSMinimizer.cpp b/Framework/CurveFitting/src/FuncMinimizers/DTRSMinimizer.cpp
index 21e0a49ffbd7b37b7d06a202db011f4fe8367b6e..ddbbfcc393d5466b7bde038f83d0cc3dad0697d5 100644
--- a/Framework/CurveFitting/src/FuncMinimizers/DTRSMinimizer.cpp
+++ b/Framework/CurveFitting/src/FuncMinimizers/DTRSMinimizer.cpp
@@ -936,7 +936,7 @@ void DTRSMinimizer::solveDtrs(const DoubleFortranMatrix &J, const DoubleFortranV
 
   // if scaling needed, do it
   if (options.scale != 0) {
-    applyScaling(J, m_A, m_v, m_apply_scaling_ws, options);
+    applyScaling(J, m_A, m_v, m_scale, options);
   }
 
   // Now that we have the unprocessed matrices, we need to get an
@@ -981,7 +981,7 @@ void DTRSMinimizer::solveDtrs(const DoubleFortranMatrix &J, const DoubleFortranV
 
   if (options.scale != 0) {
     for (int ii = 1; ii <= n; ++ii) { // for_do(ii, 1, n)
-      d(ii) = d(ii) / m_apply_scaling_ws.diag(ii);
+      d(ii) = d(ii) / m_scale(ii);
     }
   }
 
diff --git a/Framework/CurveFitting/src/FuncMinimizers/MoreSorensenMinimizer.cpp b/Framework/CurveFitting/src/FuncMinimizers/MoreSorensenMinimizer.cpp
index 9106e71a93e80eb7548b6a30f628c8e132aa1f54..11c52f6c6e6d9c8e3b229510b692b9a0bfc10192 100644
--- a/Framework/CurveFitting/src/FuncMinimizers/MoreSorensenMinimizer.cpp
+++ b/Framework/CurveFitting/src/FuncMinimizers/MoreSorensenMinimizer.cpp
@@ -197,14 +197,14 @@ void MoreSorensenMinimizer::moreSorensen(const DoubleFortranMatrix &J, const Dou
 
   // if scaling needed, do it
   if (options.scale != 0) {
-    applyScaling(J, m_A, m_v, m_apply_scaling_ws, options);
+    applyScaling(J, m_A, m_v, m_scale, options);
   }
 
   auto n = J.len2();
   auto scaleBack = [n, &d, &options, this]() {
     if (options.scale != 0) {
       for (int i = 1; i <= n; ++i) {
-        d(i) = d(i) / m_apply_scaling_ws.diag(i);
+        d(i) = d(i) / m_scale(i);
       }
     }
   };
diff --git a/Framework/CurveFitting/src/RalNlls/TrustRegion.cpp b/Framework/CurveFitting/src/RalNlls/TrustRegion.cpp
index 93f8cf89a09d038a6bf02308ab482633b61b17a3..6ee2084394e1397e4aa6141fe25944b23915d5a2 100644
--- a/Framework/CurveFitting/src/RalNlls/TrustRegion.cpp
+++ b/Framework/CurveFitting/src/RalNlls/TrustRegion.cpp
@@ -289,12 +289,12 @@ void testConvergence(double normF, double normJF, double normF0, double normJF0,
 /// @param options :: The options.
 /// @param inform :: The information.
 void applyScaling(const DoubleFortranMatrix &J, DoubleFortranMatrix &A,
-                  DoubleFortranVector &v, apply_scaling_work &w,
+                  DoubleFortranVector &v, DoubleFortranVector &scale,
                   const nlls_options &options) {
   auto m = J.len1();
   auto n = J.len2();
-  if (w.diag.len() != n) {
-    w.diag.allocate(n);
+  if (scale.len() != n) {
+    scale.allocate(n);
   }
 
   switch (options.scale) {
@@ -330,9 +330,9 @@ void applyScaling(const DoubleFortranMatrix &J, DoubleFortranMatrix &A,
       }
       temp = sqrt(temp);
       if (options.scale_require_increase) {
-        w.diag(ii) = std::max(temp, w.diag(ii));
+        scale(ii) = std::max(temp, scale(ii));
       } else {
-        w.diag(ii) = temp;
+        scale(ii) = temp;
       }
     }
     break;
@@ -344,7 +344,7 @@ void applyScaling(const DoubleFortranMatrix &J, DoubleFortranMatrix &A,
   // Now we have the w.diagonal scaling matrix, actually scale the
   // Hessian approximation and J^Tf
   for (int ii = 1; ii <= n; ++ii) { // for_do(ii, 1,n)
-    double temp = w.diag(ii);
+    double temp = scale(ii);
     v(ii) = v(ii) / temp;
     for (int jj = 1; jj <= n; ++jj) { // for_do(jj,1,n)
       A(ii, jj) = A(ii, jj) / temp;