diff --git a/src/utils/PTScotchPartitioner.cpp b/src/utils/PTScotchPartitioner.cpp
index e86acfa4494c437dfbe8886a83d6ecbf01f514f2..112ddfecdf161d8b924b6f9b962d16e75c22c507 100644
--- a/src/utils/PTScotchPartitioner.cpp
+++ b/src/utils/PTScotchPartitioner.cpp
@@ -90,7 +90,9 @@ PTScotchPartitioner::partition(const CRSGraph& graph)
     SCOTCH_stratExit(&scotch_strategy);
   }
 
-  MPI_Comm_free(&partitioning_comm);
+  if (partitioning_comm != MPI_COMM_NULL){
+    MPI_Comm_free(&partitioning_comm);
+  }
   MPI_Group_free(&mesh_group);
   MPI_Group_free(&world_group);
 
diff --git a/src/utils/ParMETISPartitioner.cpp b/src/utils/ParMETISPartitioner.cpp
index d67e38d1ba96a6ee6aac7e283d8bde6278971189..5a7bdb6a27d1ce459d19a4cfac38c2cca2166d64 100644
--- a/src/utils/ParMETISPartitioner.cpp
+++ b/src/utils/ParMETISPartitioner.cpp
@@ -87,7 +87,9 @@ ParMETISPartitioner::partition(const CRSGraph& graph)
     // LCOV_EXCL_STOP
   }
 
-  MPI_Comm_free(&partitioning_comm);
+  if (partitioning_comm != MPI_COMM_NULL){
+    MPI_Comm_free(&partitioning_comm);
+  }
   MPI_Group_free(&mesh_group);
   MPI_Group_free(&world_group);
 
diff --git a/src/utils/Stop.cpp b/src/utils/Stop.cpp
index 593094cc311a8d1d72ed687d9a90d3af65f1c881..fb2755c7d4a52fa04b0cdce0096793a990994e49 100644
--- a/src/utils/Stop.cpp
+++ b/src/utils/Stop.cpp
@@ -9,6 +9,41 @@
 
 #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) {
+      return 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
@@ -31,16 +66,9 @@ stop()
 
 #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