diff --git a/src/common/assoc_mgr.c b/src/common/assoc_mgr.c
index cfc3b68b2a0507c363790f1bc2ff26bc461df345..68c7790aa18168e754d9f1e0b63f40f4be5ebc9c 100644
--- a/src/common/assoc_mgr.c
+++ b/src/common/assoc_mgr.c
@@ -75,40 +75,45 @@ static pthread_cond_t locks_cond = PTHREAD_COND_INITIALIZER;
  */
 static int _sort_assoc_dec(slurmdb_association_rec_t *assoc_a,
 			   slurmdb_association_rec_t *assoc_b)
-{
-	if (assoc_a->lft > assoc_b->lft)
-		return 1;
-
-	return -1;
-}
-
-/*
- * Comparator used for sorting immediate childern of acct_hierarchical_recs
- *
- * returns: -1: assoc_a > assoc_b   0: assoc_a == assoc_b   1: assoc_a < assoc_b
- *
- */
-
-static int _sort_shares_dec(association_shares_object_t *share_a,
-			    association_shares_object_t *share_b)
 {
 	int diff = 0;
+	char *name_a, *name_b;
+
+	/* Previously we only sorted by lft, as done here.  Then we
+	   needed to get a prettier list from sshare.  Instead of
+	   sorting things over and over again we only sort them when
+	   changes happen, so this is less intense since things only
+	   change rarely.
+	*/
+	/* if (assoc_a->lft > assoc_b->lft) */
+	/* 	return 1; */
+	/* return -1; */
 
 	/* first just check the lfts and rgts if a lft is inside of the
 	 * others lft and rgt just return it is less
 	 */
-	if ((share_a->lft > share_b->lft) && (share_a->lft < share_b->rgt))
+	if ((assoc_a->lft > assoc_b->lft) && (assoc_a->lft < assoc_b->rgt))
 		return 1;
 
 	/* check to see if this is a user association or an account.
 	 * We want the accounts at the bottom
 	 */
-	if(share_a->user && !share_b->user)
+	if (assoc_a->user && !assoc_b->user)
 		return -1;
-	else if(!share_a->user && share_b->user)
+	else if (!assoc_a->user && assoc_b->user)
 		return 1;
 
-	diff = strcmp(share_a->name, share_b->name);
+	if(assoc_a->user)
+		name_a = assoc_a->user;
+	else
+		name_a = assoc_a->acct;
+
+	if(assoc_b->user)
+		name_b = assoc_b->user;
+	else
+		name_b = assoc_b->acct;
+
+	diff = strcmp(name_a, name_b);
 
 	if (diff < 0)
 		return -1;
@@ -116,7 +121,6 @@ static int _sort_shares_dec(association_shares_object_t *share_a,
 		return 1;
 
 	return 0;
-
 }
 
 /* you should check for assoc == NULL before this function */
@@ -537,6 +541,9 @@ static int _post_association_list(List assoc_list)
 			_normalize_assoc_shares(assoc);
 	}
 	list_iterator_destroy(itr);
+
+	list_sort(assoc_list, (ListCmpF)_sort_assoc_dec);
+
 	//END_TIMER2("load_associations");
 	return SLURM_SUCCESS;
 }
@@ -2078,8 +2085,9 @@ end_it:
 	if(acct_itr)
 		list_iterator_destroy(acct_itr);
 
-	list_sort(ret_list, (ListCmpF)_sort_shares_dec);
-
+	/* The ret_list should already be sorted correctly, so no need
+	   to do it again.
+	*/
 	return ret_list;
 }