diff --git a/src/algo/energy_bf.cpp b/src/algo/energy_bf.cpp
index ed51dd9ccdec772b7e7e85e90679a68bd8cee4d2..7f3cb7687583b66c78a1e7fec5fd54f7addeb143 100644
--- a/src/algo/energy_bf.cpp
+++ b/src/algo/energy_bf.cpp
@@ -1343,3 +1343,31 @@ bool EnergyBackfilling::is_fake_job(const std::string & job_id)
 {
     return boost::starts_with(job_id, "fakejob_");
 }
+
+bool EnergyBackfilling::contains_any_fake_job(const Schedule &schedule)
+{
+    for (auto slice_it = schedule.begin(); slice_it != schedule.end(); ++slice_it)
+    {
+        for (auto mit : slice_it->allocated_jobs)
+        {
+            const Job * job = mit.first;
+            if (is_fake_job(job->id))
+                return true;
+        }
+    }
+    return false;
+}
+
+bool EnergyBackfilling::contains_any_nonfake_job(const Schedule &schedule)
+{
+    for (auto slice_it = schedule.begin(); slice_it != schedule.end(); ++slice_it)
+    {
+        for (auto mit : slice_it->allocated_jobs)
+        {
+            const Job * job = mit.first;
+            if (!is_fake_job(job->id))
+                return true;
+        }
+    }
+    return false;
+}
diff --git a/src/algo/energy_bf.hpp b/src/algo/energy_bf.hpp
index b66526b913b8b39343bf964020661dd3d4f07350..cba51a36e7d5a13eb00f023f5d56b498f546d133 100644
--- a/src/algo/energy_bf.hpp
+++ b/src/algo/energy_bf.hpp
@@ -156,6 +156,9 @@ protected:
     static bool is_potential_sleep_job(const std::string & job_id);
     static bool is_fake_job(const std::string & job_id);
 
+    static bool contains_any_fake_job(const Schedule & schedule);
+    static bool contains_any_nonfake_job(const Schedule & schedule);
+
 protected:
     Schedule _schedule;
     bool _debug = false;
diff --git a/src/algo/energy_bf_monitoring_inertial_shutdown.cpp b/src/algo/energy_bf_monitoring_inertial_shutdown.cpp
index da2477ca5037b938303fa01436a1b7f6974fad45..3da4934be937b2fc4f0129044ada05332f18a765 100644
--- a/src/algo/energy_bf_monitoring_inertial_shutdown.cpp
+++ b/src/algo/energy_bf_monitoring_inertial_shutdown.cpp
@@ -120,26 +120,34 @@ void EnergyBackfillingMonitoringInertialShutdown::make_decisions(double date,
                      "Invalid nb_machines_sedated_for_being_idle value: %d\n",
                      _nb_machines_sedated_for_being_idle);
 
-    // Let's remove finished jobs from the schedule
-    for (const string & ended_job_id : _jobs_ended_recently)
+    if (!_jobs_ended_recently.empty())
     {
-        const Job * ended_job = (*_workload)[ended_job_id];
-        ++_nb_jobs_completed;
-
-        PPK_ASSERT_ERROR(_schedule.contains_job(ended_job),
-                         "Invalid schedule: job '%s' just finished, "
-                         "but it not in the schedule...\n%s",
-                         ended_job_id.c_str(), _schedule.to_string().c_str());
-        PPK_ASSERT_ERROR(!_queue->contains_job(ended_job),
-                         "Job '%s' just ended, but it is still in the "
-                         "queue...\nQueue : %s",
-                         ended_job_id.c_str(),
-                         _queue->to_string().c_str());
-
-        // Let's remove the finished job from the schedule
-        _schedule.remove_job(ended_job);
-    }
+        // Let's remove finished jobs from the schedule
+        for (const string & ended_job_id : _jobs_ended_recently)
+        {
+            const Job * ended_job = (*_workload)[ended_job_id];
+            ++_nb_jobs_completed;
 
+            PPK_ASSERT_ERROR(_schedule.contains_job(ended_job),
+                             "Invalid schedule: job '%s' just finished, "
+                             "but it not in the schedule...\n%s",
+                             ended_job_id.c_str(), _schedule.to_string().c_str());
+            PPK_ASSERT_ERROR(!_queue->contains_job(ended_job),
+                             "Job '%s' just ended, but it is still in the "
+                             "queue...\nQueue : %s",
+                             ended_job_id.c_str(),
+                             _queue->to_string().c_str());
+
+            // Let's remove the finished job from the schedule
+            _schedule.remove_job(ended_job);
+        }
+
+        // Stop sending CALL_ME_LATER if all jobs have been executed.
+        if (_no_more_static_job_to_submit_received &&
+            _queue->is_empty() &&
+            !EnergyBackfilling::contains_any_nonfake_job(_schedule))
+            _stop_sending_call_me_later = true;
+    }
 
     // Let's update the first slice of the schedule
     update_first_slice_taking_sleep_jobs_into_account(date);
diff --git a/src/algo/energy_bf_monitoring_period.cpp b/src/algo/energy_bf_monitoring_period.cpp
index 95b077746b3b0d526e24cbacd2c7774f43b38ea8..4da14adf48de917afedb271862ec50197b14cdd1 100644
--- a/src/algo/energy_bf_monitoring_period.cpp
+++ b/src/algo/energy_bf_monitoring_period.cpp
@@ -65,13 +65,16 @@ void EnergyBackfillingMonitoringPeriod::on_requested_call(double date)
         // Let's execute on_monitoring_stage
         on_monitoring_stage(date);
 
-        // Let's request a call for the next monitoring stage
-        _next_monitoring_period_expected_date = date + _period_between_monitoring_stages;
-        _decision->add_call_me_later((double)(_next_monitoring_period_expected_date), date);
-        _nb_call_me_later_running++;
-
-        LOG_F(INFO, "EnergyBackfillingMonitoringPeriod: 'Chose to launch a call_me_later at %g",
-               (double)_next_monitoring_period_expected_date);
+        if (!_stop_sending_call_me_later)
+        {
+            // Let's request a call for the next monitoring stage
+            _next_monitoring_period_expected_date = date + _period_between_monitoring_stages;
+            _decision->add_call_me_later((double)(_next_monitoring_period_expected_date), date);
+            _nb_call_me_later_running++;
+
+            LOG_F(INFO, "EnergyBackfillingMonitoringPeriod: 'Chose to launch a call_me_later at %g",
+                   (double)_next_monitoring_period_expected_date);
+        }
     }
 }
 
diff --git a/src/algo/energy_bf_monitoring_period.hpp b/src/algo/energy_bf_monitoring_period.hpp
index 70553d504f25cdcecbe4d1f8c68f4ac58fd0d446..525e27fee3745e1b1afe4fd5b459e2fbef1a54e1 100644
--- a/src/algo/energy_bf_monitoring_period.hpp
+++ b/src/algo/energy_bf_monitoring_period.hpp
@@ -29,6 +29,7 @@ public:
 
 protected:
     std::string _output_dir;
+    bool _stop_sending_call_me_later = false;
 
 private:
     bool _monitoring_period_launched = false;