diff --git a/src/sacctmgr/account_functions.c b/src/sacctmgr/account_functions.c
index 768b5206ff9b82079d034ffd932b3eac78ad4de8..d75c1920223db74d603b7c2cde1be4842f5a4150 100644
--- a/src/sacctmgr/account_functions.c
+++ b/src/sacctmgr/account_functions.c
@@ -76,38 +76,38 @@ static int _set_cond(int *start, int argc, char *argv[],
 			}
 		}
 
-		if (!strncasecmp (argv[i], "Set", MAX(command_len, 3))) {
+		if (!strncasecmp(argv[i], "Set", MAX(command_len, 3))) {
 			i--;
 			break;
 		} else if (!end &&
-			   !strncasecmp (argv[i], "WithAssoc",
+			   !strncasecmp(argv[i], "WithAssoc",
 					 MAX(command_len, 5))) {
 			acct_cond->with_assocs = 1;
 		} else if (!end &&
-			   !strncasecmp (argv[i], "WithCoordinators",
+			   !strncasecmp(argv[i], "WithCoordinators",
 					 MAX(command_len, 5))) {
 			acct_cond->with_coords = 1;
 		} else if (!end &&
-			   !strncasecmp (argv[i], "WithDeleted",
+			   !strncasecmp(argv[i], "WithDeleted",
 					 MAX(command_len, 5))) {
 			acct_cond->with_deleted = 1;
 			assoc_cond->with_deleted = 1;
 		} else if (!end &&
-			   !strncasecmp (argv[i], "WithRawQOSLevel",
+			   !strncasecmp(argv[i], "WithRawQOSLevel",
 					 MAX(command_len, 5))) {
 			assoc_cond->with_raw_qos = 1;
-		} else if (!end && !strncasecmp (argv[i], "WOPLimits",
+		} else if (!end && !strncasecmp(argv[i], "WOPLimits",
 						 MAX(command_len, 4))) {
 			assoc_cond->without_parent_limits = 1;
 		} else if(!end && !strncasecmp(argv[i], "where",
 					       MAX(command_len, 5))) {
 			continue;
 		} else if(!end
-			  || !strncasecmp (argv[i], "Names",
+			  || !strncasecmp(argv[i], "Names",
 					   MAX(command_len, 1))
-			  || !strncasecmp (argv[i], "Accounts",
+			  || !strncasecmp(argv[i], "Accounts",
 					   MAX(command_len, 1))
-			  || !strncasecmp (argv[i], "Acct",
+			  || !strncasecmp(argv[i], "Acct",
 					   MAX(command_len, 4))) {
 			if(!assoc_cond->acct_list) {
 				assoc_cond->acct_list =
@@ -117,35 +117,7 @@ static int _set_cond(int *start, int argc, char *argv[],
 				   assoc_cond->acct_list,
 				   argv[i]+end))
 				u_set = 1;
-		} else if (!strncasecmp (argv[i], "Clusters",
-					 MAX(command_len, 1))) {
-			if(!assoc_cond->cluster_list) {
-				assoc_cond->cluster_list =
-					list_create(slurm_destroy_char);
-			}
-			if(slurm_addto_char_list(
-				   assoc_cond->cluster_list,
-				   argv[i]+end))
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "DefaultQOS",
-					 MAX(command_len, 8))) {
-			if(!assoc_cond->def_qos_id_list) {
-				assoc_cond->def_qos_id_list =
-					list_create(slurm_destroy_char);
-			}
-			if(!g_qos_list) {
-				g_qos_list = acct_storage_g_get_qos(
-					db_conn, my_uid, NULL);
-			}
-
-			if(slurmdb_addto_qos_char_list(
-				   assoc_cond->def_qos_id_list,
-				   g_qos_list,
-				   argv[i]+end, 0))
-				a_set = 1;
-			else
-				exit_code = 1;
-		} else if (!strncasecmp (argv[i], "Descriptions",
+		} else if (!strncasecmp(argv[i], "Descriptions",
 					 MAX(command_len, 1))) {
 			if(!acct_cond->description_list) {
 				acct_cond->description_list =
@@ -154,125 +126,11 @@ static int _set_cond(int *start, int argc, char *argv[],
 			if(slurm_addto_char_list(acct_cond->description_list,
 						 argv[i]+end))
 				u_set = 1;
-		} else if (!strncasecmp (argv[i], "Format",
+		} else if (!strncasecmp(argv[i], "Format",
 					 MAX(command_len, 1))) {
 			if(format_list)
 				slurm_addto_char_list(format_list, argv[i]+end);
-		} else if (!strncasecmp (argv[i], "FairShare",
-					 MAX(command_len, 1))
-			   || !strncasecmp (argv[i], "Shares",
-					    MAX(command_len, 1))) {
-			if(!assoc_cond->fairshare_list)
-				assoc_cond->fairshare_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(assoc_cond->fairshare_list,
-						 argv[i]+end))
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpCPUMins",
-					 MAX(command_len, 7))) {
-			if(!assoc_cond->grp_cpu_mins_list)
-				assoc_cond->grp_cpu_mins_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(assoc_cond->grp_cpu_mins_list,
-						 argv[i]+end))
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpCpus",
-					 MAX(command_len, 7))) {
-			if(!assoc_cond->grp_cpus_list)
-				assoc_cond->grp_cpus_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(assoc_cond->grp_cpus_list,
-						 argv[i]+end))
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpJobs",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->grp_jobs_list)
-				assoc_cond->grp_jobs_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(assoc_cond->grp_jobs_list,
-						 argv[i]+end))
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpNodes",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->grp_nodes_list)
-				assoc_cond->grp_nodes_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(assoc_cond->grp_nodes_list,
-						 argv[i]+end))
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpSubmitJobs",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->grp_submit_jobs_list)
-				assoc_cond->grp_submit_jobs_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->grp_submit_jobs_list,
-				   argv[i]+end))
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpWall",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->grp_wall_list)
-				assoc_cond->grp_wall_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->grp_wall_list,
-				   argv[i]+end))
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxCPUMinsPerJob",
-					 MAX(command_len, 7))) {
-			if(!assoc_cond->max_cpu_mins_pj_list)
-				assoc_cond->max_cpu_mins_pj_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->max_cpu_mins_pj_list,
-				   argv[i]+end))
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxCpusPerJob",
-					 MAX(command_len, 7))) {
-			if(!assoc_cond->max_cpus_pj_list)
-				assoc_cond->max_cpus_pj_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->max_cpus_pj_list,
-				   argv[i]+end))
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxJobs",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->max_jobs_list)
-				assoc_cond->max_jobs_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->max_jobs_list,
-				   argv[i]+end))
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxNodesPerJob",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->max_nodes_pj_list)
-				assoc_cond->max_nodes_pj_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->max_nodes_pj_list,
-				   argv[i]+end))
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxSubmitJobs",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->max_submit_jobs_list)
-				assoc_cond->max_submit_jobs_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->max_submit_jobs_list,
-				   argv[i]+end))
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxWallDurationPerJob",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->max_wall_pj_list)
-				assoc_cond->max_wall_pj_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->max_wall_pj_list,
-				   argv[i]+end))
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "Organizations",
+		} else if (!strncasecmp(argv[i], "Organizations",
 					 MAX(command_len, 1))) {
 			if(!acct_cond->organization_list) {
 				acct_cond->organization_list =
@@ -281,42 +139,13 @@ static int _set_cond(int *start, int argc, char *argv[],
 			if(slurm_addto_char_list(acct_cond->organization_list,
 						 argv[i]+end))
 				u_set = 1;
-		} else if (!strncasecmp (argv[i], "Parent",
-					 MAX(command_len, 1))) {
-			if(!assoc_cond->parent_acct_list) {
-				assoc_cond->parent_acct_list =
-					list_create(slurm_destroy_char);
-			}
-			if(slurm_addto_char_list(assoc_cond->parent_acct_list,
-						 argv[i]+end))
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "QosLevel",
-					 MAX(command_len, 1))) {
-			if(!assoc_cond->qos_list) {
-				assoc_cond->qos_list =
-					list_create(slurm_destroy_char);
-			}
-
-			if(!g_qos_list) {
-				g_qos_list = acct_storage_g_get_qos(
-					db_conn, my_uid, NULL);
-			}
-
-			if(slurmdb_addto_qos_char_list(assoc_cond->qos_list,
-						       g_qos_list,
-						       argv[i]+end, option))
-				a_set = 1;
-			else {
-				exit_code = 1;
-				fprintf(stderr,
-					" Bad QosLevel value: %s\n",
-					argv[i]+end);
-			}
-		} else {
+		} else if(!(a_set = sacctmgr_set_association_cond(
+				    assoc_cond, argv[i], argv[i]+end,
+				    command_len))) {
 			exit_code=1;
 			fprintf(stderr, " Unknown condition: %s\n"
-				" Use keyword 'set' to modify "
-				"SLURM_PRINT_VALUE\n", argv[i]);
+				" Use keyword 'set' to modify value\n",
+				argv[i]);
 		}
 	}
 
@@ -338,7 +167,7 @@ static int _set_rec(int *start, int argc, char *argv[],
 		    slurmdb_account_rec_t *acct,
 		    slurmdb_association_rec_t *assoc)
 {
-	int i, mins;
+	int i;
 	int u_set = 0;
 	int a_set = 0;
 	int end = 0;
@@ -357,18 +186,18 @@ static int _set_rec(int *start, int argc, char *argv[],
 			}
 		}
 
