diff --git a/src/common/slurm_protocol_defs.c b/src/common/slurm_protocol_defs.c
index 870c1fa916b801872ae2b67423ae4c207761e351..8b3e3ffa1bd21759afb60c093bfb5928b619b159 100644
--- a/src/common/slurm_protocol_defs.c
+++ b/src/common/slurm_protocol_defs.c
@@ -937,6 +937,34 @@ char *job_state_string_compact(uint16_t inx)
 	}
 }
 
+static inline bool _job_name_test(int state_num, const char *state_name)
+{
+	if (!strcasecmp(state_name, job_state_string(state_num)) ||
+	    !strcasecmp(state_name, job_state_string_compact(state_num))) {
+		return true;
+	}
+	return false;
+}
+
+int job_state_num(const char *state_name)
+{
+	int i;
+
+	for (i=0; i<JOB_END; i++) {
+		if (_job_name_test(i, state_name))
+			return i;
+	}
+
+	if (_job_name_test(JOB_COMPLETING, state_name))
+		return JOB_COMPLETING;
+	if (_job_name_test(JOB_COMPLETING, state_name))
+		return JOB_COMPLETING;
+//	if (_job_name_test(JOB_RESIZING, state_name))
+//		return JOB_RESIZING;
+
+	return -1;
+}
+
 extern char *reservation_flags_string(uint16_t flags)
 {
 	char *flag_str = xstrdup("");
diff --git a/src/common/slurm_protocol_defs.h b/src/common/slurm_protocol_defs.h
index af9614dc3d98501f6d09203aa646bae2fa4e30bb..9dc25a05ff5173554325f39bf22b75c031706d8b 100644
--- a/src/common/slurm_protocol_defs.h
+++ b/src/common/slurm_protocol_defs.h
@@ -1050,6 +1050,7 @@ extern uint32_t slurm_get_return_code(slurm_msg_type_t type, void *data);
 extern char *job_reason_string(enum job_state_reason inx);
 extern char *job_state_string(uint16_t inx);
 extern char *job_state_string_compact(uint16_t inx);
+extern int   job_state_num(const char *state_name);
 extern char *node_state_string(uint16_t inx);
 extern char *node_state_string_compact(uint16_t inx);
 extern void  private_data_string(uint16_t private_data, char *str, int str_len);
diff --git a/src/sacct/options.c b/src/sacct/options.c
index faf7da43c2a9aeae5a63cc7d95341e290b30756d..922771b22237eabc23f95017a2be1c65b72612c4 100644
--- a/src/sacct/options.c
+++ b/src/sacct/options.c
@@ -214,7 +214,7 @@ static int _addto_state_char_list(List char_list, char *names)
 				if((i-start) > 0) {
 					name = xmalloc((i-start+1));
 					memcpy(name, names+start, (i-start));
-					c = decode_state_char(name);
+					c = job_state_num(name);
 					if (c == -1)
 						fatal("unrecognized job "
 						      "state value");
@@ -247,7 +247,7 @@ static int _addto_state_char_list(List char_list, char *names)
 		if((i-start) > 0) {
 			name = xmalloc((i-start)+1);
 			memcpy(name, names+start, (i-start));
-			c = decode_state_char(name);
+			c = job_state_num(name);
 			if (c == -1)
 				fatal("unrecognized job state value");
 			xfree(name);
@@ -510,28 +510,6 @@ void _init_params()
 	params.job_cond->without_usage_truncation = 1;
 }
 
-int decode_state_char(char *state)
-{
-	if (!strncasecmp(state, "p", 1))
-		return JOB_PENDING; 	/* we should never see this */
-	else if (!strncasecmp(state, "r", 1))
-		return JOB_RUNNING;
-	else if (!strncasecmp(state, "su", 1))
-		return JOB_SUSPENDED;
-	else if (!strncasecmp(state, "cd", 2))
-		return JOB_COMPLETE;
-	else if (!strncasecmp(state, "ca", 2))
-		return JOB_CANCELLED;
-	else if (!strncasecmp(state, "f", 1))
-		return JOB_FAILED;
-	else if (!strncasecmp(state, "to", 1))
-		return JOB_TIMEOUT;
-	else if (!strncasecmp(state, "nf", 1))
-		return JOB_NODE_FAIL;
-	else
-		return -1; // unknown
-}
-
 int get_data(void)
 {
 	slurmdb_job_rec_t *job = NULL;
diff --git a/src/sacct/sacct.h b/src/sacct/sacct.h
index 894fc5f41ae3728b8da1e16a926806d81f579532..edf77254c959ff2d8087189bcc7487aaef459663 100644
--- a/src/sacct/sacct.h
+++ b/src/sacct/sacct.h
@@ -182,8 +182,6 @@ void aggregate_stats(slurmdb_stats_t *dest, slurmdb_stats_t *from);
 void print_fields(type_t type, void *object);
 
 /* options.c */
-int decode_state_char(char *state);
-char *decode_state_int(int state);
 int get_data(void);
 void parse_command_line(int argc, char **argv);
 void do_dump(void);
diff --git a/src/scancel/opt.c b/src/scancel/opt.c
index fb55ca5f33aa0ba567afa366d74cf302f7faf1f6..45a37a2929c221e1b5be52edeb975a5bfcd70d91 100644
--- a/src/scancel/opt.c
+++ b/src/scancel/opt.c
@@ -153,35 +153,20 @@ int initialize_and_process_args(int argc, char *argv[])
 static uint16_t
 _xlate_state_name(const char *state_name, bool env_var)
 {
-	enum job_states i;
+	int i = job_state_num(state_name);
 
-	for (i=0; i<JOB_END; i++) {
-		if ((strcasecmp(state_name,job_state_string(i)) == 0) ||
-		    (strcasecmp(state_name,job_state_string_compact(i)) == 0)){
-			return i;
-		}
-	}
-	if ((strcasecmp(state_name,
-			job_state_string(JOB_COMPLETING)) == 0) ||
-	    (strcasecmp(state_name,
-			job_state_string_compact(JOB_COMPLETING)) == 0)) {
-		return JOB_COMPLETING;
-	}
-	if ((strcasecmp(state_name,
-			job_state_string(JOB_CONFIGURING)) == 0) ||
-	    (strcasecmp(state_name,
-			job_state_string_compact(JOB_CONFIGURING)) == 0)) {
-		return JOB_CONFIGURING;
-	}
+	if (i >= 0)
+		return (uint16_t) i;
 
-	if (env_var)
+	if (env_var) {
 		fprintf(stderr, "Unrecognized SCANCEL_STATE value: %s\n",
 			state_name);
-	else
+	} else {
 		fprintf(stderr, "Invalid job state specified: %s\n",
 			state_name);
-
-	fprintf (stderr, "Valid job states are PENDING, RUNNING, and SUSPENDED\n");
+	}
+	fprintf(stderr,
+		"Valid job states are PENDING, RUNNING, and SUSPENDED\n");
 	exit (1);
 }
 
diff --git a/src/squeue/opts.c b/src/squeue/opts.c
index f611aa798ef6d846f1f6a6b7f44acdfca88c9ed8..f0c757a7ccaf008a6e46d163a4edc36415cc6dd9 100644
--- a/src/squeue/opts.c
+++ b/src/squeue/opts.c
@@ -379,24 +379,8 @@ _parse_state( char* str, enum job_states* states )
 	int i;
 	char *state_names;
 
-	for (i = 0; i<JOB_END; i++) {
-		if (strcasecmp (job_state_string(i), str) == 0) {
-			*states = i;
-			return SLURM_SUCCESS;
-		}
-		if (strcasecmp (job_state_string_compact(i), str) == 0) {
-			*states = i;
-			return SLURM_SUCCESS;
-		}
-	}
-	if ((strcasecmp(job_state_string(JOB_COMPLETING), str) == 0) ||
-	    (strcasecmp(job_state_string_compact(JOB_COMPLETING),str) == 0)) {
-		*states = JOB_COMPLETING;
-		return SLURM_SUCCESS;
-	}
-	if ((strcasecmp(job_state_string(JOB_CONFIGURING), str) == 0) ||
-	    (strcasecmp(job_state_string_compact(JOB_CONFIGURING),str) == 0)) {
-		*states = JOB_CONFIGURING;
+	if ((i = job_state_num(str)) >= 0) {
+		*states = i;
 		return SLURM_SUCCESS;
 	}