diff --git a/NEWS b/NEWS
index e472a2a841222fc0c3de3425a0fb061f3bd124a1..9c2453e404852df3e5c2756713c6ed30c6a33373 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,11 @@
 This file describes changes in recent versions of SLURM. It primarily
 documents those changes that are of interest to users and admins. 
 
+* Changes in SLURM 0.7.0-pre7
+=============================
+ -- Fix issue with NODE_STATE_COMPLETING, could start job on node before
+    epilog completed.
+
 * Changes in SLURM 0.7.0-pre6
 =============================
  -- Added support for task affinity for binding tasks to CPUs (Daniel
diff --git a/src/slurmctld/node_mgr.c b/src/slurmctld/node_mgr.c
index 8482e189a5a7081ac102dd9c8441e4a20f7178b9..9ff28e7165200c154165f7f2d3d44ea5616224ea 100644
--- a/src/slurmctld/node_mgr.c
+++ b/src/slurmctld/node_mgr.c
@@ -1461,7 +1461,8 @@ static void _node_did_resp(struct node_record *node_ptr)
 		xfree(node_ptr->reason);
 	}
 	base_state = node_ptr->node_state & NODE_STATE_BASE;
-	if (base_state == NODE_STATE_IDLE) {
+	if ((base_state == NODE_STATE_IDLE) 
+	&&  ((node_flags & NODE_STATE_COMPLETING) == 0)) {
 		bit_set (idle_node_bitmap, node_inx);
 		bit_set (share_node_bitmap, node_inx);
 	}
@@ -1857,7 +1858,8 @@ void make_node_idle(struct node_record *node_ptr,
 		node_ptr->node_state = NODE_STATE_ALLOCATED | node_flags;
 	} else {
 		node_ptr->node_state = NODE_STATE_IDLE | node_flags;
-		if ((node_flags & NODE_STATE_NO_RESPOND) == 0)
+		if (((node_flags & NODE_STATE_NO_RESPOND) == 0)
+		&&  ((node_flags & NODE_STATE_COMPLETING) == 0))
 			bit_set(idle_node_bitmap, inx);
 	}
 }
diff --git a/src/slurmctld/read_config.c b/src/slurmctld/read_config.c
index 6169947405d3dce7719de4b8ee825c705eabde7a..ed2ef703ddc97425af181058ceb69986eabafbce 100644
--- a/src/slurmctld/read_config.c
+++ b/src/slurmctld/read_config.c
@@ -173,7 +173,7 @@ static int _build_bitmaps(void)
 		job_cnt = node_record_table_ptr[i].run_job_cnt +
 		          node_record_table_ptr[i].comp_job_cnt;
 
-		if ((base_state == NODE_STATE_IDLE)
+		if (((base_state == NODE_STATE_IDLE) && (job_cnt == 0))
 		||  (base_state == NODE_STATE_DOWN))
 			bit_set(idle_node_bitmap, i);
 		if ((base_state == NODE_STATE_IDLE)