diff --git a/src/plugins/priority/basic/priority_basic.c b/src/plugins/priority/basic/priority_basic.c
index fe471ade8a4863cf36ab7e4b6b663ed473df7974..fee48b2057b05d9a953220bf62d3930e1fd468c2 100644
--- a/src/plugins/priority/basic/priority_basic.c
+++ b/src/plugins/priority/basic/priority_basic.c
@@ -110,13 +110,11 @@ extern uint32_t priority_p_set(uint32_t last_prio, struct job_record *job_ptr)
 	if(job_ptr->direct_set_prio)
 		return job_ptr->priority;
 
-	if (last_prio >= 2)
+	if(last_prio >= 2)
 		new_prio = (last_prio - 1);
 
-	if(!job_ptr->details)
-		return new_prio;
-
-	new_prio -= (job_ptr->details->nice - NICE_OFFSET);
+	if(job_ptr->details)
+		new_prio -= (job_ptr->details->nice - NICE_OFFSET);
 
 	if(new_prio < 1)
 		new_prio = 1;
diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c
index 43ab8238e848257728b36313bd8e074a086390c3..ed65f7578fce9941101ab9e173f76a36d108412a 100644
--- a/src/slurmctld/job_mgr.c
+++ b/src/slurmctld/job_mgr.c
@@ -3918,9 +3918,11 @@ static void _set_job_prio(struct job_record *job_ptr)
 {
 	xassert(job_ptr);
 	xassert (job_ptr->magic == JOB_MAGIC);
+	if (IS_JOB_FINISHED(job_ptr))
+		return;
 	job_ptr->priority = slurm_sched_initial_priority(maximum_prio,
 							 job_ptr);
-	if (job_ptr->priority > 0)
+	if ((job_ptr->priority > 1) && (job_ptr->direct_set_prio == 0))
 		maximum_prio = MIN(job_ptr->priority, maximum_prio);
 }
 
@@ -3935,7 +3937,7 @@ void reset_job_priority(void)
 
 	job_iterator = list_iterator_create(job_list);
 	while ((job_ptr = (struct job_record *) list_next(job_iterator))) {
-		if (job_ptr->priority == 1) {
+		if ((job_ptr->priority == 1) && (!IS_JOB_FINISHED(job_ptr))) {
 			_set_job_prio(job_ptr);
 			count++;
 		}
@@ -4086,8 +4088,10 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid)
 	}
 
 	if (job_specs->priority != NO_VAL) {
-		if (super_user
-		    ||  (job_ptr->priority > job_specs->priority)) {
+		if (IS_JOB_FINISHED(job_ptr))
+			error_code = ESLURM_DISABLED;
+		else if (super_user ||
+		         (job_ptr->priority > job_specs->priority)) {
 			if(job_specs->priority == INFINITE) {
 				job_ptr->direct_set_prio = 0;
 				_set_job_prio(job_ptr);
@@ -4106,7 +4110,7 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid)
 	}
 
 	if (job_specs->nice != NICE_OFFSET) {
-		if (!IS_JOB_PENDING(job_ptr)) 
+		if (IS_JOB_FINISHED(job_ptr)) 
 			error_code = ESLURM_DISABLED;
 		else if (super_user || (job_specs->nice < NICE_OFFSET)) {
 			job_ptr->details->nice = job_specs->nice;