diff --git a/NEWS b/NEWS
index 363f37efd9442838bcf76eca57d33447415e3e2e..552c34f08d745e678427d22846fcc1f82218c10c 100644
--- a/NEWS
+++ b/NEWS
@@ -83,6 +83,10 @@ documents those changes that are of interest to users and admins.
     socket/core/thread counts.
  -- Modify select/cons_res to recognize updated memory size upon node startup
     if FastSchedule=0.
+ -- Fixed bug if not enforcing associations, but running with them and the 
+    priority/multifactor, the slurmctld will not core dump on processing usage.
+ -- QOS will not be reset to the default when added back a previously deleted
+    association.
 
 * Changes in SLURM 2.0.3
 ========================
diff --git a/src/api/step_launch.c b/src/api/step_launch.c
index c36275570a0c4dc5644d9a3e8ab7e899d97c9ad3..58cbfc1512b9d81c6b2e86858ceb2965f50c915e 100644
--- a/src/api/step_launch.c
+++ b/src/api/step_launch.c
@@ -491,8 +491,8 @@ void slurm_step_launch_fwd_signal(slurm_step_ctx_t *ctx, int signo)
 	int rc = SLURM_SUCCESS;
 	struct step_launch_state *sls = ctx->launch_state;
 	
-	debug2("forward signal %d to job", signo);
-	
+	debug2("forward signal %d to job %u", signo, ctx->job_id);
+
 	/* common to all tasks */
 	msg.job_id      = ctx->job_id;
 	msg.job_step_id = ctx->step_resp->job_step_id;
@@ -539,7 +539,8 @@ void slurm_step_launch_fwd_signal(slurm_step_ctx_t *ctx, int signo)
 	req.msg_type = REQUEST_SIGNAL_TASKS;
 	req.data     = &msg;
 	
-	debug3("sending signal to host %s", name);
+	debug3("sending signal %d to job %u on host %s", 
+	       signo, ctx->job_id, name);
 	
 	if (!(ret_list = slurm_send_recv_msgs(name, &req, 0, false))) { 
 		error("fwd_signal: slurm_send_recv_msgs really failed bad");
diff --git a/src/plugins/accounting_storage/mysql/accounting_storage_mysql.c b/src/plugins/accounting_storage/mysql/accounting_storage_mysql.c
index 431850f4599d5f4e5638c2b31f0d4456a167d80e..0e98b900a43b4dfc6ca16871f0abbe29148cffc1 100644
--- a/src/plugins/accounting_storage/mysql/accounting_storage_mysql.c
+++ b/src/plugins/accounting_storage/mysql/accounting_storage_mysql.c
@@ -622,8 +622,12 @@ static int _setup_association_limits(acct_association_rec_t *assoc,
 		xstrcat(*extra, ", max_wall_duration_per_job=NULL");
 	}
 
-	if((qos_level != QOS_LEVEL_MODIFY)
-	   && assoc->qos_list && list_count(assoc->qos_list)) {
+	/* when modifying the qos it happens in the actual function
+	   since we have to wait until we hear about the parent first. */
+	if(qos_level == QOS_LEVEL_MODIFY) 
+		goto end_qos;
+
+	if(assoc->qos_list && list_count(assoc->qos_list)) {
 		char *qos_type = "qos";
 		char *qos_val = NULL;
 		char *tmp_char = NULL;
@@ -639,12 +643,10 @@ static int _setup_association_limits(acct_association_rec_t *assoc,
 			}
 			xstrfmtcat(qos_val, ",%s", tmp_char);
 		}
-
-		list_iterator_destroy(qos_itr);
-
-		xstrfmtcat(*cols, ", %s", qos_type);
 		
+		list_iterator_destroy(qos_itr);
 		
+		xstrfmtcat(*cols, ", %s", qos_type);		
 		xstrfmtcat(*vals, ", '%s'", qos_val); 		
 		xstrfmtcat(*extra, ", %s=\"%s\"", qos_type, qos_val); 
 		xfree(qos_val);
@@ -653,7 +655,13 @@ static int _setup_association_limits(acct_association_rec_t *assoc,
 		xstrcat(*cols, ", qos");
 		xstrfmtcat(*vals, ", '%s'", default_qos_str);
 		xstrfmtcat(*extra, ", qos=\"%s\"", default_qos_str);
+	} else {
+		/* clear the qos */
+		xstrcat(*cols, ", qos, delta_qos");
+		xstrcat(*vals, ", '', ''");
+		xstrcat(*extra, ", qos=\"\", delta_qos=\"\"");
 	}
+end_qos:
 
 	return SLURM_SUCCESS;
 
diff --git a/src/slurmctld/controller.c b/src/slurmctld/controller.c
index b967294cc71fdc7c9ec70d981f0d2e6675cd4868..0525daec34b6b45d1b5dce8063478a217ece9546 100644
--- a/src/slurmctld/controller.c
+++ b/src/slurmctld/controller.c
@@ -1105,8 +1105,7 @@ static void _remove_assoc(acct_association_rec_t *rec)
 {
 	int cnt = 0;
 
-	if (accounting_enforce & ACCOUNTING_ENFORCE_ASSOCS)
-		cnt = job_cancel_by_assoc_id(rec->id);
+	cnt = job_cancel_by_assoc_id(rec->id);
 
 	if (cnt) {
 		info("Removed association id:%u user:%s, cancelled %u jobs",