diff --git a/NumLib/ODESolver/ConvergenceCriterion.h b/NumLib/ODESolver/ConvergenceCriterion.h
index dc9faa5a6de909c37b9b235f32a6538909775702..32b27ee34a5db15b5850894bde6b8f1844e9dfc3 100644
--- a/NumLib/ODESolver/ConvergenceCriterion.h
+++ b/NumLib/ODESolver/ConvergenceCriterion.h
@@ -60,6 +60,10 @@ public:
     //! (while solving a specific nonlinear system).
     virtual void preFirstIteration() {}
 
+    //! Tell the ConvergenceCriterion that it is not called for the first time
+    //! (while solving a coupling system).
+    virtual void setNoFirstIteration() {}
+
     //! Indicate that a new iteration now starts.
     //!
     //! A concrete implementation of ConvergenceCriterion might want to check
diff --git a/NumLib/ODESolver/ConvergenceCriterionResidual.h b/NumLib/ODESolver/ConvergenceCriterionResidual.h
index 21b793f589d60964aacf32002c4ab1434fd74852..d654eda8680856843395d95ab6dda093c36134ae 100644
--- a/NumLib/ODESolver/ConvergenceCriterionResidual.h
+++ b/NumLib/ODESolver/ConvergenceCriterionResidual.h
@@ -39,6 +39,7 @@ public:
     void checkResidual(const GlobalVector& residual) override;
 
     void preFirstIteration() override { _is_first_iteration = true; }
+    void setNoFirstIteration() override { _is_first_iteration = false; }
     void reset() override { _satisfied = true; _is_first_iteration = false; }
     bool isSatisfied() const override { return _satisfied; }
 private: