diff --git a/src/common/slurm_protocol_defs.c b/src/common/slurm_protocol_defs.c
index a9a3f2886f5769c6c8b0f402c653906a9c4de1be..8e99f01484bc8b81a6ef59be4a0abb7d31224194 100644
--- a/src/common/slurm_protocol_defs.c
+++ b/src/common/slurm_protocol_defs.c
@@ -111,17 +111,19 @@ extern void slurm_destroy_char(void *object)
 	xfree(tmp);
 }
 
-extern void slurm_addto_char_list(List char_list, char *names)
+/* returns number of objects added to list */
+extern int slurm_addto_char_list(List char_list, char *names)
 {
 	int i=0, start=0;
 	char *name = NULL, *tmp_char = NULL;
 	ListIterator itr = NULL;
 	char quote_c = '\0';
 	int quote = 0;
+	int count = 0;
 
 	if(!char_list) {
 		error("No list was given to fill in");
-		return;
+		return 0;
 	}
 
 	itr = list_iterator_create(char_list);
@@ -152,6 +154,7 @@ extern void slurm_addto_char_list(List char_list, char *names)
 					if(!tmp_char) {
 						_make_lower(name);
 						list_append(char_list, name);
+						count++;
 					} else 
 						xfree(name);
 					list_iterator_reset(itr);
@@ -178,11 +181,13 @@ extern void slurm_addto_char_list(List char_list, char *names)
 			if(!tmp_char) {
 				_make_lower(name);
 				list_append(char_list, name);
+				count++;
 			} else 
 				xfree(name);
 		}
 	}	
 	list_iterator_destroy(itr);
+	return count;
 } 
 
 void slurm_free_last_update_msg(last_update_msg_t * msg)
diff --git a/src/common/slurm_protocol_defs.h b/src/common/slurm_protocol_defs.h
index 83036f60ac943dd002258c78887a1f51260ea3f3..41793131688b80291f9d6bfab5f2e8f811933aa8 100644
--- a/src/common/slurm_protocol_defs.h
+++ b/src/common/slurm_protocol_defs.h
@@ -746,7 +746,7 @@ extern void slurm_msg_t_init (slurm_msg_t *msg);
 extern void slurm_msg_t_copy(slurm_msg_t *dest, slurm_msg_t *src);
 
 extern void slurm_destroy_char(void *object);
-extern void slurm_addto_char_list(List char_list, char *names);
+extern int slurm_addto_char_list(List char_list, char *names);
 
 /* free message functions */
 void inline slurm_free_checkpoint_tasks_msg(checkpoint_tasks_msg_t * msg);
diff --git a/src/sacctmgr/account_functions.c b/src/sacctmgr/account_functions.c
index eb780c04dd6172b6dcd77ff60bf5bee6a0e7a896..d63491eb3968ffa148451d8667f333fc537a878e 100644
--- a/src/sacctmgr/account_functions.c
+++ b/src/sacctmgr/account_functions.c
@@ -81,26 +81,27 @@ static int _set_cond(int *start, int argc, char *argv[],
 				acct_cond->assoc_cond->acct_list = 
 					list_create(slurm_destroy_char);
 			}
