diff --git a/src/sacctmgr/account_functions.c b/src/sacctmgr/account_functions.c
index 870b8324843589637121de1dcfcca1369744283f..8e7659bb1e41cab9839a9103ee89f576304b1439 100644
--- a/src/sacctmgr/account_functions.c
+++ b/src/sacctmgr/account_functions.c
@@ -118,19 +118,22 @@ static int _set_rec(int *start, int argc, char *argv[],
 		} else if (strncasecmp (argv[i], "Description", 1) == 0) {
 			acct->description = xstrdup(argv[i]+end);
 			u_set = 1;
-		} else if (strncasecmp (argv[i], "Fairshare", 1) == 0) {
-			assoc->fairshare = atoi(argv[i]+end);
-			a_set = 1;
+		} else if (strncasecmp (argv[i], "FairShare", 1) == 0) {
+			if (get_uint(argv[i]+end, &assoc->fairshare, 
+			    "FairShare") == SLURM_SUCCESS)
+				a_set = 1;
 		} else if (strncasecmp (argv[i], "MaxCPUSec", 4) == 0) {
-			assoc->max_cpu_secs_per_job =
-				atoi(argv[i]+end);
-			a_set = 1;
+			if (get_uint(argv[i]+end, &assoc->max_cpu_secs_per_job,
+			    "MaxCPUSec") == SLURM_SUCCESS)
+				a_set = 1;
 		} else if (strncasecmp (argv[i], "MaxJobs", 4) == 0) {
-			assoc->max_jobs = atoi(argv[i]+end);
-			a_set = 1;
+			if (get_uint(argv[i]+end, &assoc->max_jobs,
+			    "MaxJobs") == SLURM_SUCCESS)
+				a_set = 1;
 		} else if (strncasecmp (argv[i], "MaxNodes", 4) == 0) {
-			assoc->max_nodes_per_job = atoi(argv[i]+end);
-			a_set = 1;
+			if (get_uint(argv[i]+end, &assoc->max_nodes_per_job,
+			    "MaxNodes") == SLURM_SUCCESS)
+				a_set = 1;
 		} else if (strncasecmp (argv[i], "MaxWall", 4) == 0) {
 			assoc->max_wall_duration_per_job = 
 				(uint32_t) time_str2mins(argv[i]+end);
@@ -244,11 +247,11 @@ extern int sacctmgr_add_account(int argc, char *argv[])
 	List assoc_list = NULL;
 	List local_assoc_list = NULL;
 	List local_account_list = NULL;
-	uint32_t fairshare = -2; 
-	uint32_t max_jobs = -2; 
-	uint32_t max_nodes_per_job = -2;
-	uint32_t max_wall_duration_per_job = -2;
-	uint32_t max_cpu_secs_per_job = -2;
+	uint32_t fairshare = NO_VAL; 
+	uint32_t max_jobs = NO_VAL;
+	uint32_t max_nodes_per_job = NO_VAL;
+	uint32_t max_wall_duration_per_job = NO_VAL;
+	uint32_t max_cpu_secs_per_job = NO_VAL;
 	char *acct_str = NULL;
 	char *assoc_str = NULL;
 	int limit_set = 0;
@@ -262,17 +265,21 @@ extern int sacctmgr_add_account(int argc, char *argv[])
 		} else if (strncasecmp (argv[i], "Description", 1) == 0) {
 			description = xstrdup(argv[i]+end);
 		} else if (strncasecmp (argv[i], "FairShare", 1) == 0) {
-			fairshare = atoi(argv[i]+end);
-			limit_set = 1;
+			if (get_uint(argv[i]+end, &fairshare, 
+			    "FairShare") == SLURM_SUCCESS)
+				limit_set = 1;
 		} else if (strncasecmp (argv[i], "MaxCPUSecs", 4) == 0) {
-			max_cpu_secs_per_job = atoi(argv[i]+end);
-			limit_set = 1;
+			if (get_uint(argv[i]+end, &max_cpu_secs_per_job, 
+			    "MaxCPUSecs") == SLURM_SUCCESS)
+				limit_set = 1;
 		} else if (strncasecmp (argv[i], "MaxJobs", 4) == 0) {
-			max_jobs = atoi(argv[i]+end);
-			limit_set = 1;
+			if (get_uint(argv[i]+end, &max_jobs, 
+			    "MaxJobs") == SLURM_SUCCESS)
+				limit_set = 1;
 		} else if (strncasecmp (argv[i], "MaxNodes", 4) == 0) {
-			max_nodes_per_job = atoi(argv[i]+end);
-			limit_set = 1;
+			if (get_uint(argv[i]+end, &max_nodes_per_job, 
+			    "MaxNodes") == SLURM_SUCCESS)
+				limit_set = 1;
 		} else if (strncasecmp (argv[i], "MaxWall", 4) == 0) {
 			max_wall_duration_per_job = 
 				(uint32_t) time_str2mins(argv[i]+end);
@@ -531,16 +538,16 @@ extern int sacctmgr_add_account(int argc, char *argv[])
 
 	if(limit_set) {
 		printf(" Settings\n");
-		if((int)fairshare != -2)
+		if(fairshare != NO_VAL)
 			printf("  Fairshare       = %u\n", fairshare);
-		if((int)max_cpu_secs_per_job != -2)
+		if(max_cpu_secs_per_job != NO_VAL)
 			printf("  MaxCPUSecs      = %u\n",
 			       max_cpu_secs_per_job);
-		if((int)max_jobs != -2)
+		if(max_jobs != NO_VAL)
 			printf("  MaxJobs         = %u\n", max_jobs);
-		if((int)max_nodes_per_job != -2)
+		if(max_nodes_per_job != NO_VAL)
 			printf("  MaxNodes        = %u\n", max_nodes_per_job);
-		if((int)max_wall_duration_per_job != -2) {
+		if(max_wall_duration_per_job != NO_VAL) {
 			char time_buf[32];
 			mins2time_str((time_t) max_wall_duration_per_job, 
 				      time_buf, sizeof(time_buf));
@@ -732,17 +739,17 @@ extern int sacctmgr_modify_account(int argc, char *argv[])
 	acct_cond->assoc_cond = xmalloc(sizeof(acct_association_cond_t));
 	acct_cond->assoc_cond->cluster_list = list_create(slurm_destroy_char);
 	acct_cond->assoc_cond->acct_list = list_create(slurm_destroy_char);
-	acct_cond->assoc_cond->fairshare = -2; 
-	acct_cond->assoc_cond->max_cpu_secs_per_job = -2;
-	acct_cond->assoc_cond->max_jobs = -2; 
-	acct_cond->assoc_cond->max_nodes_per_job = -2;
-	acct_cond->assoc_cond->max_wall_duration_per_job = -2;
+	acct_cond->assoc_cond->fairshare = NO_VAL;
+	acct_cond->assoc_cond->max_cpu_secs_per_job = NO_VAL;
+	acct_cond->assoc_cond->max_jobs = NO_VAL;
+	acct_cond->assoc_cond->max_nodes_per_job = NO_VAL;
+	acct_cond->assoc_cond->max_wall_duration_per_job = NO_VAL;
 	
-	assoc->fairshare = -2; 
-	assoc->max_cpu_secs_per_job = -2;
-	assoc->max_jobs = -2; 
-	assoc->max_nodes_per_job = -2;
-	assoc->max_wall_duration_per_job = -2;
+	assoc->fairshare = NO_VAL;
+	assoc->max_cpu_secs_per_job = NO_VAL;
+	assoc->max_jobs = NO_VAL;
+	assoc->max_nodes_per_job = NO_VAL;
+	assoc->max_wall_duration_per_job = NO_VAL;
 
 	for (i=0; i<argc; i++) {
 		if (strncasecmp (argv[i], "Where", 5) == 0) {
diff --git a/src/sacctmgr/association_functions.c b/src/sacctmgr/association_functions.c
index 2479a2bf5f578c885cad6643193e6c4ba0ff1abd..cd76212aebbdfdfcd3265e2288fc977c80d29abc 100644
--- a/src/sacctmgr/association_functions.c
+++ b/src/sacctmgr/association_functions.c
@@ -104,43 +104,55 @@ static int _set_rec(int *start, int argc, char *argv[],
 	int set = 0;
 
 	for (i=(*start); i<argc; i++) {
-		if (strncasecmp (argv[i], "Id=", 3) == 0) {
-			association->id = atoi(argv[i]+3);
-			set = 1;
-		} else if (strncasecmp (argv[i], "User=", 5) == 0) {
-			association->user = xstrdup(argv[i]+5);
-			set = 1;
-		} else if (strncasecmp (argv[i], "Account=", 8) == 0) {
-			association->account = xstrdup(argv[i]+8);
-			set = 1;
-		} else if (strncasecmp (argv[i], "Cluster=", 8) == 0) {
-			association->cluster = xstrdup(argv[i]+8);
-			set = 1;
-		} else if (strncasecmp (argv[i], "Partition=", 10) == 0) {
-			association->partition = xstrdup(argv[i]+10);
+		int end = parse_option_end(argv[i]);
+		if (strncasecmp (argv[i], "Where", 5) == 0) {
+			i--;
+			break;
+		}
+		if (!end) {
+			printf(" Bad format on %s: End your option with "
+			       "an '=' sign\n", argv[i]);
+		} else if (strncasecmp (argv[i], "Id", ) == 0) {
+			if (get_uint(argv[i]+end, &association->id, 
+			    "Id") == SLURM_SUCCESS)
+				set = 1;
+		} else if (strncasecmp (argv[i], "User", 2) == 0) {
+			association->user = xstrdup(argv[i]+end);
 			set = 1;
-		} else if (strncasecmp (argv[i], "Parent=", 7) == 0) {
-			association->parent_account = xstrdup(argv[i]+7);
+		} else if (strncasecmp (argv[i], "Account", 2) == 0) {
+			association->account = xstrdup(argv[i]+end);
 			set = 1;
-		} else if (strncasecmp (argv[i], "FairShare=", 10) == 0) {
-			association->fairshare = atoi(argv[i]+10);
+		} else if (strncasecmp (argv[i], "Cluster", 2) == 0) {
+			association->cluster = xstrdup(argv[i]+end);
 			set = 1;
-		} else if (strncasecmp (argv[i], "MaxJobs=", 8) == 0) {
-			association->max_jobs = atoi(argv[i]+8);
+		} else if (strncasecmp (argv[i], "Partition", 4) == 0) {
+			association->partition = xstrdup(argv[i]+end);
 			set = 1;
-		} else if (strncasecmp (argv[i], "MaxNodes=", 9) == 0) {
-			association->max_nodes_per_job = atoi(argv[i]+9);
+		} else if (strncasecmp (argv[i], "Parent", 4) == 0) {
+			association->parent_account = xstrdup(argv[i]+end);
 			set = 1;
-		} else if (strncasecmp (argv[i], "MaxWall=", 8) == 0) {
+		} else if (strncasecmp (argv[i], "FairShare", 4) == 0) {
+			if (get_uint(argv[i]+end, &association->fairshare, 
+			    "FairShare") == SLURM_SUCCESS)
+				set = 1;
+		} else if (strncasecmp (argv[i], "MaxJobs", 4) == 0) {
+			if (get_uint(argv[i]+end, &association->max_jobs, 
+			    "MaxJobs") == SLURM_SUCCESS)
+				set = 1;
+		} else if (strncasecmp (argv[i], "MaxNodes", 4) == 0) {
+			if (get_uint(argv[i]+end, 
+			     &association->max_nodes_per_job, 
+			    "MaxNodes") == SLURM_SUCCESS)
+				set = 1;
+		} else if (strncasecmp (argv[i], "MaxWall", 4) == 0) {
 			association->max_wall_duration_per_job =
-				(uint32_t) time_str2mins(argv[i]+8);
+				(uint32_t) time_str2mins(argv[i]+end);
 			set = 1;
-		} else if (strncasecmp (argv[i], "MaxCPUSecs=", 11) == 0) {
-			association->max_cpu_seconds_per_job = atoi(argv[i]+11);
-			set = 1;
-		} else if (strncasecmp (argv[i], "Where", 5) == 0) {
-			i--;
-			break;
+		} else if (strncasecmp (argv[i], "MaxCPUSecs", 4) == 0) {
+			if (get_uint(argv[i]+end, 
+			     &association->max_cpu_seconds_per_job, 
+			    "MaxCPUSecs") == SLURM_SUCCESS)
+				set = 1;
 		} else {
 			printf(" error: Valid options are 'DefaultAccount=' "
 			       "'ExpediteLevel=' and 'AdminLevel='\n");
@@ -272,14 +284,15 @@ extern int sacctmgr_list_association(int argc, char *argv[])
 	assoc_cond->cluster_list = list_create(destroy_char);
 
 	for (i=0; i<argc; i++) {
-		if (strncasecmp (argv[i], "Ids=", 4) == 0) {
-			addto_char_list(assoc_cond->id_list, argv[i]+3);
-		} else if (strncasecmp (argv[i], "Users=", 6) == 0) {
-			addto_char_list(assoc_cond->user_list, argv[i]+6);
-		} else if (strncasecmp (argv[i], "Accounts=", 9) == 0) {
-			addto_char_list(assoc_cond->account_list, argv[i]+9);
-		} else if (strncasecmp (argv[i], "Clusters=", 9) == 0) {
-			addto_char_list(assoc_cond->cluster_list, argv[i]+9);
+		int end = parse_option_end(argv[i]);
+		if (strncasecmp (argv[i], "Ids", 2) == 0) {
+			addto_char_list(assoc_cond->id_list, argv[i]+end);
+		} else if (strncasecmp (argv[i], "Users", 2) == 0) {
+			addto_char_list(assoc_cond->user_list, argv[i]+end);
+		} else if (strncasecmp (argv[i], "Accounts", 2) == 0) {
+			addto_char_list(assoc_cond->account_list, argv[i]+end);
+		} else if (strncasecmp (argv[i], "Clusters", ) == 0) {
+			addto_char_list(assoc_cond->cluster_list, argv[i]+end);
 		} else {
 			error("Valid options are 'Ids=' 'Users=' 'Accounts=' "
 			      "and 'Clusters='");
diff --git a/src/sacctmgr/cluster_functions.c b/src/sacctmgr/cluster_functions.c
index 2fd8f4c9e368e0e55f78808b62f72db5b07cdf14..3bb151f87526634bcfc8de47af4aa071eb220cef 100644
--- a/src/sacctmgr/cluster_functions.c
+++ b/src/sacctmgr/cluster_functions.c
@@ -85,22 +85,27 @@ static int _set_rec(int *start, int argc, char *argv[],
 			printf(" Bad format on %s: End your option with "
 			       "an '=' sign\n", argv[i]);			
 		} else if (strncasecmp (argv[i], "FairShare", 1) == 0) {
-			cluster->default_fairshare = atoi(argv[i]+end);
-			set = 1;
+			if (get_uint(argv[i]+end, &cluster->default_fairshare, 
+			    "FairShare") == SLURM_SUCCESS)
+				set = 1;
 		} else if (strncasecmp (argv[i], "MaxJobs", 4) == 0) {
-			cluster->default_max_jobs = atoi(argv[i]+end);
-			set = 1;
+			if (get_uint(argv[i]+end, &cluster->default_max_jobs,
+			    "MaxJobs") == SLURM_SUCCESS)
+				set = 1;
 		} else if (strncasecmp (argv[i], "MaxNodes", 4) == 0) {
-			cluster->default_max_nodes_per_job = atoi(argv[i]+end);
-			set = 1;
+			if (get_uint(argv[i]+end, 
+			    &cluster->default_max_nodes_per_job,
+			    "MaxNodes") == SLURM_SUCCESS)
+				set = 1;
 		} else if (strncasecmp (argv[i], "MaxWall", 4) == 0) {
 			cluster->default_max_wall_duration_per_job =
 				(uint32_t) time_str2mins(argv[i]+end);
 			set = 1;
 		} else if (strncasecmp (argv[i], "MaxCPUSecs=", 11) == 0) {
-			cluster->default_max_cpu_secs_per_job =
-				atoi(argv[i]+end);
-			set = 1;
+			if (get_uint(argv[i]+end, 
+			     &cluster->default_max_cpu_secs_per_job, 
+			    "MaxCPUSecs") == SLURM_SUCCESS)
+				set = 1;
 		} else {
 			printf(" Unknown option: %s\n"
 			       " Use keyword 'where' to modify condition\n",
@@ -120,11 +125,11 @@ extern int sacctmgr_add_cluster(int argc, char *argv[])
 	acct_cluster_rec_t *cluster = NULL;
 	List name_list = list_create(slurm_destroy_char);
 	List cluster_list = NULL;
-	uint32_t fairshare = -2; 
-	uint32_t max_cpu_secs_per_job = -2;
-	uint32_t max_jobs = -2; 
-	uint32_t max_nodes_per_job = -2;
-	uint32_t max_wall_duration_per_job = -2;
+	uint32_t fairshare = NO_VAL; 
+	uint32_t max_cpu_secs_per_job = NO_VAL;
+	uint32_t max_jobs = NO_VAL;
+	uint32_t max_nodes_per_job = NO_VAL;
+	uint32_t max_wall_duration_per_job = NO_VAL;
 	int limit_set = 0;
 	ListIterator itr = NULL, itr_c = NULL;
 	char *name = NULL;
@@ -222,16 +227,16 @@ extern int sacctmgr_add_cluster(int argc, char *argv[])
 
 	if(limit_set) {
 		printf(" User Defaults\n");
-		if((int)fairshare != -2)
+		if(fairshare != NO_VAL)
 			printf("  Fairshare       = %u\n", fairshare);
-		if((int)max_cpu_secs_per_job != -2)
+		if(max_cpu_secs_per_job != NO_VAL)
 			printf("  MaxCPUSecs      = %u\n",
 			       max_cpu_secs_per_job);
-		if((int)max_jobs != -2)
+		if(max_jobs != NO_VAL)
 			printf("  MaxJobs         = %u\n", max_jobs);
-		if((int)max_nodes_per_job != -2)
+		if(max_nodes_per_job != NO_VAL)
 			printf("  MaxNodes        = %u\n", max_nodes_per_job);
-		if((int)max_wall_duration_per_job != -2) {
+		if(max_wall_duration_per_job != NO_VAL) {
 			char time_buf[32];
 			mins2time_str((time_t) max_wall_duration_per_job, 
 				      time_buf, sizeof(time_buf));
@@ -366,18 +371,18 @@ extern int sacctmgr_modify_cluster(int argc, char *argv[])
 	printf(" Setting\n");
 	if(rec_set) 
 		printf(" User Defaults  =\n");
-	if((int)cluster->default_fairshare != -2)
+	if(cluster->default_fairshare != NO_VAL)
 		printf("  Fairshare     = %u\n", cluster->default_fairshare);
 
-	if((int)cluster->default_max_cpu_secs_per_job != -2)
+	if(cluster->default_max_cpu_secs_per_job != NO_VAL)
 		printf("  MaxCPUSecs    = %u\n",
 		       cluster->default_max_cpu_secs_per_job);
-	if((int)cluster->default_max_jobs != -2)
+	if(cluster->default_max_jobs != NO_VAL)
 		printf("  MaxJobs       = %u\n", cluster->default_max_jobs);
-	if((int)cluster->default_max_nodes_per_job != -2)
+	if(cluster->default_max_nodes_per_job != NO_VAL)
 		printf("  MaxNodes      = %u\n",
 		       cluster->default_max_nodes_per_job);
-	if((int)cluster->default_max_wall_duration_per_job != -2) {
+	if(cluster->default_max_wall_duration_per_job != NO_VAL) {
 		char time_buf[32];
 		mins2time_str((time_t) 
 			      cluster->default_max_wall_duration_per_job, 
diff --git a/src/sacctmgr/common.c b/src/sacctmgr/common.c
index 350d6e4ef86800a5b98420f4c14a59e4c1aa4520..ea94663cc63459f98ae3d835255b37f110aedcdc 100644
--- a/src/sacctmgr/common.c
+++ b/src/sacctmgr/common.c
@@ -544,3 +544,21 @@ extern acct_cluster_rec_t *sacctmgr_find_cluster_from_list(
 	
 	return cluster;
 }
+
+extern int get_uint(char *in_value, uint32_t *out_value, char *type)
+{
+	char *ptr = NULL;
+	long num;
+
+	num = strtol(in_value, &ptr, 10);
+	if ((num == 0) && ptr && ptr[0]) {
+		error("Invalid value for %s", type);
+		return SLURM_ERROR;
+	}
+
+	if (num < 0)
+		*out_value = INFINITE;		/* flag to clear */
+	else
+		*out_value = (uint32_t) num;
+	return SLURM_SUCCESS;
+}
diff --git a/src/sacctmgr/print.c b/src/sacctmgr/print.c
index 2f7eef2dc5984b45098eb1700cbb7fb30b292c3d..81c13cf3e5b3905f6ed11f8d8dfd004f2275d122 100644
--- a/src/sacctmgr/print.c
+++ b/src/sacctmgr/print.c
@@ -102,7 +102,7 @@ extern void print_str(type_t type, print_field_t *field, char *value)
 	}
 }
 
-extern void print_int(type_t type, print_field_t *field, uint32_t value)
+extern void print_uint(type_t type, print_field_t *field, uint32_t value)
 {
 	switch(type) {
 	case HEADLINE:
@@ -113,7 +113,8 @@ extern void print_int(type_t type, print_field_t *field, uint32_t value)
 		       "---------------------------------------");
 		break;
 	case VALUE:
-		if((int)value < 0)
+		/* (value == unset)  || (value == cleared) */
+		if((value == NO_VAL) || (value == INFINITE))
 			printf("%-*s ", field->len, " ");
 		else
 			printf("%*u ", field->len, value);
@@ -135,7 +136,8 @@ extern void print_time(type_t type, print_field_t *field, uint32_t value)
 		       "---------------------------------------");
 		break;
 	case VALUE:
-		if((int)value < 0)
+		/* (value == unset)  || (value == cleared) */
+		if((value == NO_VAL) || (value == INFINITE))
 			printf("%-*s ", field->len, " ");
 		else {
 			char time_buf[32];
diff --git a/src/sacctmgr/print.h b/src/sacctmgr/print.h
index d0441e80ebeb4e60e9157938dbbb60dfffcbeaa2..7e2d770c931521a998e092b8a9686e43e90fc792 100644
--- a/src/sacctmgr/print.h
+++ b/src/sacctmgr/print.h
@@ -82,7 +82,7 @@ extern void destroy_print_field(void *object);
 extern void print_header(List print_fields_list);
 extern void print_date(void);
 extern void print_str(type_t type, print_field_t *field, char *value);
-extern void print_int(type_t type, print_field_t *field, uint32_t value);
+extern void print_uint(type_t type, print_field_t *field, uint32_t value);
 extern void print_time(type_t type, print_field_t *field, uint32_t value);
 
 #endif
diff --git a/src/sacctmgr/sacctmgr.c b/src/sacctmgr/sacctmgr.c
index db37ae8e55d92143087d8cf6084780bb7313ff73..fad8b73fea59e1bf86060df2838e2cdd2f330cf8 100644
--- a/src/sacctmgr/sacctmgr.c
+++ b/src/sacctmgr/sacctmgr.c
@@ -680,11 +680,11 @@ static sacctmgr_file_opts_t *_parse_options(char *options)
 	int start=0, i=0, end=0;
 	char *sub = NULL;
 	sacctmgr_file_opts_t *file_opts = xmalloc(sizeof(sacctmgr_file_opts_t));
-	file_opts->fairshare = -2; 
-	file_opts->max_cpu_secs_per_job = -2;
-	file_opts->max_jobs = -2; 
-	file_opts->max_nodes_per_job = -2;
-	file_opts->max_wall_duration_per_job = -2;
+	file_opts->fairshare = NO_VAL;
+	file_opts->max_cpu_secs_per_job = NO_VAL;
+	file_opts->max_jobs = NO_VAL;
+	file_opts->max_nodes_per_job = NO_VAL;
+	file_opts->max_wall_duration_per_job = NO_VAL;
 
 	while(options[i]) {
 		start=i;
@@ -710,13 +710,17 @@ static sacctmgr_file_opts_t *_parse_options(char *options)
 		} else if (strncasecmp (sub, "Description", 3) == 0) {
 			file_opts->desc = xstrdup(sub+end);
 		} else if (strncasecmp (sub, "Fairshare", 1) == 0) {
-			file_opts->fairshare = atoi(sub+end);
+			get_uint(sub+end, &file_opts->fairshare, 
+			    "FairShare");
 		} else if (strncasecmp (sub, "MaxCPUSec", 4) == 0) {
-			file_opts->max_cpu_secs_per_job = atoi(sub+end);
+			get_uint(sub+end, &file_opts->max_cpu_secs_per_job,
+			    "MaxCPUSec");
 		} else if (strncasecmp (sub, "MaxJobs", 4) == 0) {
-			file_opts->max_jobs = atoi(sub+end);
+			get_uint(sub+end, &file_opts->max_jobs,
+			    "MaxJobs");
 		} else if (strncasecmp (sub, "MaxNodes", 4) == 0) {
-			file_opts->max_nodes_per_job = atoi(sub+end);
+			get_uint(sub+end, &file_opts->max_nodes_per_job,
+			    "MaxNodes");
 		} else if (strncasecmp (sub, "MaxWall", 4) == 0) {
 			file_opts->max_wall_duration_per_job = 
 				(uint32_t) time_str2mins(sub+end);
@@ -1136,19 +1140,19 @@ static void _load_file (int argc, char *argv[])
 	
 	fs_field.name = "FairShare";
 	fs_field.len = 10;
-	fs_field.print_routine = print_int;
+	fs_field.print_routine = print_uint;
 
 	mc_field.name = "MaxCPUSecs";
 	mc_field.len = 10;
-	mc_field.print_routine = print_int;
+	mc_field.print_routine = print_uint;
 
 	mj_field.name = "MaxJobs";
 	mj_field.len = 7;
-	mj_field.print_routine = print_int;
+	mj_field.print_routine = print_uint;
 
 	mn_field.name = "MaxNodes";
 	mn_field.len = 8;
-	mn_field.print_routine = print_int;
+	mn_field.print_routine = print_uint;
 
 	mw_field.name = "MaxWall";
 	mw_field.len = 7;
@@ -1199,11 +1203,11 @@ static void _load_file (int argc, char *argv[])
 		while((assoc = list_next(itr))) {
 			print_str(VALUE, &name_field, assoc->acct);
 			print_str(VALUE, &parent_field, assoc->parent_acct);
-			print_int(VALUE, &fs_field, assoc->fairshare);
-			print_int(VALUE, &mc_field, 
-				  assoc->max_cpu_secs_per_job);
-			print_int(VALUE, &mj_field, assoc->max_jobs);
-			print_int(VALUE, &mn_field, assoc->max_nodes_per_job);
+			print_uint(VALUE, &fs_field, assoc->fairshare);
+			print_uint(VALUE, &mc_field, 
+				   assoc->max_cpu_secs_per_job);
+			print_uint(VALUE, &mj_field, assoc->max_jobs);
+			print_uint(VALUE, &mn_field, assoc->max_nodes_per_job);
 			print_time(VALUE, &mw_field,
 				   assoc->max_wall_duration_per_job);
 			printf("\n");
@@ -1262,13 +1266,13 @@ static void _load_file (int argc, char *argv[])
 		while((assoc = list_next(itr))) {
 			print_str(VALUE, &name_field, assoc->user);
 			print_str(VALUE, &acct_field, assoc->acct);
-			print_int(VALUE, &fs_field, assoc->fairshare);
-			print_int(VALUE, &mc_field, 
-				  assoc->max_cpu_secs_per_job);
-			print_int(VALUE, &mj_field, assoc->max_jobs);
-			print_int(VALUE, &mn_field, assoc->max_nodes_per_job);
-			print_int(VALUE, &mw_field,
-				  assoc->max_wall_duration_per_job);
+			print_uint(VALUE, &fs_field, assoc->fairshare);
+			print_uint(VALUE, &mc_field, 
+				   assoc->max_cpu_secs_per_job);
+			print_uint(VALUE, &mj_field, assoc->max_jobs);
+			print_uint(VALUE, &mn_field, assoc->max_nodes_per_job);
+			print_uint(VALUE, &mw_field,
+				   assoc->max_wall_duration_per_job);
 			printf("\n");
 		}
 		list_iterator_destroy(itr);
diff --git a/src/sacctmgr/sacctmgr.h b/src/sacctmgr/sacctmgr.h
index 37de498314548dc98f1b0e1fcbb0c49628be0aa6..bb7eedf85a281a1d0d7903a02a2f83589a142e13 100644
--- a/src/sacctmgr/sacctmgr.h
+++ b/src/sacctmgr/sacctmgr.h
@@ -150,6 +150,7 @@ extern void destroy_sacctmgr_action(void *object);
 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);
 
 /* you need to free the objects returned from these functions */
 extern acct_association_rec_t *sacctmgr_find_association(char *user,
diff --git a/src/sacctmgr/user_functions.c b/src/sacctmgr/user_functions.c
index b0e919d1944a92b2c022e37418dd09442d5723cf..5e0828528b4cb079892977320f5a4f0054d235f5 100644
--- a/src/sacctmgr/user_functions.c
+++ b/src/sacctmgr/user_functions.c
@@ -126,23 +126,29 @@ static int _set_rec(int *start, int argc, char *argv[],
 		} else if (strncasecmp (argv[i], "DefaultAccount", 1) == 0) {
 			user->default_acct = xstrdup(argv[i]+end);
 			u_set = 1;
-		} else if (strncasecmp (argv[i], "Fairshare", 1) == 0) {
-			association->fairshare = atoi(argv[i]+end);
-			a_set = 1;
+		} else if (strncasecmp (argv[i], "FairShare", 1) == 0) {
+			if (get_uint(argv[i]+end, &association->fairshare, 
+			    "FairShare") == SLURM_SUCCESS)
+				a_set = 1;
 		} else if (strncasecmp (argv[i], "MaxCPUSec", 4) == 0) {
-			association->max_cpu_secs_per_job =
-				atoi(argv[i]+end);
-			a_set = 1;
+			if (get_uint(argv[i]+end, 
+			     &association->max_cpu_secs_per_job, 
+			    "MaxCPUSec") == SLURM_SUCCESS)
+				a_set = 1;
 		} else if (strncasecmp (argv[i], "MaxJobs", 4) == 0) {
-			association->max_jobs = atoi(argv[i]+end);
-			a_set = 1;
+			if (get_uint(argv[i]+end, &association->max_jobs, 
+			    "MaxJobs") == SLURM_SUCCESS)
+				a_set = 1;
 		} else if (strncasecmp (argv[i], "MaxNodes", 4) == 0) {
-			association->max_nodes_per_job = atoi(argv[i]+end);
-			a_set = 1;
+			if (get_uint(argv[i]+end,
+			    &association->max_nodes_per_job, 
+			    "MaxNodes") == SLURM_SUCCESS)
+				a_set = 1;
 		} else if (strncasecmp (argv[i], "MaxWall", 4) == 0) {
-			association->max_wall_duration_per_job =
-				(uint32_t) time_str2mins(argv[i]+end);
-			a_set = 1;
+			if (get_uint(argv[i]+end, 
+			    &association->max_wall_duration_per_job, 
+			    "MaxWall") == SLURM_SUCCESS)
+				a_set = 1;
 		} else if (strncasecmp (argv[i], "QosLevel", 1) == 0) {
 			user->qos = str_2_acct_qos(argv[i]+end);
 			u_set = 1;
@@ -243,11 +249,11 @@ extern int sacctmgr_add_user(int argc, char *argv[])
 	List local_assoc_list = NULL;
 	List local_acct_list = NULL;
 	List local_user_list = NULL;
-	uint32_t fairshare = -2; 
-	uint32_t max_jobs = -2; 
-	uint32_t max_nodes_per_job = -2;
-	uint32_t max_wall_duration_per_job = -2;
-	uint32_t max_cpu_secs_per_job = -2;
+	uint32_t fairshare = NO_VAL; 
+	uint32_t max_jobs = NO_VAL; 
+	uint32_t max_nodes_per_job = NO_VAL;
+	uint32_t max_wall_duration_per_job = NO_VAL;
+	uint32_t max_cpu_secs_per_job = NO_VAL;
 	char *user_str = NULL;
 	char *assoc_str = NULL;
 	int limit_set = 0;
@@ -283,21 +289,25 @@ extern int sacctmgr_add_user(int argc, char *argv[])
 			addto_char_list(assoc_cond->acct_list,
 					argv[i]+end);
 		} else if (strncasecmp (argv[i], "FairShare", 1) == 0) {
-			fairshare = atoi(argv[i]+end);
-			limit_set = 1;
+			if (get_uint(argv[i]+end, &fairshare, 
+			    "FairShare") == SLURM_SUCCESS)
+				limit_set = 1;
 		} else if (strncasecmp (argv[i], "MaxCPUSecs", 4) == 0) {
-			max_cpu_secs_per_job = atoi(argv[i]+end);
-			limit_set = 1;
+			if (get_uint(argv[i]+end, &max_cpu_secs_per_job, 
+			    "MaxCPUSecs") == SLURM_SUCCESS)
+				limit_set = 1;
 		} else if (strncasecmp (argv[i], "MaxJobs", 4) == 0) {
-			max_jobs = atoi(argv[i]+end);
-			limit_set = 1;
+			if (get_uint(argv[i]+end, &max_jobs, 
+			    "MaxJobs") == SLURM_SUCCESS)
+				limit_set = 1;
 		} else if (strncasecmp (argv[i], "MaxNodes", 4) == 0) {
-			max_nodes_per_job = atoi(argv[i]+end);
-			limit_set = 1;
+			if (get_uint(argv[i]+end, &max_nodes_per_job, 
+			    "MaxNodes") == SLURM_SUCCESS)
+				limit_set = 1;
 		} else if (strncasecmp (argv[i], "MaxWall", 4) == 0) {
-			max_wall_duration_per_job = 
-				(uint32_t) time_str2mins(argv[i]+end);
-			limit_set = 1;
+			if (get_uint(argv[i]+end, &max_wall_duration_per_job, 
+			    "MaxWall") == SLURM_SUCCESS)
+				limit_set = 1;
 		} else if (strncasecmp (argv[i], "Names", 1) == 0) {
 			addto_char_list(assoc_cond->user_list, argv[i]+end);
 		} else if (strncasecmp (argv[i], "Partitions", 1) == 0) {
@@ -575,16 +585,16 @@ no_default:
 
 	if(limit_set) {
 		        printf(" Non Default Settings\n");
-		if((int)fairshare != -2)
+		if(fairshare != NO_VAL)
 			printf("  Fairshare       = %u\n", fairshare);
-		if((int)max_cpu_secs_per_job != -2)
+		if(max_cpu_secs_per_job != NO_VAL)
 			printf("  MaxCPUSecs      = %u\n",
 			       max_cpu_secs_per_job);
-		if((int)max_jobs != -2)
+		if(max_jobs != NO_VAL)
 			printf("  MaxJobs         = %u\n", max_jobs);
-		if((int)max_nodes_per_job != -2)
+		if(max_nodes_per_job != NO_VAL)
 			printf("  MaxNodes        = %u\n", max_nodes_per_job);
-		if((int)max_wall_duration_per_job != -2) {
+		if(max_wall_duration_per_job != NO_VAL) {
 			char time_buf[32];
 			mins2time_str((time_t) max_wall_duration_per_job, 
 				      time_buf, sizeof(time_buf));
@@ -711,12 +721,12 @@ extern int sacctmgr_list_user(int argc, char *argv[])
 
 		maxjobs_field.name = "MaxJobs";
 		maxjobs_field.len = 7;
-		maxjobs_field.print_routine = print_int;
+		maxjobs_field.print_routine = print_uint;
 		list_append(print_fields_list, &maxjobs_field);
 
 		maxnodes_field.name = "MaxNodes";
 		maxnodes_field.len = 8;
-		maxnodes_field.print_routine = print_int;
+		maxnodes_field.print_routine = print_uint;
 		list_append(print_fields_list, &maxnodes_field);
 
 		maxwall_field.name = "MaxWall";
@@ -754,10 +764,10 @@ extern int sacctmgr_list_user(int argc, char *argv[])
 					  assoc->cluster);
 				print_str(VALUE, &acct_field, assoc->acct);
 				print_str(VALUE, &part_field, assoc->partition);
-				print_int(VALUE, &maxjobs_field, 
-					  assoc->max_jobs);
-				print_int(VALUE, &maxnodes_field, 
-					  assoc->max_nodes_per_job);
+				print_uint(VALUE, &maxjobs_field, 
+					   assoc->max_jobs);
+				print_uint(VALUE, &maxnodes_field, 
+					   assoc->max_nodes_per_job);
 				print_time(VALUE, &maxwall_field, 
 					   assoc->max_wall_duration_per_job);
 				first = 0;
@@ -793,17 +803,17 @@ extern int sacctmgr_modify_user(int argc, char *argv[])
 	user_cond->assoc_cond->acct_list = list_create(slurm_destroy_char);
 	user_cond->assoc_cond->cluster_list = list_create(slurm_destroy_char);
 	user_cond->assoc_cond->partition_list = list_create(slurm_destroy_char);
-	user_cond->assoc_cond->fairshare = -2; 
-	user_cond->assoc_cond->max_cpu_secs_per_job = -2;
-	user_cond->assoc_cond->max_jobs = -2; 
-	user_cond->assoc_cond->max_nodes_per_job = -2;
-	user_cond->assoc_cond->max_wall_duration_per_job = -2;
+	user_cond->assoc_cond->fairshare = NO_VAL;
+	user_cond->assoc_cond->max_cpu_secs_per_job = NO_VAL;
+	user_cond->assoc_cond->max_jobs = NO_VAL;
+	user_cond->assoc_cond->max_nodes_per_job = NO_VAL;
+	user_cond->assoc_cond->max_wall_duration_per_job = NO_VAL;
 	
-	assoc->fairshare = -2; 
-	assoc->max_cpu_secs_per_job = -2;
-	assoc->max_jobs = -2; 
-	assoc->max_nodes_per_job = -2;
-	assoc->max_wall_duration_per_job = -2;
+	assoc->fairshare = NO_VAL;
+	assoc->max_cpu_secs_per_job = NO_VAL;
+	assoc->max_jobs = NO_VAL;
+	assoc->max_nodes_per_job = NO_VAL;
+	assoc->max_wall_duration_per_job = NO_VAL;
 
 	for (i=0; i<argc; i++) {
 		if (strncasecmp (argv[i], "Where", 5) == 0) {