diff --git a/src/slurmctld/node_scheduler.c b/src/slurmctld/node_scheduler.c
index e618d0feda7fb4d1b768c1319bbd0dbe4909e2b9..042c8e8d2d5272ee503084c7fe2735f56aae4025 100644
--- a/src/slurmctld/node_scheduler.c
+++ b/src/slurmctld/node_scheduler.c
@@ -997,7 +997,7 @@ _get_req_features(struct node_set *node_set_ptr, int node_set_size,
 	uint32_t saved_min_cpus, saved_req_nodes;
 	int rc, tmp_node_set_size;
 	int mcs_select = 0;
-	struct node_set *tmp_node_set_ptr;
+	struct node_set *tmp_node_set_ptr, *prev_node_set_ptr;
 	int error_code = SLURM_SUCCESS, i;
 	bitstr_t *feature_bitmap, *accumulate_bitmap = NULL;
 	bitstr_t *save_avail_node_bitmap = NULL, *resv_bitmap = NULL;
@@ -1088,6 +1088,7 @@ _get_req_features(struct node_set *node_set_ptr, int node_set_size,
 		feat_iter = list_iterator_create(
 				job_ptr->details->feature_list);
 		while ((feat_ptr = (job_feature_t *) list_next(feat_iter))) {
+			bool sort_again = false;
 			if (feat_ptr->count == 0)
 				continue;
 			tmp_node_set_size = 0;
@@ -1116,15 +1117,23 @@ _get_req_features(struct node_set *node_set_ptr, int node_set_size,
 					bit_copy(node_set_ptr[i].feature_bits);
 				tmp_node_set_ptr[tmp_node_set_size].my_bitmap =
 					bit_copy(node_set_ptr[i].my_bitmap);
+				prev_node_set_ptr = tmp_node_set_ptr +
+						    tmp_node_set_size;
 				tmp_node_set_size++;
 
-				if (test_only || !can_reboot)
+				if (test_only || !can_reboot ||
+				    (prev_node_set_ptr->weight == INFINITE))
 					continue;
-
 				if (!_match_feature2(feat_ptr->name,
 						     node_set_ptr+i,
 						     &inactive_bitmap))
 					continue;
+				sort_again = true;
+				if (bit_equal(prev_node_set_ptr->my_bitmap,
+					      inactive_bitmap)) {
+					prev_node_set_ptr->weight = INFINITE;
+					continue;
+				}
 				tmp_node_set_ptr[tmp_node_set_size].
 					cpus_per_node =
 					node_set_ptr[i].cpus_per_node;
@@ -1162,6 +1171,10 @@ _get_req_features(struct node_set *node_set_ptr, int node_set_size,
 			job_ptr->details->min_cpus = feat_ptr->count;
 			FREE_NULL_LIST(*preemptee_job_list);
 			job_ptr->details->pn_min_memory = orig_req_mem;
+			if (sort_again) {
+				qsort(tmp_node_set_ptr, tmp_node_set_size,
+				      sizeof(struct node_set), _sort_node_set);
+			}
 			error_code = _pick_best_nodes(tmp_node_set_ptr,
 					tmp_node_set_size, &feature_bitmap,
 					job_ptr, part_ptr, min_nodes,