diff --git a/NEWS b/NEWS
index 1afd980e89176a62d9afc0aa496a157ade8d443b..e115339b7027f7255269898f4930912fa9138955 100644
--- a/NEWS
+++ b/NEWS
@@ -304,6 +304,9 @@ documents those changes that are of interest to users and administrators.
     can work on a BGAS node.
  -- Prevent job stuck in configuring state if slurmctld daemon restarted while
     PrologSlurmctld is running.
+ -- Handle association correctly if using FAIR_TREE as well as shares=Parent
+ -- Fix race condition when setting priority of a job and the association
+    doesn't have a parent.
 
 * Changes in Slurm 15.08.12
 ===========================
diff --git a/src/common/assoc_mgr.c b/src/common/assoc_mgr.c
index 622320750723c165fd6ca864345e35ee12aa86e2..707063badd139332db2e04a9714afae5a45b73f4 100644
--- a/src/common/assoc_mgr.c
+++ b/src/common/assoc_mgr.c
@@ -315,8 +315,11 @@ static void _normalize_assoc_shares_fair_tree(
 {
 	slurmdb_assoc_rec_t *fs_assoc = assoc;
 	double shares_norm = 0.0;
-	if (assoc->shares_raw == SLURMDB_FS_USE_PARENT)
+
+	if ((assoc->shares_raw == SLURMDB_FS_USE_PARENT)
+	    && assoc->usage->fs_assoc_ptr)
 		fs_assoc = assoc->usage->fs_assoc_ptr;
+
 	if (fs_assoc->usage->level_shares)
 		shares_norm =
 			(double)fs_assoc->shares_raw /
diff --git a/src/plugins/priority/multifactor/priority_multifactor.c b/src/plugins/priority/multifactor/priority_multifactor.c
index cc7c4d71ab0b6c193e9f2b16e1727b1896a3f4c5..d8c0a72db39ccf92e944dfbfa324f92e59925167 100644
--- a/src/plugins/priority/multifactor/priority_multifactor.c
+++ b/src/plugins/priority/multifactor/priority_multifactor.c
@@ -430,8 +430,7 @@ static int _set_children_usage_efctv(List children_list)
  */
 static double _get_fairshare_priority(struct job_record *job_ptr)
 {
-	slurmdb_assoc_rec_t *job_assoc =
-		(slurmdb_assoc_rec_t *)job_ptr->assoc_ptr;
+	slurmdb_assoc_rec_t *job_assoc;
 	slurmdb_assoc_rec_t *fs_assoc = NULL;
 	double priority_fs = 0.0;
 	assoc_mgr_lock_t locks = { READ_LOCK, NO_LOCK, NO_LOCK, NO_LOCK,
@@ -440,7 +439,12 @@ static double _get_fairshare_priority(struct job_record *job_ptr)
 	if (!calc_fairshare)
 		return 0;
 
+	assoc_mgr_lock(&locks);
+
+	job_assoc = (slurmdb_assoc_rec_t *)job_ptr->assoc_ptr;
+
 	if (!job_assoc) {
+		assoc_mgr_unlock(&locks);
 		error("Job %u has no association.  Unable to "
 		      "compute fairshare.", job_ptr->job_id);
 		return 0;
@@ -452,8 +456,6 @@ static double _get_fairshare_priority(struct job_record *job_ptr)
 	else
 		fs_assoc = job_assoc;
 
-	assoc_mgr_lock(&locks);
-
 	if (fuzzy_equal(fs_assoc->usage->usage_efctv, NO_VAL))
 		priority_p_set_assoc_usage(fs_assoc);