-		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))) {
+		if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))) {
 			i--;
 			break;
 		} else if(!end && !strncasecmp(argv[i], "set",
 					       MAX(command_len, 3))) {
 			continue;
 		} else if(!end
-			  || !strncasecmp (argv[i], "Account",
+			  || !strncasecmp(argv[i], "Account",
 					   MAX(command_len, 1))
-			  || !strncasecmp (argv[i], "Names",
+			  || !strncasecmp(argv[i], "Names",
 					   MAX(command_len, 1))
-			  || !strncasecmp (argv[i], "Acct",
+			  || !strncasecmp(argv[i], "Acct",
 					   MAX(command_len, 4))) {
 			if(acct_list)
 				slurm_addto_char_list(acct_list, argv[i]+end);
@@ -378,7 +207,7 @@ static int _set_rec(int *start, int argc, char *argv[],
 					" Can't modify the name "
 					"of an account\n");
 			}
-		} else if (!strncasecmp (argv[i], "Cluster",
+		} else if (!strncasecmp(argv[i], "Cluster",
 					 MAX(command_len, 1))) {
 			if(cluster_list)
 				slurm_addto_char_list(cluster_list,
@@ -389,179 +218,18 @@ static int _set_rec(int *start, int argc, char *argv[],
 					" Can't modify the cluster "
 					"of an account\n");
 			}
-		} else if (!strncasecmp (argv[i], "DefaultQOS",
-					 MAX(command_len, 8))) {
-			if(!assoc)
-				continue;
-
-			if(!g_qos_list) {
-				g_qos_list = acct_storage_g_get_qos(
-					db_conn, my_uid, NULL);
-			}
-
-			if(atoi(argv[i]+end) == -1)
-				assoc->def_qos_id = -1;
-			else
-				assoc->def_qos_id = str_2_slurmdb_qos(
-					g_qos_list, argv[i]+end);
-
-			if(assoc->def_qos_id == NO_VAL) {
-				fprintf(stderr,
-					"You gave a bad qos '%s'.  "
-					"Use 'list qos' to get "
-					"complete list.\n",
-					argv[i]+end);
-				exit_code = 1;
-				break;
-			}
-			a_set = 1;
-		} else if (!strncasecmp (argv[i], "Description",
+		} else if (!strncasecmp(argv[i], "Description",
 					 MAX(command_len, 1))) {
 			acct->description =  strip_quotes(argv[i]+end, NULL, 1);
 			u_set = 1;
-		} else if (!strncasecmp (argv[i], "FairShare",
-					 MAX(command_len, 1))
-			   || !strncasecmp (argv[i], "Shares",
-					    MAX(command_len, 1))) {
-			if(!assoc)
-				continue;
-			if (get_uint(argv[i]+end, &assoc->shares_raw,
-				     "Shares") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpCPUMins",
-					 MAX(command_len, 7))) {
-			if(!assoc)
-				continue;
-			if (get_uint64(argv[i]+end,
-				       &assoc->grp_cpu_mins,
-				       "GrpCPUMins") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpCpus",
-					 MAX(command_len, 7))) {
-			if(!assoc)
-				continue;
-			if (get_uint(argv[i]+end, &assoc->grp_cpus,
-				     "GrpCpus") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpJobs",
-					 MAX(command_len, 4))) {
-			if(!assoc)
-				continue;
-			if (get_uint(argv[i]+end, &assoc->grp_jobs,
-				     "GrpJobs") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpNodes",
-					 MAX(command_len, 4))) {
-			if(!assoc)
-				continue;
-			if (get_uint(argv[i]+end, &assoc->grp_nodes,
-				     "GrpNodes") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpSubmitJobs",
-					 MAX(command_len, 4))) {
-			if(!assoc)
-				continue;
-			if (get_uint(argv[i]+end, &assoc->grp_submit_jobs,
-				     "GrpSubmitJobs") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpWall",
-					 MAX(command_len, 4))) {
-			if(!assoc)
-				continue;
-			mins = time_str2mins(argv[i]+end);
-			if (mins != NO_VAL) {
-				assoc->grp_wall	= (uint32_t) mins;
-				a_set = 1;
-			} else {
-				exit_code=1;
-				fprintf(stderr,
-					" Bad GrpWall time format: %s\n",
-					argv[i]);
-			}
-		} else if (!strncasecmp (argv[i], "MaxCPUMinsPerJob",
-					 MAX(command_len, 7))) {
-			if(!assoc)
-				continue;
-			if (get_uint64(argv[i]+end,
-				       &assoc->max_cpu_mins_pj,
-				       "MaxCPUMins") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxCpusPerJob",
-					 MAX(command_len, 7))) {
-			if(!assoc)
-				continue;
-			if (get_uint(argv[i]+end, &assoc->max_cpus_pj,
-				     "MaxCpus") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxJobs",
-					 MAX(command_len, 4))) {
-			if(!assoc)
-				continue;
-			if (get_uint(argv[i]+end, &assoc->max_jobs,
-				     "MaxJobs") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxNodesPerJob",
-					 MAX(command_len, 4))) {
-			if(!assoc)
-				continue;
-			if (get_uint(argv[i]+end,
-				     &assoc->max_nodes_pj,
-				     "MaxNodes") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxSubmitJobs",
-					 MAX(command_len, 4))) {
-			if(!assoc)
-				continue;
-			if (get_uint(argv[i]+end, &assoc->max_submit_jobs,
-				     "MaxSubmitJobs") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxWallDurationPerJob",
-					 MAX(command_len, 4))) {
-			if(!assoc)
-				continue;
-			mins = time_str2mins(argv[i]+end);
-			if (mins != NO_VAL) {
-				assoc->max_wall_pj = (uint32_t) mins;
-				a_set = 1;
-			} else {
-				exit_code=1;
-				fprintf(stderr,
-					" Bad MaxWall time format: %s\n",
-					argv[i]);
-			}
-		} else if (!strncasecmp (argv[i], "Organization",
+		} else if (!strncasecmp(argv[i], "Organization",
 					 MAX(command_len, 1))) {
 			acct->organization = strip_quotes(argv[i]+end, NULL, 1);
 			u_set = 1;
-		} else if (!strncasecmp (argv[i], "Parent",
-					 MAX(command_len, 1))) {
-			if(!assoc)
-				continue;
-			assoc->parent_acct = strip_quotes(argv[i]+end, NULL, 1);
-			a_set = 1;
-		} else if (!strncasecmp (argv[i], "QosLevel",
-					 MAX(command_len, 1))) {
-			if(!assoc)
-				continue;
-			if(!assoc->qos_list)
-				assoc->qos_list =
-					list_create(slurm_destroy_char);
-
-			if(!g_qos_list)
-				g_qos_list = acct_storage_g_get_qos(
-					db_conn, my_uid, NULL);
-
-			if(slurmdb_addto_qos_char_list(assoc->qos_list,
-						       g_qos_list, argv[i]+end,
-						       option))
-				a_set = 1;
-			else {
-				exit_code = 1;
-				fprintf(stderr,
-					" Bad QosLevel value: %s\n",
-					argv[i]+end);
-			}
-		} else {
+		} else if(!assoc ||
+			  (assoc && !(a_set = sacctmgr_set_association_rec(
+					      assoc, argv[i], argv[i]+end,
+					      command_len, option)))) {
 			exit_code=1;
 			fprintf(stderr, " Unknown option: %s\n"
 				" Use keyword 'where' to modify condition\n",
@@ -641,8 +309,8 @@ extern int sacctmgr_add_account(int argc, char *argv[])
 
 	for (i=0; i<argc; i++) {
 		int command_len = strlen(argv[i]);
-		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
-		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3)))
+		if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp(argv[i], "Set", MAX(command_len, 3)))
 			i++;
 		limit_set += _set_rec(&i, argc, argv, name_list, cluster_list,
 				      start_acct, start_assoc);
@@ -1029,8 +697,8 @@ extern int sacctmgr_list_account(int argc, char *argv[])
 
 	for (i=0; i<argc; i++) {
 		int command_len = strlen(argv[i]);
-		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
-		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3)))
+		if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp(argv[i], "Set", MAX(command_len, 3)))
 			i++;
 		prev_set = _set_cond(&i, argc, argv, acct_cond, format_list);
 		cond_set = MAX(cond_set, prev_set);
@@ -1590,11 +1258,11 @@ extern int sacctmgr_modify_account(int argc, char *argv[])
 
 	for (i=0; i<argc; i++) {
 		int command_len = strlen(argv[i]);
-		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))) {
+		if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))) {
 			i++;
 			prev_set = _set_cond(&i, argc, argv, acct_cond, NULL);
 			cond_set = MAX(cond_set, prev_set);
-		} else if (!strncasecmp (argv[i], "Set", MAX(command_len, 3))) {
+		} else if (!strncasecmp(argv[i], "Set", MAX(command_len, 3))) {
 			i++;
 			prev_set = _set_rec(&i, argc, argv, NULL, NULL,
 					    acct, assoc);
@@ -1744,8 +1412,8 @@ extern int sacctmgr_delete_account(int argc, char *argv[])
 
 	for (i=0; i<argc; i++) {
 		int command_len = strlen(argv[i]);
-		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
-		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3)))
+		if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp(argv[i], "Set", MAX(command_len, 3)))
 			i++;
 		prev_set = _set_cond(&i, argc, argv, acct_cond, NULL);
 		cond_set = MAX(cond_set, prev_set);
