diff --git a/NEWS b/NEWS
index bc4083dd7705462a7271aac01103adfe4238fe3c..02840a0c709555b90d9767fd9404c3f129f45884 100644
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,7 @@ documents those changes that are of interest to users and admins.
  -- forward exit_code from step completion to slurmdbd
  -- Add retry logic to socket connect() call from client which can fail 
     when the slurmctld is under heavy load.
+ -- Fixed bug when adding associations to add correctly
  
 * Changes in SLURM 1.3.3
 ========================
diff --git a/src/common/assoc_mgr.c b/src/common/assoc_mgr.c
index 97783e883de3faebd4a0f5be5a03440ab1c888c0..7476658175deedf1432223f2a8f6f97deb1066cd 100644
--- a/src/common/assoc_mgr.c
+++ b/src/common/assoc_mgr.c
@@ -50,6 +50,35 @@ static char *local_cluster_name = NULL;
 static pthread_mutex_t local_association_lock = PTHREAD_MUTEX_INITIALIZER;
 static pthread_mutex_t local_user_lock = PTHREAD_MUTEX_INITIALIZER;
 
+/* locks should be put in place before calling this function */
+static int _set_assoc_parent_and_user(acct_association_rec_t *assoc)
+{
+	if(!assoc) {
+		error("you didn't give me an association");
+		return SLURM_ERROR;
+	}
+
+	if(assoc->parent_id) {
+		acct_association_rec_t *assoc2 = NULL;
+		ListIterator itr = list_iterator_create(local_association_list);
+		while((assoc2 = list_next(itr))) {
+			if(assoc2->id == assoc->parent_id) {
+				assoc->parent_acct_ptr = assoc2;
+				break;
+			}
+		}
+		list_iterator_destroy(itr);
+	}
+	if(assoc->user) {
+		struct passwd *passwd_ptr = getpwnam(assoc->user);
+		if(passwd_ptr) 
+			assoc->uid = passwd_ptr->pw_uid;
+	}
+	//log_assoc_rec(assoc);
+
+	return SLURM_SUCCESS;
+}
+
 static int _get_local_association_list(void *db_conn, int enforce)
 {
 	acct_association_cond_t assoc_q;
@@ -97,31 +126,10 @@ static int _get_local_association_list(void *db_conn, int enforce)
 		}
 	} else {
 		acct_association_rec_t *assoc = NULL;
-		acct_association_rec_t *assoc2 = NULL;
-		struct passwd *passwd_ptr = NULL;
 		ListIterator itr = list_iterator_create(local_association_list);
-		ListIterator itr2 = 
-			list_iterator_create(local_association_list);
 		//START_TIMER;
-		while((assoc = list_next(itr))) {
-			if(assoc->parent_id) {
-				while((assoc2 = list_next(itr2))) {
-					if(assoc2->id == assoc->parent_id) {
-						assoc->parent_acct_ptr = assoc2;
-						break;
-					}
-				}
-				list_iterator_reset(itr2);
-			}
-			if(!assoc->user) {
-				continue;
-			}
-			passwd_ptr = getpwnam(assoc->user);
-			if(passwd_ptr) 
-				assoc->uid = passwd_ptr->pw_uid;
-			//log_assoc_rec(assoc);
-		}
-		list_iterator_destroy(itr2);
+		while((assoc = list_next(itr))) 
+			_set_assoc_parent_and_user(assoc);
 		list_iterator_destroy(itr);
 		//END_TIMER2("load_associations");
 	}
@@ -536,6 +544,7 @@ extern int assoc_mgr_update_local_assocs(acct_update_object_t *update)
 				//rc = SLURM_ERROR;
 				break;
 			}
+			_set_assoc_parent_and_user(object);
 			list_append(local_association_list, object);
 		case ACCT_REMOVE_ASSOC:
 			if(!rec) {
@@ -622,6 +631,7 @@ extern int assoc_mgr_update_local_users(acct_update_object_t *update)
 				//rc = SLURM_ERROR;
 				break;
 			}
