diff --git a/src/utils/Stop.cpp b/src/utils/Stop.cpp
index 593094cc311a8d1d72ed687d9a90d3af65f1c881..189b42e07983772a2cf3d8b7ffbe31cbae616d77 100644
--- a/src/utils/Stop.cpp
+++ b/src/utils/Stop.cpp
@@ -9,6 +9,39 @@
 
 #ifdef PUGS_HAS_SLURM
 #include <slurm/slurm.h>
+
+// LCOV_EXCL_START
+class SlurmWrapper
+{
+private:
+  int m_slurm_job_id = -1;
+
+public:
+  bool mustStop() const
+  {
+    if (m_slurm_job_id == -1) {
+      false;
+    } else {
+      return slurm_get_rem_time(m_slurm_job_id) < 150;
+    }
+  }
+  
+  SlurmWrapper()
+  {
+    char* env = getenv("SLURM_JOB_ID");
+    if (env != nullptr) {
+      slurm_init(nullptr);
+      m_slurm_job_id = std::atoi(env);
+    }
+  }
+
+  ~SlurmWrapper()
+  {
+    slurm_fini();
+  }
+};
+// LCOV_EXCL_STOP
+
 #endif   // PUGS_HAS_SLURM
 
 bool
@@ -29,22 +62,16 @@ stop()
       stop = elapse_time > stop_file_age;
     }
 
-#ifdef PUGS_HAS_SLURM
+#ifdef PUGS_HAS_SLURM    
     // LCOV_EXCL_START
-    char* env = getenv("SLURM_JOB_ID");
-    if (env != nullptr) {
-      slurm_init(nullptr);
-      int slurm_job_id = std::atoi(env);
-
-      if (slurm_get_rem_time(slurm_job_id) < 150) {
-        stop = true;
-      }
-
-      slurm_fini();
+    static SlurmWrapper slurm_wrapper;
+    if (slurm_wrapper.mustStop()) {
+      stop = true;
     }
     // LCOV_EXCL_STOP
 #endif   // PUGS_HAS_SLURM
   }
+  
 
   parallel::broadcast(stop, 0);