diff --git a/src/sacctmgr/association_functions.c b/src/sacctmgr/association_functions.c
index ea0d688293a82219cb376834a74bb67643aa3de8..de84259cc546fb9dcfa105f02aed838f472fcf0a 100644
--- a/src/sacctmgr/association_functions.c
+++ b/src/sacctmgr/association_functions.c
@@ -50,11 +50,11 @@ static int _set_cond(int *start, int argc, char *argv[],
 	int option = 0;
 	for (i=(*start); i<argc; i++) {
 		end = parse_option_end(argv[i]);
-		if(!end)
+		if (!end)
 			command_len=strlen(argv[i]);
 		else {
 			command_len=end-1;
-			if(argv[i][end] == '=') {
+			if (argv[i][end] == '=') {
 				option = (int)argv[i][end-1];
 				end++;
 			}
@@ -83,10 +83,10 @@ static int _set_cond(int *start, int argc, char *argv[],
 		} else if (!end && !strncasecmp (argv[i], "WOLimits",
 						 MAX(command_len, 3))) {
 			assoc_cond->without_parent_limits = 1;
-		} else if(!end && !strncasecmp(argv[i], "where",
+		} else if (!end && !strncasecmp(argv[i], "where",
 					       MAX(command_len, 5))) {
 			continue;
-		} else if(!end || !strncasecmp (argv[i], "Ids",
+		} else if (!end || !strncasecmp (argv[i], "Ids",
 						MAX(command_len, 1))
 			  || !strncasecmp (argv[i], "Associations",
 					   MAX(command_len, 2))) {
@@ -94,7 +94,7 @@ static int _set_cond(int *start, int argc, char *argv[],
 			char *temp = NULL;
 			uint32_t id = 0;
 
-			if(!assoc_cond->id_list)
+			if (!assoc_cond->id_list)
 				assoc_cond->id_list =
 					list_create(slurm_destroy_char);
 			slurm_addto_char_list(assoc_cond->id_list,
@@ -110,212 +110,325 @@ static int _set_cond(int *start, int argc, char *argv[],
 			}
 			list_iterator_destroy(itr);
 			set = 1;
-		} else if (!strncasecmp (argv[i], "Accounts",
-					 MAX(command_len, 2))
-			   || !strncasecmp (argv[i], "Acct",
-					    MAX(command_len, 4))) {
-			if(!assoc_cond->acct_list)
-				assoc_cond->acct_list =
-					list_create(slurm_destroy_char);
-			slurm_addto_char_list(assoc_cond->acct_list,
-					argv[i]+end);
-			set = 1;
-		} else if (!strncasecmp (argv[i], "Clusters",
-					 MAX(command_len, 1))) {
-			if(!assoc_cond->cluster_list)
-				assoc_cond->cluster_list =
-					list_create(slurm_destroy_char);
-			slurm_addto_char_list(assoc_cond->cluster_list,
-					argv[i]+end);
-			set = 1;
-		} else if (!strncasecmp (argv[i], "DefaultQOS",
-					 MAX(command_len, 8))) {
-			if(!assoc_cond->def_qos_id_list) {
-				assoc_cond->def_qos_id_list =
-					list_create(slurm_destroy_char);
-			}
-			if(!g_qos_list) {
-				g_qos_list = acct_storage_g_get_qos(
-					db_conn, my_uid, NULL);
-			}
-
-			if(slurmdb_addto_qos_char_list(
-				   assoc_cond->def_qos_id_list,
-				   g_qos_list,
-				   argv[i]+end, 0))
-				set = 1;
-			else
-				exit_code = 1;
 		} else if (!strncasecmp (argv[i], "Format",
 					 MAX(command_len, 1))) {
-			if(format_list)
+			if (format_list)
 				slurm_addto_char_list(format_list,
 						      argv[i]+end);
-		} else if (!strncasecmp (argv[i], "FairShare",
-					 MAX(command_len, 1))
-			   || !strncasecmp (argv[i], "Shares",
-					 MAX(command_len, 1))) {
-			if(!assoc_cond->fairshare_list)
-				assoc_cond->fairshare_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(assoc_cond->fairshare_list,
-					argv[i]+end))
-				set = 1;
-		} else if (!strncasecmp (argv[i], "GrpCPUMins",
-					 MAX(command_len, 7))) {
-			if(!assoc_cond->grp_cpu_mins_list)
-				assoc_cond->grp_cpu_mins_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(assoc_cond->grp_cpu_mins_list,
-					argv[i]+end))
-				set = 1;
-		} else if (!strncasecmp (argv[i], "GrpCpus",
-					 MAX(command_len, 7))) {
-			if(!assoc_cond->grp_cpus_list)
-				assoc_cond->grp_cpus_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(assoc_cond->grp_cpus_list,
-					argv[i]+end))
-				set = 1;
-		} else if (!strncasecmp (argv[i], "GrpJobs",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->grp_jobs_list)
-				assoc_cond->grp_jobs_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(assoc_cond->grp_jobs_list,
-					argv[i]+end))
-				set = 1;
-		} else if (!strncasecmp (argv[i], "GrpNodes",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->grp_nodes_list)
-				assoc_cond->grp_nodes_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(assoc_cond->grp_nodes_list,
-					argv[i]+end))
-				set = 1;
-		} else if (!strncasecmp (argv[i], "GrpSubmitJobs",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->grp_submit_jobs_list)
-				assoc_cond->grp_submit_jobs_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->grp_submit_jobs_list,
-				   argv[i]+end))
-				set = 1;
-		} else if (!strncasecmp (argv[i], "GrpWall",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->grp_wall_list)
-				assoc_cond->grp_wall_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->grp_wall_list,
-				   argv[i]+end))
-				set = 1;
-		} else if (!strncasecmp (argv[i], "MaxCPUMinsPerJob",
-					 MAX(command_len, 7))) {
-			if(!assoc_cond->max_cpu_mins_pj_list)
-				assoc_cond->max_cpu_mins_pj_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->max_cpu_mins_pj_list,
-				   argv[i]+end))
-				set = 1;
-		} else if (!strncasecmp (argv[i], "MaxCPUsPerJob",
-					 MAX(command_len, 7))) {
-			if(!assoc_cond->max_cpus_pj_list)
-				assoc_cond->max_cpus_pj_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->max_cpus_pj_list,
-				   argv[i]+end))
-				set = 1;
-		} else if (!strncasecmp (argv[i], "MaxJobs",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->max_jobs_list)
-				assoc_cond->max_jobs_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->max_jobs_list,
-				   argv[i]+end))
-				set = 1;
-		} else if (!strncasecmp (argv[i], "MaxNodesPerJob",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->max_nodes_pj_list)
-				assoc_cond->max_nodes_pj_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->max_nodes_pj_list,
-				   argv[i]+end))
-				set = 1;
-		} else if (!strncasecmp (argv[i], "MaxSubmitJobs",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->max_submit_jobs_list)
-				assoc_cond->max_submit_jobs_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->max_submit_jobs_list,
-				   argv[i]+end))
-				set = 1;
-		} else if (!strncasecmp (argv[i], "MaxWallDurationPerJob",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->max_wall_pj_list)
-				assoc_cond->max_wall_pj_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->max_wall_pj_list,
-				   argv[i]+end))
-				set = 1;
-		} else if (!strncasecmp (argv[i], "Partitions",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->partition_list)
-				assoc_cond->partition_list =
-					list_create(slurm_destroy_char);
-			slurm_addto_char_list(assoc_cond->partition_list,
-					argv[i]+end);
+		} else if(!(set = sacctmgr_set_association_cond(
+				    assoc_cond, argv[i], argv[i]+end,
+				    command_len)) || exit_code) {
+			exit_code = 1;
+			fprintf(stderr, " Unknown condition: %s\n", argv[i]);
+		}
+	}
+
+	(*start) = i;
+
+	return set;
+}
+
+extern int sacctmgr_set_association_cond(slurmdb_association_cond_t *assoc_cond,
+					 char *type, char *value,
+					 int command_len)
+{
+	int set =0;
+
+	xassert(assoc_cond);
+	xassert(type);
+
+	if (!strncasecmp (type, "Account", MAX(command_len, 2))
+		   || !strncasecmp (type, "Acct", MAX(command_len, 4))) {
+		if (!assoc_cond->acct_list)
+			assoc_cond->acct_list = list_create(slurm_destroy_char);
+		if (slurm_addto_char_list(assoc_cond->acct_list, value))
 			set = 1;
-		} else if (!strncasecmp (argv[i], "Parent",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->parent_acct_list) {
-				assoc_cond->parent_acct_list =
-					list_create(slurm_destroy_char);
+	} else if (!strncasecmp(type, "Ids", MAX(command_len, 1))
+		   || !strncasecmp(type, "Associations", MAX(command_len, 2))) {
+		ListIterator itr = NULL;
+		char *temp = NULL;
+		uint32_t id = 0;
+
+		if (!assoc_cond->id_list)
+			assoc_cond->id_list =list_create(slurm_destroy_char);
+		slurm_addto_char_list(assoc_cond->id_list, value);
+		/* check to make sure user gave ints here */
+		itr = list_iterator_create(assoc_cond->id_list);
+		while ((temp = list_next(itr))) {
+			if (get_uint(temp, &id, "AssocId") != SLURM_SUCCESS) {
+				exit_code = 1;
+				list_delete_item(itr);
 			}
-			if(slurm_addto_char_list(assoc_cond->parent_acct_list,
-						 argv[i]+end))
+		}
+		list_iterator_destroy(itr);
+		set = 1;
+	} else if (!strncasecmp (type, "Clusters", MAX(command_len, 1))) {
+		if (!assoc_cond->cluster_list)
+			assoc_cond->cluster_list =
+				list_create(slurm_destroy_char);
+		if (slurm_addto_char_list(assoc_cond->cluster_list, value))
 			set = 1;
-		} else if (!strncasecmp (argv[i], "QosLevel",
-					 MAX(command_len, 1))) {
-			if(!assoc_cond->qos_list) {
-				assoc_cond->qos_list =
-					list_create(slurm_destroy_char);
-			}
+	} else if (!strncasecmp (type, "DefaultQOS", MAX(command_len, 8))) {
+		if (!assoc_cond->def_qos_id_list)
+			assoc_cond->def_qos_id_list =
+				list_create(slurm_destroy_char);
+
+		if (!g_qos_list)
+			g_qos_list = acct_storage_g_get_qos(
+				db_conn, my_uid, NULL);
+
+		if (slurmdb_addto_qos_char_list(assoc_cond->def_qos_id_list,
+					       g_qos_list,
+					       value, 0))
+			set = 1;
+		else
+			exit_code = 1;
+	} else if (!strncasecmp (type, "FairShare", MAX(command_len, 1))
+		   || !strncasecmp (type, "Shares", MAX(command_len, 1))) {
+		if (!assoc_cond->fairshare_list)
+			assoc_cond->fairshare_list =
+				list_create(slurm_destroy_char);
+		if (slurm_addto_char_list(assoc_cond->fairshare_list, value))
+			set = 1;
+	} else if (!strncasecmp (type, "GrpCPUMins", MAX(command_len, 7))) {
+		if (!assoc_cond->grp_cpu_mins_list)
+			assoc_cond->grp_cpu_mins_list =
+				list_create(slurm_destroy_char);
+		if (slurm_addto_char_list(assoc_cond->grp_cpu_mins_list, value))
+			set = 1;
+	} else if (!strncasecmp (type, "GrpCPURunMins", MAX(command_len, 7))) {
+		if (!assoc_cond->grp_cpu_run_mins_list)
+			assoc_cond->grp_cpu_run_mins_list =
+				list_create(slurm_destroy_char);
+		if (slurm_addto_char_list(assoc_cond->grp_cpu_run_mins_list,
+					 value))
+			set = 1;
+	} else if (!strncasecmp (type, "GrpCpus", MAX(command_len, 7))) {
+		if (!assoc_cond->grp_cpus_list)
+			assoc_cond->grp_cpus_list =
+				list_create(slurm_destroy_char);
+		if (slurm_addto_char_list(assoc_cond->grp_cpus_list,
+					 value))
+			set = 1;
+	} else if (!strncasecmp (type, "GrpJobs", MAX(command_len, 4))) {
+		if (!assoc_cond->grp_jobs_list)
+			assoc_cond->grp_jobs_list =
+				list_create(slurm_destroy_char);
+		if (slurm_addto_char_list(assoc_cond->grp_jobs_list,
+					 value))
+			set = 1;
+	} else if (!strncasecmp (type, "GrpNodes", MAX(command_len, 4))) {
+		if (!assoc_cond->grp_nodes_list)
+			assoc_cond->grp_nodes_list =
+				list_create(slurm_destroy_char);
+		if (slurm_addto_char_list(assoc_cond->grp_nodes_list,
+					 value))
+			set = 1;
+	} else if (!strncasecmp (type, "GrpSubmitJobs", MAX(command_len, 4))) {
+		if (!assoc_cond->grp_submit_jobs_list)
+			assoc_cond->grp_submit_jobs_list =
+				list_create(slurm_destroy_char);
+		if (slurm_addto_char_list(assoc_cond->grp_submit_jobs_list,
+					 value))
+			set = 1;
+	} else if (!strncasecmp (type, "GrpWall", MAX(command_len, 4))) {
+		if (!assoc_cond->grp_wall_list)
+			assoc_cond->grp_wall_list =
+				list_create(slurm_destroy_char);
+		if (slurm_addto_char_list(assoc_cond->grp_wall_list, value))
+			set = 1;
+	} else if (!strncasecmp (type, "MaxCPUMinsPerJob",
+				 MAX(command_len, 7))) {
+		if (!assoc_cond->max_cpu_mins_pj_list)
+			assoc_cond->max_cpu_mins_pj_list =
+				list_create(slurm_destroy_char);
+		if (slurm_addto_char_list(assoc_cond->max_cpu_mins_pj_list,
+					 value))
+			set = 1;
+	} else if (!strncasecmp (type, "MaxCPURunMins", MAX(command_len, 7))) {
+		if (!assoc_cond->max_cpu_run_mins_list)
+			assoc_cond->max_cpu_run_mins_list =
+				list_create(slurm_destroy_char);
+		if (slurm_addto_char_list(assoc_cond->max_cpu_run_mins_list,
+					 value))
+			set = 1;
+	} else if (!strncasecmp (type, "MaxCpusPerJob", MAX(command_len, 7))) {
+		if (!assoc_cond->max_cpus_pj_list)
+			assoc_cond->max_cpus_pj_list =
+				list_create(slurm_destroy_char);
+		if (slurm_addto_char_list(assoc_cond->max_cpus_pj_list, value))
+			set = 1;
+	} else if (!strncasecmp (type, "MaxJobs", MAX(command_len, 4))) {
+		if (!assoc_cond->max_jobs_list)
+			assoc_cond->max_jobs_list =
+				list_create(slurm_destroy_char);
+		if (slurm_addto_char_list(assoc_cond->max_jobs_list, value))
+			set = 1;
+	} else if (!strncasecmp (type, "MaxNodesPerJob", MAX(command_len, 4))) {
+		if (!assoc_cond->max_nodes_pj_list)
+			assoc_cond->max_nodes_pj_list =
+				list_create(slurm_destroy_char);
+		if (slurm_addto_char_list(assoc_cond->max_nodes_pj_list, value))
+			set = 1;
+	} else if (!strncasecmp (type, "MaxSubmitJobs", MAX(command_len, 4))) {
+		if (!assoc_cond->max_submit_jobs_list)
+			assoc_cond->max_submit_jobs_list =
+				list_create(slurm_destroy_char);
+		if (slurm_addto_char_list(assoc_cond->max_submit_jobs_list,
+					 value))
+			set = 1;
+	} else if (!strncasecmp (type, "MaxWallDurationPerJob",
+				 MAX(command_len, 4))) {
+		if (!assoc_cond->max_wall_pj_list)
+			assoc_cond->max_wall_pj_list =
+				list_create(slurm_destroy_char);
+		if (slurm_addto_char_list(assoc_cond->max_wall_pj_list, value))
+			set = 1;
+	} else if (!strncasecmp (type, "Partition", MAX(command_len, 3))) {
+		if (!assoc_cond->partition_list)
+			assoc_cond->partition_list =
+				list_create(slurm_destroy_char);
+		if (slurm_addto_char_list(assoc_cond->partition_list, value))
+			set = 1;
+	} else if (!strncasecmp(type, "Parent", MAX(command_len, 4))) {
+		if (!assoc_cond->parent_acct_list)
+			assoc_cond->parent_acct_list =
+				list_create(slurm_destroy_char);
+		if (slurm_addto_char_list(assoc_cond->parent_acct_list, value))
+			set = 1;
+	} else if (!strncasecmp (type, "Users", MAX(command_len, 1))) {
+		if (!assoc_cond->user_list)
+			assoc_cond->user_list = list_create(slurm_destroy_char);
+		if (slurm_addto_char_list(assoc_cond->user_list, value))
+			set = 1;
+	}
 
-			if(!g_qos_list) {
-				g_qos_list = acct_storage_g_get_qos(
-					db_conn, my_uid, NULL);
-			}
+	return set;
+}
 
-			if(slurmdb_addto_qos_char_list(assoc_cond->qos_list,
-						       g_qos_list,
-						       argv[i]+end, option))
-				set = 1;
-			else
-				exit_code = 1;
-		} else if (!strncasecmp (argv[i], "Users",
-					 MAX(command_len, 1))) {
-			if(!assoc_cond->user_list)
-				assoc_cond->user_list =
-					list_create(slurm_destroy_char);
-			slurm_addto_char_list(assoc_cond->user_list,
-					argv[i]+end);
+extern int sacctmgr_set_association_rec(slurmdb_association_rec_t *assoc,
+					char *type, char *value,
+					int command_len, int option)
+{
+	int set = 0;
+	uint32_t mins = NO_VAL;
+
+	if (!assoc)
+		return set;
+
+	if (!strncasecmp (type, "DefaultQOS", MAX(command_len, 8))) {
+		if(!g_qos_list)
+			g_qos_list = acct_storage_g_get_qos(
+				db_conn, my_uid, NULL);
+
+		if(atoi(value) == -1)
+			assoc->def_qos_id = -1;
+		else
+			assoc->def_qos_id = str_2_slurmdb_qos(
+				g_qos_list, value);
+
+		if(assoc->def_qos_id == NO_VAL) {
+			fprintf(stderr,
+				"You gave a bad qos '%s'.  "
+				"Use 'list qos' to get "
+				"complete list.\n",
+				value);
+			exit_code = 1;
+		}
+		set = 1;
+	} else if (!strncasecmp(type, "FairShare", MAX(command_len, 1))
+		   || !strncasecmp(type, "Shares", MAX(command_len, 1))) {
+		if (get_uint(value, &assoc->shares_raw,
+			     "FairShare") == SLURM_SUCCESS)
+			set = 1;
+	} else if (!strncasecmp(type, "GrpCPUMins", MAX(command_len, 7))) {
+		if (get_uint64(value, &assoc->grp_cpu_mins,
+			       "GrpCPUMins") == SLURM_SUCCESS)
+			set = 1;
+	} else if (!strncasecmp(type, "GrpCPURunMins", MAX(command_len, 7))) {
+		if (get_uint64(value, &assoc->grp_cpu_run_mins,
+			       "GrpCPURunMins") == SLURM_SUCCESS)
+			set = 1;
+	} else if (!strncasecmp(type, "GrpCpus", MAX(command_len, 7))) {
+		if (get_uint(value, &assoc->grp_cpus,
+			     "GrpCpus") == SLURM_SUCCESS)
+			set = 1;
+	} else if (!strncasecmp(type, "GrpJobs", MAX(command_len, 4))) {
+		if (get_uint(value, &assoc->grp_jobs,
+			     "GrpJobs") == SLURM_SUCCESS)
+			set = 1;
+	} else if (!strncasecmp(type, "GrpNodes", MAX(command_len, 4))) {
+		if (get_uint(value, &assoc->grp_nodes,
+			     "GrpNodes") == SLURM_SUCCESS)
+			set = 1;
+	} else if (!strncasecmp(type, "GrpSubmitJobs",
+				MAX(command_len, 4))) {
+		if (get_uint(value, &assoc->grp_submit_jobs,
+			     "GrpSubmitJobs") == SLURM_SUCCESS)
+			set = 1;
+	} else if (!strncasecmp(type, "GrpWall", MAX(command_len, 4))) {
+		mins = time_str2mins(value);
+		if (mins != NO_VAL) {
+			assoc->grp_wall	= mins;
 			set = 1;
 		} else {
-			exit_code = 1;
-			fprintf(stderr, " Unknown condition: %s\n", argv[i]);
+			exit_code=1;
+			fprintf(stderr, " Bad GrpWall time format: %s\n", type);
 		}
+	} else if (!strncasecmp(type, "MaxCPUMinsPerJob",
+				MAX(command_len, 7))) {
+		if (get_uint64(value, &assoc->max_cpu_mins_pj,
+			       "MaxCPUMins") == SLURM_SUCCESS)
+			set = 1;
+	} else if (!strncasecmp(type, "MaxCPURunMins", MAX(command_len, 7))) {
+		if (get_uint64(value, &assoc->max_cpu_run_mins,
+			       "MaxCPURunMins") == SLURM_SUCCESS)
+			set = 1;
+	} else if (!strncasecmp(type, "MaxCpusPerJob", MAX(command_len, 7))) {
+		if (get_uint(value, &assoc->max_cpus_pj,
+			     "MaxCpus") == SLURM_SUCCESS)
+			set = 1;
+	} else if (!strncasecmp(type, "MaxJobs", MAX(command_len, 4))) {
+		if (get_uint(value, &assoc->max_jobs,
+			     "MaxJobs") == SLURM_SUCCESS)
+			set = 1;
+	} else if (!strncasecmp(type, "MaxNodesPerJob", MAX(command_len, 4))) {
+		if (get_uint(value, &assoc->max_nodes_pj,
+			     "MaxNodes") == SLURM_SUCCESS)
+			set = 1;
+	} else if (!strncasecmp(type, "MaxSubmitJobs", MAX(command_len, 4))) {
+		if (get_uint(value, &assoc->max_submit_jobs,
+			     "MaxSubmitJobs") == SLURM_SUCCESS)
+			set = 1;
+	} else if (!strncasecmp(type, "MaxWallDurationPerJob",
+				MAX(command_len, 4))) {
+		mins = time_str2mins(value);
+		if (mins != NO_VAL) {
+			assoc->max_wall_pj = mins;
+			set = 1;
+		} else {
+			exit_code=1;
+			fprintf(stderr,
+				" Bad MaxWall time format: %s\n",
+				type);
+		}
+	} else if (!strncasecmp(type, "Parent", MAX(command_len, 1))) {
+		assoc->parent_acct = strip_quotes(value, NULL, 1);
+		set = 1;
+	} else if (!strncasecmp(type, "QosLevel", MAX(command_len, 1))) {
+		if (!assoc->qos_list)
+			assoc->qos_list = list_create(slurm_destroy_char);
+
+		if (!g_qos_list)
+			g_qos_list = acct_storage_g_get_qos(
+				db_conn, my_uid, NULL);
+
+		if (slurmdb_addto_qos_char_list(assoc->qos_list,
+						g_qos_list, value,
+						option))
+			set = 1;
 	}
 
-	(*start) = i;
-
 	return set;
 }
 
@@ -372,19 +485,19 @@ extern int sacctmgr_list_association(int argc, char *argv[])
 
 	for (i=0; i<argc; i++) {
 		int command_len = strlen(argv[i]);
-		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
-		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3)))
+		if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp(argv[i], "Set", MAX(command_len, 3)))
 			i++;
 		_set_cond(&i, argc, argv, assoc_cond, format_list);
 	}
 
