diff --git a/src/api/job_info.c b/src/api/job_info.c
index dca7b0b79a8f5563a0724abe719cc6447f1d5fa9..8acd9ed16bc8cd86c8cb3ca994efcf9957ce64d7 100644
--- a/src/api/job_info.c
+++ b/src/api/job_info.c
@@ -75,28 +75,34 @@ static void _fname_format(char *buf, int buf_size, job_info_t * job_ptr,
 	char *ptr, *tmp, *tmp2 = NULL, *user;
 
 	tmp = xstrdup(fname);
-	while ((ptr = strstr(tmp, "%A"))) {
+	while ((ptr = strstr(tmp, "%A"))) {	/* Array job ID */
 		ptr[0] = '\0';
-		xstrfmtcat(tmp2, "%s%u%s", tmp, job_ptr->array_job_id, ptr+2);
+		if (job_ptr->array_task_id == (uint16_t) NO_VAL) {
+			/* Not a job array */
+			xstrfmtcat(tmp2, "%s%u%s", tmp, job_ptr->job_id, ptr+2);
+		} else {
+			xstrfmtcat(tmp2, "%s%u%s", tmp, job_ptr->array_job_id,
+				   ptr+2);
+		}
 		xfree(tmp);	/* transfer the results */
 		tmp = tmp2;
 		tmp2 = NULL;
 	}
-	while ((ptr = strstr(tmp, "%a"))) {
+	while ((ptr = strstr(tmp, "%a"))) {	/* Array task ID */
 		ptr[0] = '\0';
 		xstrfmtcat(tmp2, "%s%u%s", tmp, job_ptr->array_task_id, ptr+2);
 		xfree(tmp);	/* transfer the results */
 		tmp = tmp2;
 		tmp2 = NULL;
 	}
-	while ((ptr = strstr(tmp, "%j"))) {
+	while ((ptr = strstr(tmp, "%j"))) {	/* Job ID */
 		ptr[0] = '\0';
 		xstrfmtcat(tmp2, "%s%u%s", tmp, job_ptr->job_id, ptr+2);
 		xfree(tmp);	/* transfer the results */
 		tmp = tmp2;
 		tmp2 = NULL;
 	}
-	while ((ptr = strstr(tmp, "%u"))) {
+	while ((ptr = strstr(tmp, "%u"))) {	/* User name */
 		ptr[0] = '\0';
 		user = uid_to_string((uid_t) job_ptr->user_id);
 		xstrfmtcat(tmp2, "%s%s%s", tmp, user, ptr+2);
diff --git a/src/slurmd/slurmstepd/fname.c b/src/slurmd/slurmstepd/fname.c
index c606c2b4c681ad7b1786341a8b38c674b05fafc3..f2801acbb796207d51a158e9dd3599dc8b469a20 100644
--- a/src/slurmd/slurmstepd/fname.c
+++ b/src/slurmd/slurmstepd/fname.c
@@ -107,8 +107,13 @@ fname_create(stepd_step_rec_t *job, const char *format, int taskid)
 				break;
 			case 'A':  /* '%A' => array master job id */
 				xmemcat(name, q, p - 1);
-				xstrfmtcat(name, "%0*d", wid,
-					   job->array_job_id);
+				if (job->array_task_id == (uint16_t) NO_VAL) {
+					xstrfmtcat(name, "%0*d", wid,
+						   job->jobid);
+				} else {
+					xstrfmtcat(name, "%0*d", wid,
+						   job->array_job_id);
+				}
 				q = ++p;
 				break;
 			case 's':  /* '%s' => step id        */