-			slurm_addto_char_list(acct_cond->assoc_cond->acct_list,
-					      argv[i]+end);
-			u_set = 1;
+			if(slurm_addto_char_list(
+				   acct_cond->assoc_cond->acct_list,
+				   argv[i]+end))
+				u_set = 1;
 		} else if (!strncasecmp (argv[i], "Clusters", 1)) {
 			if(!acct_cond->assoc_cond->cluster_list) {
 				acct_cond->assoc_cond->cluster_list = 
 					list_create(slurm_destroy_char);
 			}
-			slurm_addto_char_list(
-				acct_cond->assoc_cond->cluster_list,
-				argv[i]+end);
-			a_set = 1;
+			if(slurm_addto_char_list(
+				   acct_cond->assoc_cond->cluster_list,
+				   argv[i]+end))
+				a_set = 1;
 		} else if (!strncasecmp (argv[i], "Descriptions", 1)) {
 			if(!acct_cond->description_list) {
 				acct_cond->description_list = 
 					list_create(slurm_destroy_char);
 			}
-			slurm_addto_char_list(acct_cond->description_list,
-					argv[i]+end);
-			u_set = 1;
+			if(slurm_addto_char_list(acct_cond->description_list,
+						 argv[i]+end))
+				u_set = 1;
 		} else if (!strncasecmp (argv[i], "Format", 1)) {
 			if(format_list)
 				slurm_addto_char_list(format_list, argv[i]+end);
@@ -109,9 +110,9 @@ static int _set_cond(int *start, int argc, char *argv[],
 				acct_cond->organization_list = 
 					list_create(slurm_destroy_char);
 			}
-			slurm_addto_char_list(acct_cond->organization_list,
-					argv[i]+end);
-			u_set = 1;
+			if(slurm_addto_char_list(acct_cond->organization_list,
+						 argv[i]+end))
+				u_set = 1;
 		} else if (!strncasecmp (argv[i], "Parent", 1)) {
 			acct_cond->assoc_cond->parent_acct =
 				strip_quotes(argv[i]+end, NULL);
@@ -176,19 +177,19 @@ static int _set_rec(int *start, int argc, char *argv[],
 			u_set = 1;
 		} else if (!strncasecmp (argv[i], "FairShare", 1)) {
 			if (get_uint(argv[i]+end, &assoc->fairshare, 
-			    "FairShare") == SLURM_SUCCESS)
+				     "FairShare") == SLURM_SUCCESS)
 				a_set = 1;
 		} else if (!strncasecmp (argv[i], "MaxCPUSec", 4)) {
 			if (get_uint(argv[i]+end, &assoc->max_cpu_secs_per_job,
-			    "MaxCPUSec") == SLURM_SUCCESS)
+				     "MaxCPUSec") == SLURM_SUCCESS)
 				a_set = 1;
 		} else if (!strncasecmp (argv[i], "MaxJobs", 4)) {
 			if (get_uint(argv[i]+end, &assoc->max_jobs,
-			    "MaxJobs") == SLURM_SUCCESS)
+				     "MaxJobs") == SLURM_SUCCESS)
 				a_set = 1;
 		} else if (!strncasecmp (argv[i], "MaxNodes", 4)) {
 			if (get_uint(argv[i]+end, &assoc->max_nodes_per_job,
-			    "MaxNodes") == SLURM_SUCCESS)
+				     "MaxNodes") == SLURM_SUCCESS)
 				a_set = 1;
 		} else if (!strncasecmp (argv[i], "MaxWall", 4)) {
 			mins = time_str2mins(argv[i]+end);
@@ -198,7 +199,7 @@ static int _set_rec(int *start, int argc, char *argv[],
 				a_set = 1;
 			} else {
 				printf(" Bad MaxWall time format: %s\n", 
-					argv[i]);
+				       argv[i]);
 			}
 		} else if (!strncasecmp (argv[i], "Organization", 1)) {
 			acct->organization = strip_quotes(argv[i]+end, NULL);
@@ -1151,6 +1152,7 @@ extern int sacctmgr_delete_account(int argc, char *argv[])
 		xmalloc(sizeof(acct_account_cond_t));
 	int i=0;
 	List ret_list = NULL;
+	ListIterator itr = NULL;
 	int set = 0;
 	
 	if(!(set = _set_cond(&i, argc, argv, acct_cond, NULL))) {
@@ -1159,6 +1161,28 @@ extern int sacctmgr_delete_account(int argc, char *argv[])
 		return SLURM_ERROR;
 	}
 
+	/* check to see if person is trying to remove root account.  This is
+	 * bad, and should not be allowed outside of deleting a cluster.
+	 */
+	if(acct_cond->assoc_cond
+	   && acct_cond->assoc_cond->acct_list
+	   && list_count(acct_cond->assoc_cond->acct_list)) {
+		char *tmp_char = NULL;
+		itr = list_iterator_create(acct_cond->assoc_cond->acct_list);
+		while((tmp_char = list_next(itr))) {
+			if(!strcasecmp(tmp_char, "root")) 
+				break;
+		}
+		list_iterator_destroy(itr);
+		if(tmp_char) {
+			printf(" You are not allowed to remove "
+			       "the root account.\n"
+			       " Use remove cluster instead.\n");
+			destroy_acct_account_cond(acct_cond);
+			return SLURM_ERROR;
+		}
+	}
+
 	notice_thread_init();
 	if(set == 1) {
 		ret_list = acct_storage_g_remove_accounts(
diff --git a/src/sacctmgr/cluster_functions.c b/src/sacctmgr/cluster_functions.c
index 79309326c72dd9e9f143c6e5044d90300ea66ec4..90960ac7aa1271e900b1fb33983e4ab712ed8535 100644
--- a/src/sacctmgr/cluster_functions.c
+++ b/src/sacctmgr/cluster_functions.c
@@ -56,9 +56,9 @@ static int _set_cond(int *start, int argc, char *argv[],
 			continue;
 		} else if(!end || !strncasecmp (argv[i], "Names", 1)) {
 			if(cluster_list) {
-				slurm_addto_char_list(cluster_list,
-						      argv[i]+end);
-				set = 1;
+				if(slurm_addto_char_list(cluster_list,
+							 argv[i]+end))
+					set = 1;
 			}
 		} else if (!strncasecmp (argv[i], "Format", 1)) {
 			if(format_list)
diff --git a/src/sacctmgr/common.c b/src/sacctmgr/common.c
index 55efdb1841444aa6c45e4fc0ef28b10f8869ab84..d043fcdf95a6ccb7b492fda16daaaba06032a61b 100644
--- a/src/sacctmgr/common.c
+++ b/src/sacctmgr/common.c
@@ -540,8 +540,8 @@ extern int get_uint(char *in_value, uint32_t *out_value, char *type)
 	return SLURM_SUCCESS;
 }
 
-extern void addto_qos_char_list(List char_list, List qos_list, char *names, 
-				int option)
+extern int addto_qos_char_list(List char_list, List qos_list, char *names, 
+			       int option)
 {
 	int i=0, start=0;
 	char *name = NULL, *tmp_char = NULL;
@@ -549,15 +549,16 @@ extern void addto_qos_char_list(List char_list, List qos_list, char *names,
 	char quote_c = '\0';
 	int quote = 0;
 	uint32_t id=0;
+	int count = 0;
 
 	if(!char_list) {
 		error("No list was given to fill in");
-		return;
+		return 0;
 	}
 
 	if(!qos_list || !list_count(qos_list)) {
 		debug2("No real qos_list");
-		return;
+		return 0;
 	}
 
 	itr = list_iterator_create(char_list);
@@ -596,6 +597,7 @@ extern void addto_qos_char_list(List char_list, List qos_list, char *names,
 
 					if(!tmp_char) {
 						list_append(char_list, name);
+						count++;
 					} else 
 						xfree(name);
 				}
@@ -630,14 +632,16 @@ extern void addto_qos_char_list(List char_list, List qos_list, char *names,
 					break;
 			}
 			
-			if(!tmp_char)
+			if(!tmp_char) {
 				list_append(char_list, name);
-			else 
+				count++;
+			} else 
 				xfree(name);
 		}
 	}	
 end_it:
 	list_iterator_destroy(itr);
+	return count;
 } 
 
 extern void sacctmgr_print_coord_list(print_field_t *field, List value)
diff --git a/src/sacctmgr/qos_functions.c b/src/sacctmgr/qos_functions.c
index 3b9b1d398a106a2b7d5bc54dee82dad15f056b18..9be093173d05d15ae0617fb34249d7ff49253465 100644
--- a/src/sacctmgr/qos_functions.c
+++ b/src/sacctmgr/qos_functions.c
@@ -66,23 +66,25 @@ static int _set_cond(int *start, int argc, char *argv[],
 				qos_cond->name_list = 
 					list_create(slurm_destroy_char);
 			}
-			slurm_addto_char_list(qos_cond->name_list, argv[i]+end);
-			set = 1;
+			if(slurm_addto_char_list(qos_cond->name_list,
+						 argv[i]+end))
+				set = 1;
 		} else if(!strncasecmp (argv[i], "Descriptions", 1)) {
 			if(!qos_cond->description_list) {
 				qos_cond->description_list = 
 					list_create(slurm_destroy_char);
 			}
-			slurm_addto_char_list(qos_cond->description_list,
-					      argv[i]+end);
-			set = 1;
+			if(slurm_addto_char_list(qos_cond->description_list,
+						 argv[i]+end))
+				set = 1;
 		} else if(!strncasecmp (argv[i], "Ids", 1)) {
 			if(!qos_cond->id_list) {
 				qos_cond->id_list = 
 					list_create(slurm_destroy_char);
 			}
-			slurm_addto_char_list(qos_cond->id_list, argv[i]+end);
-			set = 1;
+			if(slurm_addto_char_list(qos_cond->id_list, 
+						 argv[i]+end))
+				set = 1;
 		} else {
 			printf(" Unknown condition: %s\n"
 			       " Use keyword 'set' to modify "
diff --git a/src/sacctmgr/sacctmgr.h b/src/sacctmgr/sacctmgr.h
index 342c1083a6ff409fbfdc7d01949d28a3f0371ae1..b935efa51b0c21ca75837f7e8c8f3d3d19d3aee3 100644
--- a/src/sacctmgr/sacctmgr.h
+++ b/src/sacctmgr/sacctmgr.h
@@ -144,8 +144,8 @@ extern int notice_thread_init();
 extern int notice_thread_fini();
 extern int commit_check(char *warning);
 extern int get_uint(char *in_value, uint32_t *out_value, char *type);
-extern void addto_qos_char_list(List char_list, List qos_list, char *names, 
-				int option);
+extern int addto_qos_char_list(List char_list, List qos_list, char *names, 
+			       int option);
 extern void sacctmgr_print_coord_list(print_field_t *field, List value);
 extern void sacctmgr_print_qos_list(print_field_t *field, List qos_list,
 				    List value);
diff --git a/src/sacctmgr/txn_functions.c b/src/sacctmgr/txn_functions.c
index e15ba87851ae3954cbbaaea2ffa97e781554ab36..3322040b930d9fa3144b8fab4af2f87bc7099e3f 100644
--- a/src/sacctmgr/txn_functions.c
+++ b/src/sacctmgr/txn_functions.c
@@ -58,25 +58,26 @@ static int _set_cond(int *start, int argc, char *argv[],
 				txn_cond->id_list = 
 					list_create(slurm_destroy_char);
 			
-			slurm_addto_char_list(txn_cond->id_list, argv[i]+end);
-			set = 1;
+			if(slurm_addto_char_list(txn_cond->id_list, 
+						 argv[i]+end))
+				set = 1;
 		} else if (!strncasecmp (argv[i], "Action", 4)) {
 			/* FIX ME! fill this in */
 /* 			if(!txn_cond->action_list) */
 /* 				txn_cond->action_list =  */
 /* 					list_create(slurm_destroy_char); */
 
-/* 			slurm_addto_char_list(txn_cond->action_list, */
-/* 					argv[i]+end); */
+/* 			if(slurm_addto_char_list(txn_cond->action_list, */
+/* 					argv[i]+end)) */
 /* 			set = 1; */
 		} else if (!strncasecmp (argv[i], "Actors", 4)
 			   || !strncasecmp (argv[i], "User", 1)) {
 			if(!txn_cond->actor_list)
 				txn_cond->actor_list =
 					list_create(slurm_destroy_char);
-			slurm_addto_char_list(txn_cond->actor_list,
-					argv[i]+end);
-			set = 1;
+			if(slurm_addto_char_list(txn_cond->actor_list,
+						 argv[i]+end))
+				set = 1;
 		} else if (!strncasecmp (argv[i], "Format", 1)) {
 			if(format_list)
 				slurm_addto_char_list(format_list, argv[i]+end);
diff --git a/src/sacctmgr/user_functions.c b/src/sacctmgr/user_functions.c
index 41e7afcff40cce41220228207e58a32b6183d1d8..c5a2d9339b06502b6beb31d7fb51de83365b7759 100644
--- a/src/sacctmgr/user_functions.c
+++ b/src/sacctmgr/user_functions.c
@@ -81,17 +81,19 @@ static int _set_cond(int *start, int argc, char *argv[],
 				user_cond->assoc_cond->user_list = 
 					list_create(slurm_destroy_char);
 			}
-			slurm_addto_char_list(user_cond->assoc_cond->user_list,
-					      argv[i]+end);
-			u_set = 1;
+			if(slurm_addto_char_list(
+				   user_cond->assoc_cond->user_list,
+				   argv[i]+end))
+				u_set = 1;
 		} else if (!strncasecmp (argv[i], "Account", 2)) {
 			if(!user_cond->assoc_cond->acct_list) {
 				user_cond->assoc_cond->acct_list = 
 					list_create(slurm_destroy_char);
 			}
-			slurm_addto_char_list(user_cond->assoc_cond->acct_list,
-					argv[i]+end);
-			a_set = 1;
+			if(slurm_addto_char_list(
+				   user_cond->assoc_cond->acct_list,
+				   argv[i]+end))
+				a_set = 1;
 		} else if (!strncasecmp (argv[i], "AdminLevel", 2)) {
 			user_cond->admin_level = 
 				str_2_acct_admin_level(argv[i]+end);
@@ -101,17 +103,18 @@ static int _set_cond(int *start, int argc, char *argv[],
 				user_cond->assoc_cond->cluster_list = 
 					list_create(slurm_destroy_char);
 			}
-			slurm_addto_char_list(user_cond->assoc_cond->cluster_list,
-					argv[i]+end);
-			a_set = 1;
+			if(slurm_addto_char_list(
+				   user_cond->assoc_cond->cluster_list,
+				   argv[i]+end))
+				a_set = 1;
 		} else if (!strncasecmp (argv[i], "DefaultAccount", 1)) {
 			if(!user_cond->def_acct_list) {
 				user_cond->def_acct_list = 
 					list_create(slurm_destroy_char);
 			}
-			slurm_addto_char_list(user_cond->def_acct_list,
-					argv[i]+end);
-			u_set = 1;
+			if(slurm_addto_char_list(user_cond->def_acct_list,
+						 argv[i]+end))
+				u_set = 1;
 		} else if (!strncasecmp (argv[i], "Format", 1)) {
 			if(format_list)
 				slurm_addto_char_list(format_list, argv[i]+end);
@@ -120,9 +123,10 @@ static int _set_cond(int *start, int argc, char *argv[],
 				user_cond->assoc_cond->partition_list = 
 					list_create(slurm_destroy_char);
 			}
-			slurm_addto_char_list(user_cond->assoc_cond->partition_list, 
-					argv[i]+end);
-			a_set = 1;
+			if(slurm_addto_char_list(
+				   user_cond->assoc_cond->partition_list, 
+				   argv[i]+end))
+				a_set = 1;
 		} else if (!strncasecmp (argv[i], "QosLevel", 1)) {
 			int option = 0;
 			if(!user_cond->qos_list) {
@@ -188,14 +192,14 @@ static int _set_rec(int *start, int argc, char *argv[],
 			if(!association)
 				continue;
 			if (get_uint(argv[i]+end, &association->fairshare, 
-			    "FairShare") == SLURM_SUCCESS)
+				     "FairShare") == SLURM_SUCCESS)
 				a_set = 1;
 		} else if (!strncasecmp (argv[i], "MaxCPUSec", 4)) {
 			if(!association)
 				continue;
 			if (get_uint(argv[i]+end, 
-			     &association->max_cpu_secs_per_job, 
-			    "MaxCPUSec") == SLURM_SUCCESS)
+				     &association->max_cpu_secs_per_job, 
+				     "MaxCPUSec") == SLURM_SUCCESS)
 				a_set = 1;
 		} else if (!strncasecmp (argv[i], "MaxJobs", 4)) {
 			if(!association)