diff --git a/src/slurmctld/trigger_mgr.c b/src/slurmctld/trigger_mgr.c
index 97c4c54141afeb8a21846d25402eb09460c132fa..2163bfa473220a984825757cd654e20414887855 100644
--- a/src/slurmctld/trigger_mgr.c
+++ b/src/slurmctld/trigger_mgr.c
@@ -64,6 +64,11 @@
 /* Change TRIGGER_STATE_VERSION value when changing the state save format */
 #define TRIGGER_STATE_VERSION      "VER001"
 
+/* TRIG_IS_JOB_FINI differs from IS_JOB_FINISHED by considering 
+ * completing jobs as not really finished */
+#define TRIG_IS_JOB_FINI(_X)             \
+        (IS_JOB_FINISHED(_X) && ((_X->job_state & JOB_COMPLETING) == 0))
+
 List trigger_list;
 uint32_t next_trigger_id = 1;
 static pthread_mutex_t trigger_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -408,7 +413,7 @@ static int _load_trigger_state(Buf buffer)
 		trig_ptr->job_ptr = find_job_record(trig_ptr->job_id);
 		if ((trig_ptr->job_id == 0)
 		||  (trig_ptr->job_ptr == NULL)
-		||  (IS_JOB_FINISHED(trig_ptr->job_ptr)))
+		||  (TRIG_IS_JOB_FINI(trig_ptr->job_ptr)))
 			goto unpack_error;
 	} else {
 		trig_ptr->job_id = 0;
@@ -599,12 +604,12 @@ fini:	verbose("State of %d triggers recovered", trigger_cnt);
 static void _trigger_job_event(trig_mgr_info_t *trig_in, time_t now)
 {
 	if ((trig_in->job_ptr == NULL)
-	||  (trig_in->job_ptr->job_id == trig_in->job_id))
+	||  (trig_in->job_ptr->job_id != trig_in->job_id))
 		trig_in->job_ptr = find_job_record(trig_in->job_ptr->job_id);
 
 	if ((trig_in->trig_type & TRIGGER_TYPE_FINI)
 	&&  ((trig_in->job_ptr == NULL) ||
-	     (IS_JOB_FINISHED(trig_in->job_ptr)))) {
+	     (TRIG_IS_JOB_FINI(trig_in->job_ptr)))) {
 		trig_in->state = 1;
 		trig_in->trig_time = now + (trig_in->trig_time - 0x8000);
 #if _DEBUG