diff --git a/ProcessLib/CachedSecondaryVariable.cpp b/ProcessLib/CachedSecondaryVariable.cpp
index 3b29c6f9abb6907010db53fde690decb4ff81bb6..9627506a13f04796c3a1bedee5e0b459565d91a7 100644
--- a/ProcessLib/CachedSecondaryVariable.cpp
+++ b/ProcessLib/CachedSecondaryVariable.cpp
@@ -32,11 +32,11 @@ SecondaryVariableFunctions CachedSecondaryVariable::getExtrapolator()
 {
     // TODO copied from makeExtrapolator()
     auto const eval_residuals = [this](
-        GlobalVector const& /*x*/,
-        NumLib::LocalToGlobalIndexMap const& /*dof_table*/,
+        GlobalVector const& x,
+        NumLib::LocalToGlobalIndexMap const& dof_table,
         std::unique_ptr<GlobalVector> & /*result_cache*/
         ) -> GlobalVector const& {
-        _extrapolator.calculateResiduals(*_extrapolatables);
+        _extrapolator.calculateResiduals(*_extrapolatables, x, dof_table);
         return _extrapolator.getElementResiduals();
     };
     return {BaseLib::easyBind(&CachedSecondaryVariable::evalField, this),
@@ -44,11 +44,13 @@ SecondaryVariableFunctions CachedSecondaryVariable::getExtrapolator()
 }
 
 GlobalVector const& CachedSecondaryVariable::evalField(
-    GlobalVector const& /*x*/,
-    NumLib::LocalToGlobalIndexMap const& /*dof_table*/,
+    GlobalVector const& x,
+    NumLib::LocalToGlobalIndexMap const& dof_table,
     std::unique_ptr<GlobalVector>& /*result_cache*/
     ) const
 {
+    // _current_solution = &x;
+    // _dof_table = &dof_table;
     return evalFieldNoArgs();
 }
 
@@ -60,7 +62,8 @@ GlobalVector const& CachedSecondaryVariable::evalFieldNoArgs() const
         return _cached_nodal_values;
     }
     DBUG("Recomputing %s.", _internal_variable_name.c_str());
-    _extrapolator.extrapolate(*_extrapolatables);
+    _extrapolator.extrapolate(
+        *_extrapolatables, *_current_solution, *_dof_table);
     auto const& nodal_values = _extrapolator.getNodalValues();
     MathLib::LinAlg::copy(nodal_values, _cached_nodal_values);
     _needs_recomputation = false;
diff --git a/ProcessLib/CachedSecondaryVariable.h b/ProcessLib/CachedSecondaryVariable.h
index 0c6b5335f6e8c1353cf7cc7343582033baa71d47..884316472f7da4784da29fa71c48ddda53a3ab2d 100644
--- a/ProcessLib/CachedSecondaryVariable.h
+++ b/ProcessLib/CachedSecondaryVariable.h
@@ -69,8 +69,8 @@ private:
 
     //! Computes the secondary Variable.
     GlobalVector const& evalField(
-        GlobalVector const& /*x*/,
-        NumLib::LocalToGlobalIndexMap const& /*dof_table*/,
+        GlobalVector const& x,
+        NumLib::LocalToGlobalIndexMap const& dof_table,
         std::unique_ptr<GlobalVector>& /*result_cache*/
         ) const;
 
@@ -85,6 +85,9 @@ private:
     std::unique_ptr<NumLib::ExtrapolatableElementCollection> _extrapolatables;
     SecondaryVariableContext const& _context;
     std::string const _internal_variable_name;
+
+    GlobalVector const* _current_solution = nullptr;
+    NumLib::LocalToGlobalIndexMap const* _dof_table = nullptr;
 };
 
 }  // namespace ProcessLib
diff --git a/ProcessLib/SecondaryVariable.h b/ProcessLib/SecondaryVariable.h
index de54dec8710a2c0378523a65a3ec576553e3ce02..0fb68a55dc9b3141f2b845a8da9545e968cffbab 100644
--- a/ProcessLib/SecondaryVariable.h
+++ b/ProcessLib/SecondaryVariable.h
@@ -155,25 +155,25 @@ SecondaryVariableFunctions makeExtrapolator(
 {
     auto const eval_field = [&extrapolator, &local_assemblers,
                              integration_point_values_method](
-        GlobalVector const& /*x*/,
-        NumLib::LocalToGlobalIndexMap const& /*dof_table*/,
+        GlobalVector const& x,
+        NumLib::LocalToGlobalIndexMap const& dof_table,
         std::unique_ptr<GlobalVector> & /*result_cache*/
         ) -> GlobalVector const& {
         auto const extrapolatables = NumLib::makeExtrapolatable(
             local_assemblers, integration_point_values_method);
-        extrapolator.extrapolate(extrapolatables);
+        extrapolator.extrapolate(extrapolatables, x, dof_table);
         return extrapolator.getNodalValues();
     };
 
     auto const eval_residuals = [&extrapolator, &local_assemblers,
                                  integration_point_values_method](
-        GlobalVector const& /*x*/,
-        NumLib::LocalToGlobalIndexMap const& /*dof_table*/,
+        GlobalVector const& x,
+        NumLib::LocalToGlobalIndexMap const& dof_table,
         std::unique_ptr<GlobalVector> & /*result_cache*/
         ) -> GlobalVector const& {
         auto const extrapolatables = NumLib::makeExtrapolatable(
             local_assemblers, integration_point_values_method);
-        extrapolator.calculateResiduals(extrapolatables);
+        extrapolator.calculateResiduals(extrapolatables, x, dof_table);
         return extrapolator.getElementResiduals();
     };
     return {eval_field, eval_residuals};