+			info("adding user %s here", object->name);
 			list_append(local_user_list, object);
 		case ACCT_REMOVE_USER:
 			if(!rec) {
diff --git a/src/sacctmgr/account_functions.c b/src/sacctmgr/account_functions.c
index ed0e3d916b9907c650fca3756c75f1ad71137b08..f055f4b9bb8233ec4c2454dbfd6e5bfcd39d9b0d 100644
--- a/src/sacctmgr/account_functions.c
+++ b/src/sacctmgr/account_functions.c
@@ -83,7 +83,7 @@ static int _set_cond(int *start, int argc, char *argv[],
 			u_set = 1;
 		} else if (strncasecmp (argv[i], "Parent", 1) == 0) {
 			acct_cond->assoc_cond->parent_acct =
-				xstrdup(argv[i]+end);
+				strip_quotes(argv[i]+end, NULL);
 			a_set = 1;
 		} else if (strncasecmp (argv[i], "QosLevel", 1) == 0) {
 			acct_cond->qos = str_2_acct_qos(argv[i]+end);
@@ -122,7 +122,7 @@ static int _set_rec(int *start, int argc, char *argv[],
 			printf(" Bad format on %s: End your option with "
 			       "an '=' sign\n", argv[i]);
 		} else if (strncasecmp (argv[i], "Description", 1) == 0) {
-			acct->description = xstrdup(argv[i]+end);
+			acct->description =  strip_quotes(argv[i]+end, NULL);
 			u_set = 1;
 		} else if (strncasecmp (argv[i], "FairShare", 1) == 0) {
 			if (get_uint(argv[i]+end, &assoc->fairshare, 
@@ -151,10 +151,10 @@ static int _set_rec(int *start, int argc, char *argv[],
 					argv[i]);
 			}
 		} else if (strncasecmp (argv[i], "Organization", 1) == 0) {
-			acct->organization = xstrdup(argv[i]+end);
+			acct->organization = strip_quotes(argv[i]+end, NULL);
 			u_set = 1;
 		} else if (strncasecmp (argv[i], "Parent", 1) == 0) {
-			assoc->parent_acct = xstrdup(argv[i]+end);
+			assoc->parent_acct = strip_quotes(argv[i]+end, NULL);
 			a_set = 1;
 		} else if (strncasecmp (argv[i], "QosLevel=", 1) == 0) {
 			acct->qos = str_2_acct_qos(argv[i]+end);
@@ -275,7 +275,7 @@ extern int sacctmgr_add_account(int argc, char *argv[])
 		} else if (strncasecmp (argv[i], "Cluster", 1) == 0) {
 			addto_char_list(cluster_list, argv[i]+end);
 		} else if (strncasecmp (argv[i], "Description", 1) == 0) {
-			description = xstrdup(argv[i]+end);
+			description = strip_quotes(argv[i]+end, NULL);
 		} else if (strncasecmp (argv[i], "FairShare", 1) == 0) {
 			if (get_uint(argv[i]+end, &fairshare, 
 			    "FairShare") == SLURM_SUCCESS)
@@ -304,9 +304,9 @@ extern int sacctmgr_add_account(int argc, char *argv[])
 		} else if (strncasecmp (argv[i], "Names", 1) == 0) {
 			addto_char_list(name_list, argv[i]+end);
 		} else if (strncasecmp (argv[i], "Organization", 1) == 0) {
-			organization = xstrdup(argv[i]+end);
+			organization = strip_quotes(argv[i]+end, NULL);
 		} else if (strncasecmp (argv[i], "Parent", 1) == 0) {
-			parent = xstrdup(argv[i]+end);
+			parent = strip_quotes(argv[i]+end, NULL);
 		} else if (strncasecmp (argv[i], "QosLevel", 1) == 0) {
 			qos = str_2_acct_qos(argv[i]+end);
 		} else {
diff --git a/src/sacctmgr/user_functions.c b/src/sacctmgr/user_functions.c
index 30bd04206259375e12c1bf9fc3147d7a2022327a..e1cf404d368940081400d3a7f87e8780e23a4ece 100644
--- a/src/sacctmgr/user_functions.c
+++ b/src/sacctmgr/user_functions.c
@@ -129,7 +129,7 @@ static int _set_rec(int *start, int argc, char *argv[],
 				str_2_acct_admin_level(argv[i]+end);
 			u_set = 1;
 		} else if (strncasecmp (argv[i], "DefaultAccount", 1) == 0) {
-			user->default_acct = xstrdup(argv[i]+end);
+			user->default_acct = strip_quotes(argv[i]+end, NULL);
 			u_set = 1;
 		} else if (strncasecmp (argv[i], "FairShare", 1) == 0) {
 			if (get_uint(argv[i]+end, &association->fairshare, 
@@ -295,9 +295,9 @@ extern int sacctmgr_add_user(int argc, char *argv[])
 			addto_char_list(assoc_cond->cluster_list,
 					argv[i]+end);
 		} else if (strncasecmp (argv[i], "DefaultAccount", 1) == 0) {
-			default_acct = xstrdup(argv[i]+end);
+			default_acct = strip_quotes(argv[i]+end, NULL);
 			addto_char_list(assoc_cond->acct_list,
-					argv[i]+end);
+					default_acct);
 		} else if (strncasecmp (argv[i], "FairShare", 1) == 0) {
 			if (get_uint(argv[i]+end, &fairshare, 
 			    "FairShare") == SLURM_SUCCESS)