-	if(exit_code) {
+	if (exit_code) {
 		slurmdb_destroy_association_cond(assoc_cond);
 		list_destroy(format_list);
 		return SLURM_ERROR;
-	} else if(!list_count(format_list)) {
+	} else if (!list_count(format_list)) {
 		slurm_addto_char_list(format_list, "C,A,U,Part");
-		if(!assoc_cond->without_parent_limits)
+		if (!assoc_cond->without_parent_limits)
 			slurm_addto_char_list(format_list,
 					      "Shares,GrpJ,GrpN,GrpCPUs,"
 					      "GrpS,GrpWall,GrpCPUMins,MaxJ,"
@@ -398,7 +511,7 @@ extern int sacctmgr_list_association(int argc, char *argv[])
 		int command_len = 0;
 		int newlen = 0;
 
-		if((tmp_char = strstr(object, "\%"))) {
+		if ((tmp_char = strstr(object, "\%"))) {
 			newlen = atoi(tmp_char+1);
 			tmp_char[0] = '\0';
 		}
@@ -407,157 +520,157 @@ extern int sacctmgr_list_association(int argc, char *argv[])
 
 		field = xmalloc(sizeof(print_field_t));
 
-		if(!strncasecmp("Account", object, MAX(command_len, 1))
+		if (!strncasecmp("Account", object, MAX(command_len, 1))
 		   || !strncasecmp("Acct", object, MAX(command_len, 4))) {
 			field->type = PRINT_ACCOUNT;
 			field->name = xstrdup("Account");
-			if(tree_display)
+			if (tree_display)
 				field->len = -20;
 			else
 				field->len = 10;
 			field->print_routine = print_fields_str;
-		} else if(!strncasecmp("Cluster", object,
+		} else if (!strncasecmp("Cluster", object,
 				       MAX(command_len, 1))) {
 			field->type = PRINT_CLUSTER;
 			field->name = xstrdup("Cluster");
 			field->len = 10;
 			field->print_routine = print_fields_str;
-		} else if(!strncasecmp("DefaultQOS", object,
+		} else if (!strncasecmp("DefaultQOS", object,
 				       MAX(command_len, 1))) {
 			field->type = PRINT_DQOS;
 			field->name = xstrdup("Def QOS");
 			field->len = 9;
 			field->print_routine = print_fields_str;
-		} else if(!strncasecmp("FairShare", object,
+		} else if (!strncasecmp("FairShare", object,
 				       MAX(command_len, 1))) {
 			field->type = PRINT_FAIRSHARE;
 			field->name = xstrdup("FairShare");
 			field->len = 9;
 			field->print_routine = print_fields_uint;
-		} else if(!strncasecmp("GrpCPUMins", object,
+		} else if (!strncasecmp("GrpCPUMins", object,
 				       MAX(command_len, 8))) {
 			field->type = PRINT_GRPCM;
 			field->name = xstrdup("GrpCPUMins");
 			field->len = 11;
 			field->print_routine = print_fields_uint64;
-		} else if(!strncasecmp("GrpCPUs", object,
+		} else if (!strncasecmp("GrpCPUs", object,
 				       MAX(command_len, 8))) {
 			field->type = PRINT_GRPC;
 			field->name = xstrdup("GrpCPUs");
 			field->len = 8;
 			field->print_routine = print_fields_uint;
-		} else if(!strncasecmp("GrpJobs", object,
+		} else if (!strncasecmp("GrpJobs", object,
 				       MAX(command_len, 4))) {
 			field->type = PRINT_GRPJ;
 			field->name = xstrdup("GrpJobs");
 			field->len = 7;
 			field->print_routine = print_fields_uint;
-		} else if(!strncasecmp("GrpNodes", object,
+		} else if (!strncasecmp("GrpNodes", object,
 				       MAX(command_len, 4))) {
 			field->type = PRINT_GRPN;
 			field->name = xstrdup("GrpNodes");
 			field->len = 8;
 			field->print_routine = print_fields_uint;
-		} else if(!strncasecmp("GrpSubmitJobs", object,
+		} else if (!strncasecmp("GrpSubmitJobs", object,
 				       MAX(command_len, 4))) {
 			field->type = PRINT_GRPS;
 			field->name = xstrdup("GrpSubmit");
 			field->len = 9;
 			field->print_routine = print_fields_uint;
-		} else if(!strncasecmp("GrpWall", object,
+		} else if (!strncasecmp("GrpWall", object,
 				       MAX(command_len, 4))) {
 			field->type = PRINT_GRPW;
 			field->name = xstrdup("GrpWall");
 			field->len = 11;
 			field->print_routine = print_fields_time;
-		} else if(!strncasecmp("ID", object, MAX(command_len, 1))) {
+		} else if (!strncasecmp("ID", object, MAX(command_len, 1))) {
 			field->type = PRINT_ID;
 			field->name = xstrdup("ID");
 			field->len = 6;
 			field->print_routine = print_fields_uint;
-		} else if(!strncasecmp("LFT", object, MAX(command_len, 1))) {
+		} else if (!strncasecmp("LFT", object, MAX(command_len, 1))) {
 			field->type = PRINT_LFT;
 			field->name = xstrdup("LFT");
 			field->len = 6;
 			field->print_routine = print_fields_uint;
-		} else if(!strncasecmp("MaxCPUMinsPerJob", object,
+		} else if (!strncasecmp("MaxCPUMinsPerJob", object,
 				       MAX(command_len, 7))) {
 			field->type = PRINT_MAXCM;
 			field->name = xstrdup("MaxCPUMins");
 			field->len = 11;
 			field->print_routine = print_fields_uint64;
-		} else if(!strncasecmp("MaxCPUsPerJob", object,
+		} else if (!strncasecmp("MaxCPUsPerJob", object,
 				       MAX(command_len, 7))) {
 			field->type = PRINT_MAXC;
 			field->name = xstrdup("MaxCPUs");
 			field->len = 8;
 			field->print_routine = print_fields_uint;
-		} else if(!strncasecmp("MaxJobs", object,
+		} else if (!strncasecmp("MaxJobs", object,
 				       MAX(command_len, 4))) {
 			field->type = PRINT_MAXJ;
 			field->name = xstrdup("MaxJobs");
 			field->len = 7;
 			field->print_routine = print_fields_uint;
-		} else if(!strncasecmp("MaxNodesPerJob", object,
+		} else if (!strncasecmp("MaxNodesPerJob", object,
 				       MAX(command_len, 4))) {
 			field->type = PRINT_MAXN;
 			field->name = xstrdup("MaxNodes");
 			field->len = 8;
 			field->print_routine = print_fields_uint;
-		} else if(!strncasecmp("MaxSubmitJobs", object,
+		} else if (!strncasecmp("MaxSubmitJobs", object,
 				       MAX(command_len, 4))) {
 			field->type = PRINT_MAXS;
 			field->name = xstrdup("MaxSubmit");
 			field->len = 9;
 			field->print_routine = print_fields_uint;
-		} else if(!strncasecmp("MaxWallDurationPerJob", object,
+		} else if (!strncasecmp("MaxWallDurationPerJob", object,
 				       MAX(command_len, 4))) {
 			field->type = PRINT_MAXW;
 			field->name = xstrdup("MaxWall");
 			field->len = 11;
 			field->print_routine = print_fields_time;
-		} else if(!strncasecmp("QOSRAWLevel", object,
+		} else if (!strncasecmp("QOSRAWLevel", object,
 				       MAX(command_len, 4))) {
 			field->type = PRINT_QOS_RAW;
 			field->name = xstrdup("QOS_RAW");
 			field->len = 10;
 			field->print_routine = print_fields_char_list;
-		} else if(!strncasecmp("QOSLevel", object,
+		} else if (!strncasecmp("QOSLevel", object,
 				       MAX(command_len, 1))) {
 			field->type = PRINT_QOS;
 			field->name = xstrdup("QOS");
 			field->len = 20;
 			field->print_routine = sacctmgr_print_qos_list;
-		} else if(!strncasecmp("ParentID", object,
+		} else if (!strncasecmp("ParentID", object,
 				       MAX(command_len, 7))) {
 			field->type = PRINT_PID;
 			field->name = xstrdup("Par ID");
 			field->len = 6;
 			field->print_routine = print_fields_uint;
-		} else if(!strncasecmp("ParentName", object,
+		} else if (!strncasecmp("ParentName", object,
 				       MAX(command_len, 7))) {
 			field->type = PRINT_PNAME;
 			field->name = xstrdup("Par Name");
 			field->len = 10;
 			field->print_routine = print_fields_str;
-		} else if(!strncasecmp("Partition", object,
+		} else if (!strncasecmp("Partition", object,
 				       MAX(command_len, 4))) {
 			field->type = PRINT_PART;
 			field->name = xstrdup("Partition");
 			field->len = 10;
 			field->print_routine = print_fields_str;
-		} else if(!strncasecmp("RGT", object, MAX(command_len, 1))) {
+		} else if (!strncasecmp("RGT", object, MAX(command_len, 1))) {
 			field->type = PRINT_RGT;
 			field->name = xstrdup("RGT");
 			field->len = 6;
 			field->print_routine = print_fields_uint;
-		} else if(!strncasecmp("Shares", object,
+		} else if (!strncasecmp("Shares", object,
 				       MAX(command_len, 1))) {
 			field->type = PRINT_FAIRSHARE;
 			field->name = xstrdup("Shares");
 			field->len = 9;
 			field->print_routine = print_fields_uint;
-		} else if(!strncasecmp("User", object, MAX(command_len, 1))) {
+		} else if (!strncasecmp("User", object, MAX(command_len, 1))) {
 			field->type = PRINT_USER;
 			field->name = xstrdup("User");
 			field->len = 10;
@@ -570,7 +683,7 @@ extern int sacctmgr_list_association(int argc, char *argv[])
 			continue;
 		}
 
-		if(newlen)
+		if (newlen)
 			field->len = newlen;
 
 		list_append(print_fields_list, field);
@@ -578,7 +691,7 @@ extern int sacctmgr_list_association(int argc, char *argv[])
 	list_iterator_destroy(itr);
 	list_destroy(format_list);
 
-	if(exit_code) {
+	if (exit_code) {
 		slurmdb_destroy_association_cond(assoc_cond);
 		list_destroy(print_fields_list);
 		return SLURM_ERROR;
@@ -588,7 +701,7 @@ extern int sacctmgr_list_association(int argc, char *argv[])
 						     assoc_cond);
 	slurmdb_destroy_association_cond(assoc_cond);
 
-	if(!assoc_list) {
+	if (!assoc_list) {
 		exit_code=1;
 		fprintf(stderr, " Error with request: %s\n",
 			slurm_strerror(errno));
@@ -606,8 +719,8 @@ extern int sacctmgr_list_association(int argc, char *argv[])
 
 	while((assoc = list_next(itr))) {
 		int curr_inx = 1;
-		if(!last_cluster || strcmp(last_cluster, assoc->cluster)) {
-			if(tree_list) {
+		if (!last_cluster || strcmp(last_cluster, assoc->cluster)) {
+			if (tree_list) {
 				list_flush(tree_list);
 			} else {
 				tree_list =
@@ -618,10 +731,10 @@ extern int sacctmgr_list_association(int argc, char *argv[])
 		while((field = list_next(itr2))) {
 			switch(field->type) {
 			case PRINT_ACCOUNT:
-				if(tree_display) {
+				if (tree_display) {
 					char *local_acct = NULL;
 					char *parent_acct = NULL;
-					if(assoc->user) {
+					if (assoc->user) {
 						local_acct = xstrdup_printf(
 							"|%s", assoc->acct);
 						parent_acct = assoc->acct;
@@ -650,7 +763,7 @@ extern int sacctmgr_list_association(int argc, char *argv[])
 					(curr_inx == field_count));
 				break;
 			case PRINT_DQOS:
-				if(!g_qos_list)
+				if (!g_qos_list)
 					g_qos_list = acct_storage_g_get_qos(
 						db_conn, my_uid, NULL);
 				tmp_char = slurmdb_qos_str(g_qos_list,
@@ -756,7 +869,7 @@ extern int sacctmgr_list_association(int argc, char *argv[])
 						     (curr_inx == field_count));
 				break;
 			case PRINT_QOS:
-				if(!g_qos_list)
+				if (!g_qos_list)
 					g_qos_list = acct_storage_g_get_qos(
 						db_conn, my_uid, NULL);
 
@@ -792,7 +905,7 @@ extern int sacctmgr_list_association(int argc, char *argv[])
 		printf("\n");
 	}
 
-	if(tree_list)
+	if (tree_list)
 		list_destroy(tree_list);
 
 	list_iterator_destroy(itr2);
diff --git a/src/sacctmgr/cluster_functions.c b/src/sacctmgr/cluster_functions.c
index c2228459d3bd83ee9eed927480be16262b1ee950..01521092f31fe1b3c1a82a5211d86d07385959e8 100644
--- a/src/sacctmgr/cluster_functions.c
+++ b/src/sacctmgr/cluster_functions.c
@@ -70,22 +70,22 @@ static int _set_cond(int *start, int argc, char *argv[],
 			}
 		}
 
-		if (!strncasecmp (argv[i], "Set", MAX(command_len, 3))) {
+		if (!strncasecmp(argv[i], "Set", MAX(command_len, 3))) {
 			i--;
 			break;
 		} else if(!end && !strncasecmp(argv[i], "where",
 					       MAX(command_len, 5))) {
 			continue;
 		} else if (!end &&
-			   !strncasecmp (argv[i], "WithDeleted",
+			   !strncasecmp(argv[i], "WithDeleted",
 					 MAX(command_len, 5))) {
 			with_deleted = 1;
-		} else if (!end && !strncasecmp (argv[i], "WOLimits",
+		} else if (!end && !strncasecmp(argv[i], "WOLimits",
 						 MAX(command_len, 3))) {
 			without_limits = 1;
-		} else if(!end || !strncasecmp (argv[i], "Names",
+		} else if(!end || !strncasecmp(argv[i], "Names",
 						MAX(command_len, 1))
-			  || !strncasecmp (argv[i], "Clusters",
+			  || !strncasecmp(argv[i], "Clusters",
 					   MAX(command_len, 3))) {
 			if(!cluster_cond->cluster_list)
 				cluster_cond->cluster_list =
@@ -93,22 +93,22 @@ static int _set_cond(int *start, int argc, char *argv[],
 			if(slurm_addto_char_list(cluster_cond->cluster_list,
 						 argv[i]+end))
 				a_set = 1;
-		} else if (!strncasecmp (argv[i], "Classification",
+		} else if (!strncasecmp(argv[i], "Classification",
 					 MAX(command_len, 3))) {
 			cluster_cond->classification =
 				str_2_classification(argv[i]+end);
 			if(cluster_cond->classification)
 				c_set = 1;
-		} else if (!strncasecmp (argv[i], "flags",
+		} else if (!strncasecmp(argv[i], "flags",
 					 MAX(command_len, 2))) {
 			cluster_cond->flags = slurmdb_str_2_cluster_flags(
 				argv[i]+end);
 			c_set = 1;
-		} else if (!strncasecmp (argv[i], "Format",
+		} else if (!strncasecmp(argv[i], "Format",
 					 MAX(command_len, 2))) {
 			if(format_list)
 				slurm_addto_char_list(format_list, argv[i]+end);
-		} else if(!end || !strncasecmp (argv[i], "PluginIDSelect",
+		} else if(!end || !strncasecmp(argv[i], "PluginIDSelect",
 						MAX(command_len, 1))) {
 			if(!cluster_cond->plugin_id_select_list)
 				cluster_cond->plugin_id_select_list =
@@ -117,7 +117,7 @@ static int _set_cond(int *start, int argc, char *argv[],
 				   cluster_cond->plugin_id_select_list,
 				   argv[i]+end))
 				c_set = 1;
-		} else if(!end || !strncasecmp (argv[i], "RPCVersions",
+		} else if(!end || !strncasecmp(argv[i], "RPCVersions",
 						MAX(command_len, 1))) {
 			if(!cluster_cond->rpc_version_list)
 				cluster_cond->rpc_version_list =
@@ -128,7 +128,8 @@ static int _set_cond(int *start, int argc, char *argv[],
 		} else {
 			exit_code=1;
 			fprintf(stderr, " Unknown condition: %s\n"
-				"Use keyword set to modify value\n", argv[i]);
+				" Use keyword 'set' to modify value\n",
+				argv[i]);
 			break;
 		}
 	}
@@ -148,7 +149,7 @@ static int _set_rec(int *start, int argc, char *argv[],
 		    slurmdb_association_rec_t *assoc,
 		    uint16_t *classification)
 {
-	int i, mins;
+	int i;
 	int set = 0;
 	int end = 0;
 	int command_len = 0;
@@ -166,21 +167,21 @@ static int _set_rec(int *start, int argc, char *argv[],
 			}
 		}
 
-		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))) {
+		if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))) {
 			i--;
 			break;
 		} else if(!end && !strncasecmp(argv[i], "set",
 					       MAX(command_len, 3))) {
 			continue;
 		} else if(!end
-			  || !strncasecmp (argv[i], "Names",
+			  || !strncasecmp(argv[i], "Names",
 					   MAX(command_len, 1))
-			  || !strncasecmp (argv[i], "Clusters",
+			  || !strncasecmp(argv[i], "Clusters",
 					   MAX(command_len, 3))) {
 			if(name_list)
 				slurm_addto_char_list(name_list,
 						      argv[i]+end);
-		} else if (!strncasecmp (argv[i], "Classification",
+		} else if (!strncasecmp(argv[i], "Classification",
 					 MAX(command_len, 3))) {
 			if(classification) {
 				*classification =
@@ -188,126 +189,21 @@ static int _set_rec(int *start, int argc, char *argv[],
 				if(*classification)
 					set = 1;
 			}
-		} else if (!strncasecmp (argv[i], "DefaultQOS",
-					 MAX(command_len, 8))) {
-			if(!assoc)
-				continue;
-
-			if(!g_qos_list) {
-				g_qos_list = acct_storage_g_get_qos(
-					db_conn, my_uid, NULL);
-			}
-
-			if(atoi(argv[i]+end) == -1)
-				assoc->def_qos_id = -1;
-			else
-				assoc->def_qos_id = str_2_slurmdb_qos(
-					g_qos_list, argv[i]+end);
-
-			if(assoc->def_qos_id == NO_VAL) {
-				fprintf(stderr,
-					"You gave a bad qos '%s'.  "
-					"Use 'list qos' to get "
-					"complete list.\n",
-					argv[i]+end);
-				exit_code = 1;
-				break;
-			}
-			set = 1;
-		} else if (!strncasecmp (argv[i], "FairShare",
-					 MAX(command_len, 1))
-			   || !strncasecmp (argv[i], "Shares",
-					    MAX(command_len, 1))) {
-			if (get_uint(argv[i]+end, &assoc->shares_raw,
-				     "FairShare") == SLURM_SUCCESS)
-				set = 1;
-		} else if (!strncasecmp (argv[i], "GrpCPUMins",
+		} else if (!strncasecmp(argv[i], "GrpCPUMins",
 					 MAX(command_len, 7))) {
 			exit_code=1;
 			fprintf(stderr, "GrpCPUMins is not a valid option "
 				"for the root association of a cluster.\n");
 			break;
-		} else if (!strncasecmp (argv[i], "GrpCpus",
-					 MAX(command_len, 7))) {
-			if (get_uint(argv[i]+end, &assoc->grp_cpus,
-				     "GrpCpus") == SLURM_SUCCESS)
-				set = 1;
-		} else if (!strncasecmp (argv[i], "GrpJobs",
-					 MAX(command_len, 4))) {
-			if (get_uint(argv[i]+end, &assoc->grp_jobs,
-				     "GrpJobs") == SLURM_SUCCESS)
-				set = 1;
-		} else if (!strncasecmp (argv[i], "GrpNodes",
-					 MAX(command_len, 4))) {
-			if (get_uint(argv[i]+end, &assoc->grp_nodes,
-				     "GrpNodes") == SLURM_SUCCESS)
-				set = 1;
-		} else if (!strncasecmp (argv[i], "GrpSubmitJobs",
-					 MAX(command_len, 4))) {
-			if (get_uint(argv[i]+end, &assoc->grp_submit_jobs,
-				     "GrpSubmitJobs") == SLURM_SUCCESS)
-				set = 1;
-		} else if (!strncasecmp (argv[i], "GrpWall",
+		} else if (!strncasecmp(argv[i], "GrpWall",
 					 MAX(command_len, 4))) {
 			exit_code=1;
 			fprintf(stderr, "GrpWall is not a valid option "
 				"for the root association of a cluster.\n");
-		} else if (!strncasecmp (argv[i], "MaxCPUMinsPerJob",
-					 MAX(command_len, 7))) {
-			if (get_uint64(argv[i]+end,
-				       &assoc->max_cpu_mins_pj,
-				       "MaxCPUMins") == SLURM_SUCCESS)
-				set = 1;
-		} else if (!strncasecmp (argv[i], "MaxCpusPerJob",
-					 MAX(command_len, 7))) {
-			if (get_uint(argv[i]+end, &assoc->max_cpus_pj,
-				     "MaxCpus") == SLURM_SUCCESS)
-				set = 1;
-		} else if (!strncasecmp (argv[i], "MaxJobs",
-					 MAX(command_len, 4))) {
-			if (get_uint(argv[i]+end, &assoc->max_jobs,
-				     "MaxJobs") == SLURM_SUCCESS)
-				set = 1;
-		} else if (!strncasecmp (argv[i], "MaxNodesPerJob",
-					 MAX(command_len, 4))) {
-			if (get_uint(argv[i]+end,
-				     &assoc->max_nodes_pj,
-				     "MaxNodes") == SLURM_SUCCESS)
-				set = 1;
-		} else if (!strncasecmp (argv[i], "MaxSubmitJobs",
-					 MAX(command_len, 4))) {
-			if (get_uint(argv[i]+end, &assoc->max_submit_jobs,
-				     "MaxSubmitJobs") == SLURM_SUCCESS)
-				set = 1;
-		} else if (!strncasecmp (argv[i], "MaxWallDurationPerJob",
-					 MAX(command_len, 4))) {
-			mins = time_str2mins(argv[i]+end);
-			if (mins != NO_VAL) {
-				assoc->max_wall_pj = (uint32_t) mins;
-				set = 1;
-			} else {
-				exit_code=1;
-				fprintf(stderr,
-					" Bad MaxWall time format: %s\n",
-					argv[i]);
-			}
-		} else if (!strncasecmp (argv[i], "QOSLevel",
-					 MAX(command_len, 1))) {
-			if(!assoc->qos_list)
-				assoc->qos_list =
-					list_create(slurm_destroy_char);
-
-			if(!g_qos_list)
-				g_qos_list = acct_storage_g_get_qos(
-					db_conn, my_uid, NULL);
-
-			if(slurmdb_addto_qos_char_list(assoc->qos_list,
-						       g_qos_list, argv[i]+end,
-						       option))
-				set = 1;
-			else
-				exit_code = 1;
-		} else {
+		} else if(!assoc ||
+			  (assoc && !(set = sacctmgr_set_association_rec(
+					      assoc, argv[i], argv[i]+end,
+					      command_len, option)))) {
 			exit_code=1;
 			fprintf(stderr, " Unknown option: %s\n"
 				" Use keyword 'where' to modify condition\n",
@@ -339,8 +235,8 @@ extern int sacctmgr_add_cluster(int argc, char *argv[])
 
 	for (i=0; i<argc; i++) {
 		int command_len = strlen(argv[i]);
-		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
-		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3)))
+		if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp(argv[i], "Set", MAX(command_len, 3)))
 			i++;
 		limit_set += _set_rec(&i, argc, argv,
 				      name_list, &start_assoc, &class);
@@ -539,8 +435,8 @@ extern int sacctmgr_list_cluster(int argc, char *argv[])
 	cluster_cond->cluster_list = list_create(slurm_destroy_char);
 	for (i=0; i<argc; i++) {
 		int command_len = strlen(argv[i]);
-		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
-		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3)))
+		if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp(argv[i], "Set", MAX(command_len, 3)))
 			i++;
 		_set_cond(&i, argc, argv, cluster_cond, format_list);
 	}
@@ -976,12 +872,12 @@ extern int sacctmgr_modify_cluster(int argc, char *argv[])
 
 	for (i=0; i<argc; i++) {
 		int command_len = strlen(argv[i]);
-		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))) {
+		if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))) {
 			i++;
 			prev_set = _set_cond(&i, argc, argv,
 					     &cluster_cond, NULL);
 			cond_set = MAX(cond_set, prev_set);
-		} else if (!strncasecmp (argv[i], "Set", MAX(command_len, 3))) {
+		} else if (!strncasecmp(argv[i], "Set", MAX(command_len, 3))) {
 			i++;
 			prev_set = _set_rec(&i, argc, argv,
 					    NULL, assoc, &class_rec);
@@ -1135,8 +1031,8 @@ extern int sacctmgr_delete_cluster(int argc, char *argv[])
 
 	for (i=0; i<argc; i++) {
 		int command_len = strlen(argv[i]);
-		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
-		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3)))
+		if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp(argv[i], "Set", MAX(command_len, 3)))
 			i++;
 		prev_set = _set_cond(&i, argc, argv, cluster_cond, NULL);
 		cond_set = MAX(cond_set, prev_set);
@@ -1244,7 +1140,7 @@ extern int sacctmgr_dump_cluster (int argc, char *argv[])
 				end++;
 			}
 		}
-		if(!end || !strncasecmp (argv[i], "Cluster",
+		if(!end || !strncasecmp(argv[i], "Cluster",
 					 MAX(command_len, 1))) {
 			if(cluster_name) {
 				exit_code=1;
@@ -1254,7 +1150,7 @@ extern int sacctmgr_dump_cluster (int argc, char *argv[])
 				continue;
 			}
 			cluster_name = xstrdup(argv[i]+end);
-		} else if (!strncasecmp (argv[i], "File",
+		} else if (!strncasecmp(argv[i], "File",
 					 MAX(command_len, 1))) {
 			if(file_name) {
 				exit_code=1;
diff --git a/src/sacctmgr/sacctmgr.h b/src/sacctmgr/sacctmgr.h
index 1855b4606ac6bf8fad1267066669940223d55ecb..e70b9da89a5226d804859268b78c41102528db1d 100644
--- a/src/sacctmgr/sacctmgr.h
+++ b/src/sacctmgr/sacctmgr.h
@@ -100,6 +100,13 @@ extern void *db_conn;
 extern uint32_t my_uid;
 extern List g_qos_list;
 
+extern int sacctmgr_set_association_cond(slurmdb_association_cond_t *assoc_cond,
+					 char *type, char *value,
+					 int command_len);
+extern int sacctmgr_set_association_rec(slurmdb_association_rec_t *assoc_rec,
+					char *type, char *value,
+					int command_len, int option);
+
 extern int sacctmgr_add_association(int argc, char *argv[]);
 extern int sacctmgr_add_user(int argc, char *argv[]);
 extern int sacctmgr_add_account(int argc, char *argv[]);
diff --git a/src/sacctmgr/user_functions.c b/src/sacctmgr/user_functions.c
index 257f623fab325a651c9feb5976e505b08e50e792..a48a6e5176a0cd36c300e20960dbbc840675e52e 100644
--- a/src/sacctmgr/user_functions.c
+++ b/src/sacctmgr/user_functions.c
@@ -83,71 +83,47 @@ static int _set_cond(int *start, int argc, char *argv[],
 			}
 		}
 
-		if (!strncasecmp (argv[i], "Set", MAX(command_len, 3))) {
+		if (!strncasecmp(argv[i], "Set", MAX(command_len, 3))) {
 			i--;
 			break;
-		} else if (!end && !strncasecmp (argv[i], "WithAssoc",
+		} else if (!end && !strncasecmp(argv[i], "WithAssoc",
 						 MAX(command_len, 5))) {
 			user_cond->with_assocs = 1;
 		} else if (!end &&
-			   !strncasecmp (argv[i], "WithCoordinators",
+			   !strncasecmp(argv[i], "WithCoordinators",
 					 MAX(command_len, 5))) {
 			user_cond->with_coords = 1;
 		} else if (!end &&
-			   !strncasecmp (argv[i], "WithDeleted",
+			   !strncasecmp(argv[i], "WithDeleted",
 					 MAX(command_len, 5))) {
 			user_cond->with_deleted = 1;
 			assoc_cond->with_deleted = 1;
 		} else if (!end &&
-			   !strncasecmp (argv[i], "WithRawQOSLevel",
+			   !strncasecmp(argv[i], "WithRawQOSLevel",
 					 MAX(command_len, 5))) {
 			assoc_cond->with_raw_qos = 1;
-		} else if (!end && !strncasecmp (argv[i], "WOPLimits",
+		} else if (!end && !strncasecmp(argv[i], "WOPLimits",
 						 MAX(command_len, 4))) {
 			assoc_cond->without_parent_limits = 1;
 		} else if(!end && !strncasecmp(argv[i], "where",
 					       MAX(command_len, 5))) {
 			continue;
 		} else if(!end
-			  || !strncasecmp (argv[i], "Names",
+			  || !strncasecmp(argv[i], "Names",
 					   MAX(command_len, 1))
-			  || !strncasecmp (argv[i], "Users",
+			  || !strncasecmp(argv[i], "Users",
 					   MAX(command_len, 1))) {
 			if(slurm_addto_char_list(assoc_cond->user_list,
 						 argv[i]+end))
 				u_set = 1;
 			else
 				exit_code=1;
-		} else if (!strncasecmp (argv[i], "Account",
-					 MAX(command_len, 2))
-			   || !strncasecmp (argv[i], "Acct",
-					    MAX(command_len, 4))) {
-			if(!assoc_cond->acct_list) {
-				assoc_cond->acct_list =
-					list_create(slurm_destroy_char);
-			}
-			if(slurm_addto_char_list(assoc_cond->acct_list,
-						 argv[i]+end))
-				a_set = 1;
-			else
-				exit_code=1;
-		} else if (!strncasecmp (argv[i], "AdminLevel",
+		} else if (!strncasecmp(argv[i], "AdminLevel",
 					 MAX(command_len, 2))) {
 			user_cond->admin_level =
 				str_2_slurmdb_admin_level(argv[i]+end);
 			u_set = 1;
-		} else if (!strncasecmp (argv[i], "Clusters",
-					 MAX(command_len, 1))) {
-			if(!assoc_cond->cluster_list) {
-				assoc_cond->cluster_list =
-					list_create(slurm_destroy_char);
-			}
-			if(slurm_addto_char_list(assoc_cond->cluster_list,
-						 argv[i]+end))
-				a_set = 1;
-			else
-				exit_code=1;
-		} else if (!strncasecmp (argv[i], "DefaultAccount",
+		} else if (!strncasecmp(argv[i], "DefaultAccount",
 					 MAX(command_len, 8))) {
 			if(!user_cond->def_acct_list) {
 				user_cond->def_acct_list =
@@ -158,7 +134,7 @@ static int _set_cond(int *start, int argc, char *argv[],
 				u_set = 1;
 			else
 				exit_code=1;
-		} else if (!strncasecmp (argv[i], "DefaultWCKey",
+		} else if (!strncasecmp(argv[i], "DefaultWCKey",
 					 MAX(command_len, 8))) {
 			if(!user_cond->def_wckey_list) {
 				user_cond->def_wckey_list =
@@ -169,199 +145,13 @@ static int _set_cond(int *start, int argc, char *argv[],
 				u_set = 1;
 			else
 				exit_code=1;
-		} else if (!strncasecmp (argv[i], "DefaultQOS",
-					 MAX(command_len, 8))) {
-			if(!assoc_cond->def_qos_id_list) {
-				assoc_cond->def_qos_id_list =
-					list_create(slurm_destroy_char);
-			}
-			if(!g_qos_list) {
-				g_qos_list = acct_storage_g_get_qos(
-					db_conn, my_uid, NULL);
-			}
-
-			if(slurmdb_addto_qos_char_list(
-				   assoc_cond->def_qos_id_list,
-				   g_qos_list,
-				   argv[i]+end, 0))
-				a_set = 1;
-			else
-				exit_code = 1;
-		} else if (!strncasecmp (argv[i], "Format",
+		} else if (!strncasecmp(argv[i], "Format",
 					 MAX(command_len, 1))) {
 			if(format_list)
 				slurm_addto_char_list(format_list, argv[i]+end);
-		} else if (!strncasecmp (argv[i], "FairShare",
-					 MAX(command_len, 1))
-			   || !strncasecmp (argv[i], "Shares",
-					    MAX(command_len, 1))) {
-			if(!assoc_cond->fairshare_list)
-				assoc_cond->fairshare_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(assoc_cond->fairshare_list,
-						 argv[i]+end))
-				a_set = 1;
-			else
-				exit_code=1;
-		} else if (!strncasecmp (argv[i], "GrpCPUMins",
-					 MAX(command_len, 7))) {
-			if(!assoc_cond->grp_cpu_mins_list)
-				assoc_cond->grp_cpu_mins_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(assoc_cond->grp_cpu_mins_list,
-						 argv[i]+end))
-				a_set = 1;
-			else
-				exit_code=1;
-		} else if (!strncasecmp (argv[i], "GrpCpus",
-					 MAX(command_len, 7))) {
-			if(!assoc_cond->grp_cpus_list)
-				assoc_cond->grp_cpus_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(assoc_cond->grp_cpus_list,
-						 argv[i]+end))
-				a_set = 1;
-			else
-				exit_code=1;
-		} else if (!strncasecmp (argv[i], "GrpJobs",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->grp_jobs_list)
-				assoc_cond->grp_jobs_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(assoc_cond->grp_jobs_list,
-						 argv[i]+end))
-				a_set = 1;
-			else
-				exit_code=1;
-		} else if (!strncasecmp (argv[i], "GrpNodes",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->grp_nodes_list)
-				assoc_cond->grp_nodes_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(assoc_cond->grp_nodes_list,
-						 argv[i]+end))
-				a_set = 1;
-			else
-				exit_code=1;
-		} else if (!strncasecmp (argv[i], "GrpSubmitJobs",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->grp_submit_jobs_list)
-				assoc_cond->grp_submit_jobs_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->grp_submit_jobs_list,
-				   argv[i]+end))
-				a_set = 1;
-			else
-				exit_code=1;
-		} else if (!strncasecmp (argv[i], "GrpWall",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->grp_wall_list)
-				assoc_cond->grp_wall_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->grp_wall_list,
-				   argv[i]+end))
-				a_set = 1;
-			else
-				exit_code=1;
-		} else if (!strncasecmp (argv[i], "MaxCPUMinsPerJob",
-					 MAX(command_len, 7))) {
-			if(!assoc_cond->max_cpu_mins_pj_list)
-				assoc_cond->max_cpu_mins_pj_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->max_cpu_mins_pj_list,
-				   argv[i]+end))
-				a_set = 1;
-			else
-				exit_code=1;
-		} else if (!strncasecmp (argv[i], "MaxCpusPerJob",
-					 MAX(command_len, 7))) {
-			if(!assoc_cond->max_cpus_pj_list)
-				assoc_cond->max_cpus_pj_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->max_cpus_pj_list,
-				   argv[i]+end))
-				a_set = 1;
-			else
-				exit_code=1;
-		} else if (!strncasecmp (argv[i], "MaxJobs",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->max_jobs_list)
-				assoc_cond->max_jobs_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->max_jobs_list,
-				   argv[i]+end))
-				a_set = 1;
-			else
-				exit_code=1;
-		} else if (!strncasecmp (argv[i], "MaxNodesPerJob",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->max_nodes_pj_list)
-				assoc_cond->max_nodes_pj_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->max_nodes_pj_list,
-				   argv[i]+end))
-				a_set = 1;
-			else
-				exit_code=1;
-		} else if (!strncasecmp (argv[i], "MaxSubmitJobs",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->max_submit_jobs_list)
-				assoc_cond->max_submit_jobs_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->max_submit_jobs_list,
-				   argv[i]+end))
-				a_set = 1;
-			else
-				exit_code=1;
-		} else if (!strncasecmp (argv[i], "MaxWallDurationPerJob",
-					 MAX(command_len, 4))) {
-			if(!assoc_cond->max_wall_pj_list)
-				assoc_cond->max_wall_pj_list =
-					list_create(slurm_destroy_char);
-			if(slurm_addto_char_list(
-				   assoc_cond->max_wall_pj_list,
-				   argv[i]+end))
-				a_set = 1;
-			else
-				exit_code=1;
-		} else if (!strncasecmp (argv[i], "Partition",
-					 MAX(command_len, 3))) {
-			if(!assoc_cond->partition_list) {
-				assoc_cond->partition_list =
-					list_create(slurm_destroy_char);
-			}
-			if(slurm_addto_char_list(
-				   assoc_cond->partition_list,
-				   argv[i]+end))
-				a_set = 1;
-			else
-				exit_code=1;
-		} else if (!strncasecmp (argv[i], "QosLevel",
-					 MAX(command_len, 1))) {
-			if(!assoc_cond->qos_list) {
-				assoc_cond->qos_list =
-					list_create(slurm_destroy_char);
-			}
-
-			if(!g_qos_list) {
-				g_qos_list = acct_storage_g_get_qos(
-					db_conn, my_uid, NULL);
-			}
-
-			if(slurmdb_addto_qos_char_list(assoc_cond->qos_list,
-						       g_qos_list, argv[i]+end,
-						       option))
-				u_set = 1;
-			else
-				exit_code=1;
-		} else {
+		} else if(!(a_set = sacctmgr_set_association_cond(
+				    assoc_cond, argv[i], argv[i]+end,
+				    command_len))) {
 			exit_code=1;
 			fprintf(stderr, " Unknown condition: %s\n"
 				" Use keyword 'set' to modify value\n",
@@ -385,7 +175,7 @@ static int _set_rec(int *start, int argc, char *argv[],
 		    slurmdb_user_rec_t *user,
 		    slurmdb_association_rec_t *assoc)
 {
-	int i, mins;
+	int i;
 	int u_set = 0;
 	int a_set = 0;
 	int end = 0;
@@ -404,7 +194,7 @@ static int _set_rec(int *start, int argc, char *argv[],
 			}
 		}
 
-		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))) {
+		if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))) {
 			i--;
 			break;
 		} else if(!end && !strncasecmp(argv[i], "set",
@@ -415,185 +205,34 @@ static int _set_rec(int *start, int argc, char *argv[],
 			fprintf(stderr,
 				" Bad format on %s: End your option with "
 				"an '=' sign\n", argv[i]);
-		} else if (!strncasecmp (argv[i], "AdminLevel",
+		} else if (!strncasecmp(argv[i], "AdminLevel",
 					 MAX(command_len, 2))) {
 			user->admin_level =
 				str_2_slurmdb_admin_level(argv[i]+end);
 			u_set = 1;
-		} else if (!strncasecmp (argv[i], "DefaultAccount",
+		} else if (!strncasecmp(argv[i], "DefaultAccount",
 					 MAX(command_len, 8))) {
 			if(user->default_acct)
 				xfree(user->default_acct);
 			user->default_acct = strip_quotes(argv[i]+end, NULL, 1);
 			u_set = 1;
-		} else if (!strncasecmp (argv[i], "DefaultWCKey",
+		} else if (!strncasecmp(argv[i], "DefaultWCKey",
 					 MAX(command_len, 8))) {
 			if(user->default_wckey)
 				xfree(user->default_wckey);
 			user->default_wckey =
 				strip_quotes(argv[i]+end, NULL, 1);
 			u_set = 1;
-		} else if (!strncasecmp (argv[i], "DefaultQOS",
-					 MAX(command_len, 8))) {
-			if(!assoc)
-				continue;
-
-			if(!g_qos_list) {
-				g_qos_list = acct_storage_g_get_qos(
-					db_conn, my_uid, NULL);
-			}
-
-			if(atoi(argv[i]+end) == -1)
-				assoc->def_qos_id = -1;
-			else
-				assoc->def_qos_id = str_2_slurmdb_qos(
-					g_qos_list, argv[i]+end);
-
-			if(assoc->def_qos_id == NO_VAL) {
-				fprintf(stderr,
-					"You gave a bad qos '%s'.  "
-					"Use 'list qos' to get "
-					"complete list.\n",
-					argv[i]+end);
-				exit_code = 1;
-				break;
-			}
-			a_set = 1;
-		} else if (!strncasecmp (argv[i], "FairShare",
-					 MAX(command_len, 1))
-			   || !strncasecmp (argv[i], "Shares",
-					    MAX(command_len, 1))) {
-			if(!assoc)
-				continue;
-			if (get_uint(argv[i]+end, &assoc->shares_raw,
-				     "FairShare") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpCPUMins",
-					 MAX(command_len, 7))) {
-			if(!assoc)
-				continue;
-			if (get_uint64(argv[i]+end,
-				       &assoc->grp_cpu_mins,
-				       "GrpCPUMins") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpCpus",
-					 MAX(command_len, 7))) {
-			if(!assoc)
-				continue;
-			if (get_uint(argv[i]+end, &assoc->grp_cpus,
-				     "GrpCpus") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpJobs",
-					 MAX(command_len, 4))) {
-			if(!assoc)
-				continue;
-			if (get_uint(argv[i]+end, &assoc->grp_jobs,
-				     "GrpJobs") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpNodes",
-					 MAX(command_len, 4))) {
-			if(!assoc)
-				continue;
-			if (get_uint(argv[i]+end, &assoc->grp_nodes,
-				     "GrpNodes") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpSubmitJobs",
-					 MAX(command_len, 4))) {
-			if(!assoc)
-				continue;
-			if (get_uint(argv[i]+end, &assoc->grp_submit_jobs,
-				     "GrpSubmitJobs") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpWall",
-					 MAX(command_len, 4))) {
-			if(!assoc)
-				continue;
-			mins = time_str2mins(argv[i]+end);
-			if (mins != NO_VAL) {
-				assoc->grp_wall	= (uint32_t) mins;
-				a_set = 1;
-			} else {
-				exit_code=1;
-				fprintf(stderr,
-					" Bad GrpWall time format: %s\n",
-					argv[i]);
-			}
-		} else if (!strncasecmp (argv[i], "MaxCPUMinsPerJob",
-					 MAX(command_len, 7))) {
-			if(!assoc)
-				continue;
-			if (get_uint64(argv[i]+end,
-				       &assoc->max_cpu_mins_pj,
-				       "MaxCPUMins") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxCpusPerJob",
-					 MAX(command_len, 7))) {
-			if(!assoc)
-				continue;
-			if (get_uint(argv[i]+end, &assoc->max_cpus_pj,
-				     "MaxCpus") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxJobs",
-					 MAX(command_len, 4))) {
-			if(!assoc)
-				continue;
-			if (get_uint(argv[i]+end, &assoc->max_jobs,
-				     "MaxJobs") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxNodesPerJob",
-					 MAX(command_len, 4))) {
-			if(!assoc)
-				continue;
-			if (get_uint(argv[i]+end,
-				     &assoc->max_nodes_pj,
-				     "MaxNodes") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxSubmitJobs",
-					 MAX(command_len, 4))) {
-			if(!assoc)
-				continue;
-			if (get_uint(argv[i]+end, &assoc->max_submit_jobs,
-				     "MaxSubmitJobs") == SLURM_SUCCESS)
-				a_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxWallDurationPerJob",
-					 MAX(command_len, 4))) {
-			if(!assoc)
-				continue;
-			mins = time_str2mins(argv[i]+end);
-			if (mins != NO_VAL) {
-				assoc->max_wall_pj = (uint32_t) mins;
-				a_set = 1;
-			} else {
-				exit_code=1;
-				fprintf(stderr,
-					" Bad MaxWall time format: %s\n",
-					argv[i]);
-			}
-		} else if (!strncasecmp (argv[i], "NewName",
+		} else if (!strncasecmp(argv[i], "NewName",
 					 MAX(command_len, 1))) {
 			if(user->name)
 				xfree(user->name);
 			user->name = strip_quotes(argv[i]+end, NULL, 1);
 			u_set = 1;
-		} else if (!strncasecmp (argv[i], "QosLevel",
-					 MAX(command_len, 1))) {
-			if(!assoc)
-				continue;
-			if(!assoc->qos_list)
-				assoc->qos_list =
-					list_create(slurm_destroy_char);
-
-			if(!g_qos_list)
-				g_qos_list = acct_storage_g_get_qos(
-					db_conn, my_uid, NULL);
-
-			if(slurmdb_addto_qos_char_list(assoc->qos_list,
-						       g_qos_list, argv[i]+end,
-						       option))
-				a_set = 1;
-			else
-				exit_code = 1;
-		} else {
+		} else if(!assoc ||
+			  (assoc && !(a_set = sacctmgr_set_association_rec(
+					      assoc, argv[i], argv[i]+end,
+					      command_len, option)))) {
 			exit_code=1;
 			fprintf(stderr, " Unknown option: %s\n"
 				" Use keyword 'where' to modify condition\n",
@@ -776,7 +415,7 @@ extern int sacctmgr_add_user(int argc, char *argv[])
 	char *user_str = NULL;
 	char *assoc_str = NULL;
 	char *wckey_str = NULL;
-	int limit_set = 0, mins;
+	int limit_set = 0;
 	int first = 1;
 	int acct_first = 1;
 	int command_len = 0;
@@ -814,27 +453,15 @@ extern int sacctmgr_add_user(int argc, char *argv[])
 		}
 
 		if(!end
-		   || !strncasecmp (argv[i], "Names", MAX(command_len, 1))
-		   || !strncasecmp (argv[i], "Users", MAX(command_len, 1))) {
+		   || !strncasecmp(argv[i], "Names", MAX(command_len, 1))
+		   || !strncasecmp(argv[i], "Users", MAX(command_len, 1))) {
 			if(!slurm_addto_char_list(assoc_cond->user_list,
 						 argv[i]+end))
 				exit_code=1;
-		} else if (!strncasecmp (argv[i], "Accounts",
-					 MAX(command_len, 2))
-			   || !strncasecmp (argv[i], "Acct",
-					    MAX(command_len, 4))) {
-			if(!slurm_addto_char_list(assoc_cond->acct_list,
-						  argv[i]+end))
-				exit_code=1;
-		} else if (!strncasecmp (argv[i], "AdminLevel",
+		} else if (!strncasecmp(argv[i], "AdminLevel",
 					 MAX(command_len, 2))) {
 			admin_level = str_2_slurmdb_admin_level(argv[i]+end);
-		} else if (!strncasecmp (argv[i], "Clusters",
-					 MAX(command_len, 1))) {
-			if(!slurm_addto_char_list(assoc_cond->cluster_list,
-						  argv[i]+end))
-				exit_code=1;
-		} else if (!strncasecmp (argv[i], "DefaultAccount",
+		} else if (!strncasecmp(argv[i], "DefaultAccount",
 					 MAX(command_len, 8))) {
 			if(default_acct) {
 				fprintf(stderr,
@@ -846,7 +473,7 @@ extern int sacctmgr_add_user(int argc, char *argv[])
 			default_acct = strip_quotes(argv[i]+end, NULL, 1);
 			slurm_addto_char_list(assoc_cond->acct_list,
 					      default_acct);
-		} else if (!strncasecmp (argv[i], "DefaultWCKey",
+		} else if (!strncasecmp(argv[i], "DefaultWCKey",
 					 MAX(command_len, 8))) {
 			if(default_wckey) {
 				fprintf(stderr,
@@ -858,119 +485,16 @@ extern int sacctmgr_add_user(int argc, char *argv[])
 			default_wckey = strip_quotes(argv[i]+end, NULL, 1);
 			slurm_addto_char_list(wckey_cond->name_list,
 					      default_wckey);
-		} else if (!strncasecmp (argv[i], "FairShare",
-					 MAX(command_len, 1))
-			   || !strncasecmp (argv[i], "Shares",
-					    MAX(command_len, 1))) {
-			if (get_uint(argv[i]+end, &start_assoc.shares_raw,
-				     "FairShare") == SLURM_SUCCESS)
-				limit_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpCPUMins",
-					 MAX(command_len, 7))) {
-			if (get_uint64(argv[i]+end,
-				       &start_assoc.grp_cpu_mins,
-				       "GrpCPUMins") == SLURM_SUCCESS)
-				limit_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpCpus",
-					 MAX(command_len, 7))) {
-			if (get_uint(argv[i]+end, &start_assoc.grp_cpus,
-				     "GrpCpus") == SLURM_SUCCESS)
-				limit_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpJobs",
-					 MAX(command_len, 4))) {
-			if (get_uint(argv[i]+end, &start_assoc.grp_jobs,
-				     "GrpJobs") == SLURM_SUCCESS)
-				limit_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpNodes",
-					 MAX(command_len, 4))) {
-			if (get_uint(argv[i]+end, &start_assoc.grp_nodes,
-				     "GrpNodes") == SLURM_SUCCESS)
-				limit_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpSubmitJobs",
-					 MAX(command_len, 4))) {
-			if (get_uint(argv[i]+end, &start_assoc.grp_submit_jobs,
-				     "GrpSubmitJobs") == SLURM_SUCCESS)
-				limit_set = 1;
-		} else if (!strncasecmp (argv[i], "GrpWall",
-					 MAX(command_len, 4))) {
-			mins = time_str2mins(argv[i]+end);
-			if (mins != NO_VAL) {
-				start_assoc.grp_wall = (uint32_t) mins;
-				limit_set = 1;
-			} else {
-				exit_code=1;
-				fprintf(stderr,
-					" Bad GrpWall time format: %s\n",
-					argv[i]);
-			}
-		} else if (!strncasecmp (argv[i], "MaxCPUMinsPerJob",
-					 MAX(command_len, 7))) {
-			if (get_uint64(argv[i]+end,
-				       &start_assoc.max_cpu_mins_pj,
-				       "MaxCPUMins") == SLURM_SUCCESS)
-				limit_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxCpusPerJob",
-					 MAX(command_len, 7))) {
-			if (get_uint(argv[i]+end, &start_assoc.max_cpus_pj,
-				     "MaxCpus") == SLURM_SUCCESS)
-				limit_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxJobs",
-					 MAX(command_len, 4))) {
-			if (get_uint(argv[i]+end, &start_assoc.max_jobs,
-				     "MaxJobs") == SLURM_SUCCESS)
-				limit_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxNodesPerJob",
-					 MAX(command_len, 4))) {
-			if (get_uint(argv[i]+end,
-				     &start_assoc.max_nodes_pj,
-				     "MaxNodes") == SLURM_SUCCESS)
-				limit_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxSubmitJobs",
-					 MAX(command_len, 4))) {
-			if (get_uint(argv[i]+end, &start_assoc.max_submit_jobs,
-				     "MaxSubmitJobs") == SLURM_SUCCESS)
-				limit_set = 1;
-		} else if (!strncasecmp (argv[i], "MaxWallDurationPerJob",
-					 MAX(command_len, 4))) {
-			mins = time_str2mins(argv[i]+end);
-			if (mins != NO_VAL) {
-				start_assoc.max_wall_pj = (uint32_t) mins;
-				limit_set = 1;
-			} else {
-				exit_code=1;
-				fprintf(stderr,
-					" Bad MaxWall time format: %s\n",
-					argv[i]);
-			}
-		} else if (!strncasecmp (argv[i], "Partitions",
-					 MAX(command_len, 1))) {
-			slurm_addto_char_list(assoc_cond->partition_list,
-					      argv[i]+end);
-		} else if (!strncasecmp (argv[i], "QosLevel",
-					 MAX(command_len, 1))) {
-			if(!start_assoc.qos_list)
-				start_assoc.qos_list =
-					list_create(slurm_destroy_char);
-
-			if(!g_qos_list)
-				g_qos_list = acct_storage_g_get_qos(
-					db_conn, my_uid, NULL);
-
-			if(slurmdb_addto_qos_char_list(start_assoc.qos_list,
-						       g_qos_list,
-						       argv[i]+end, option))
-				limit_set = 1;
-			else {
-				exit_code = 1;
-				fprintf(stderr,
-					" Bad QosLevel value: %s\n",
-					argv[i]+end);
-			}
-		} else if (!strncasecmp (argv[i], "WCKeys",
+		} else if (!strncasecmp(argv[i], "WCKeys",
 					 MAX(command_len, 1))) {
 			slurm_addto_char_list(wckey_cond->name_list,
 					      argv[i]+end);
-		} else {
+		} else if(!(limit_set = sacctmgr_set_association_rec(
+				    &start_assoc, argv[i], argv[i]+end,
+				    command_len, option))
+			  && !(limit_set = sacctmgr_set_association_cond(
+				       assoc_cond, argv[i], argv[i]+end,
+				       command_len))) {
 			exit_code=1;
 			fprintf(stderr, " Unknown option: %s\n", argv[i]);
 		}
@@ -1523,8 +1047,8 @@ extern int sacctmgr_add_coord(int argc, char *argv[])
 
 	for (i=0; i<argc; i++) {
 		int command_len = strlen(argv[i]);
-		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
-		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3)))
+		if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp(argv[i], "Set", MAX(command_len, 3)))
 			i++;
 		prev_set = _set_cond(&i, argc, argv, user_cond, NULL);
 		cond_set = MAX(cond_set, prev_set);
@@ -1615,6 +1139,7 @@ extern int sacctmgr_list_user(int argc, char *argv[])
 		PRINT_DWCKEY,
 		PRINT_FAIRSHARE,
 		PRINT_GRPCM,
+		PRINT_GRPCRM,
 		PRINT_GRPC,
 		PRINT_GRPJ,
 		PRINT_GRPN,
@@ -1623,6 +1148,7 @@ extern int sacctmgr_list_user(int argc, char *argv[])
 		PRINT_ID,
 		PRINT_MAXC,
 		PRINT_MAXCM,
+		PRINT_MAXCRM,
 		PRINT_MAXJ,
 		PRINT_MAXN,
 		PRINT_MAXS,
@@ -1639,8 +1165,8 @@ extern int sacctmgr_list_user(int argc, char *argv[])
 
 	for (i=0; i<argc; i++) {
 		int command_len = strlen(argv[i]);
-		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
-		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3)))
+		if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp(argv[i], "Set", MAX(command_len, 3)))
 			i++;
 		prev_set = _set_cond(&i, argc, argv, user_cond, format_list);
 		cond_set = MAX(cond_set, prev_set);
@@ -1694,7 +1220,7 @@ extern int sacctmgr_list_user(int argc, char *argv[])
 
 		field = xmalloc(sizeof(print_field_t));
 		if(!strncasecmp("Account", object, MAX(command_len, 2))
-		   || !strncasecmp ("Acct", object, MAX(command_len, 4))) {
+		   || !strncasecmp("Acct", object, MAX(command_len, 4))) {
 			field->type = PRINT_ACCOUNT;
 			field->name = xstrdup("Account");
 			field->len = 10;
@@ -1747,6 +1273,12 @@ extern int sacctmgr_list_user(int argc, char *argv[])
 			field->name = xstrdup("GrpCPUMins");
 			field->len = 11;
 			field->print_routine = print_fields_uint64;
+		} else if(!strncasecmp("GrpCPURunMins", object,
+				       MAX(command_len, 8))) {
+			field->type = PRINT_GRPCRM;
+			field->name = xstrdup("GrpCPURunMins");
+			field->len = 13;
+			field->print_routine = print_fields_uint64;
 		} else if(!strncasecmp("GrpCPUs", object,
 				       MAX(command_len, 8))) {
 			field->type = PRINT_GRPC;
@@ -1788,6 +1320,12 @@ extern int sacctmgr_list_user(int argc, char *argv[])
 			field->name = xstrdup("MaxCPUMins");
 			field->len = 11;
 			field->print_routine = print_fields_uint64;
+		} else if(!strncasecmp("MaxCPURunMins", object,
+				       MAX(command_len, 7))) {
+			field->type = PRINT_MAXCRM;
+			field->name = xstrdup("MaxCPURunMins");
+			field->len = 11;
+			field->print_routine = print_fields_uint64;
 		} else if(!strncasecmp("MaxCPUsPerJob", object,
 				       MAX(command_len, 7))) {
 			field->type = PRINT_MAXC;
@@ -1979,6 +1517,13 @@ extern int sacctmgr_list_user(int argc, char *argv[])
 							(curr_inx ==
 							 field_count));
 						break;
+					case PRINT_GRPCRM:
+						field->print_routine(
+							field,
+							assoc->grp_cpu_run_mins,
+							(curr_inx ==
+							 field_count));
+						break;
 					case PRINT_GRPC:
 						field->print_routine(
 							field,
@@ -2029,6 +1574,14 @@ extern int sacctmgr_list_user(int argc, char *argv[])
 							(curr_inx ==
 							 field_count));
 						break;
+					case PRINT_MAXCRM:
+						field->print_routine(
+							field,
+							assoc->
+							max_cpu_run_mins,
+							(curr_inx ==
+							 field_count));
+						break;
 					case PRINT_MAXC:
 						field->print_routine(
 							field,
@@ -2233,11 +1786,11 @@ extern int sacctmgr_modify_user(int argc, char *argv[])
 
 	for (i=0; i<argc; i++) {
 		int command_len = strlen(argv[i]);
-		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))) {
+		if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))) {
 			i++;
 			prev_set = _set_cond(&i, argc, argv, user_cond, NULL);
 			cond_set = MAX(cond_set, prev_set);
-		} else if (!strncasecmp (argv[i], "Set", MAX(command_len, 3))) {
+		} else if (!strncasecmp(argv[i], "Set", MAX(command_len, 3))) {
 			i++;
 			prev_set = _set_rec(&i, argc, argv, user, assoc);
 			rec_set = MAX(rec_set, prev_set);
@@ -2430,8 +1983,8 @@ extern int sacctmgr_delete_user(int argc, char *argv[])
 
 	for (i=0; i<argc; i++) {
 		int command_len = strlen(argv[i]);
-		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
-		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3)))
+		if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp(argv[i], "Set", MAX(command_len, 3)))
 			i++;
 		prev_set = _set_cond(&i, argc, argv, user_cond, NULL);
 		cond_set = MAX(cond_set, prev_set);
@@ -2526,8 +2079,8 @@ extern int sacctmgr_delete_coord(int argc, char *argv[])
 
 	for (i=0; i<argc; i++) {
 		int command_len = strlen(argv[i]);
-		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
-		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3)))
+		if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp(argv[i], "Set", MAX(command_len, 3)))
 			i++;
 		prev_set = _set_cond(&i, argc, argv, user_cond, NULL);
 		cond_set = MAX(cond_set, prev_set);