diff --git a/doc/man/man1/srun.1 b/doc/man/man1/srun.1
index 92e80c0639ca6aefde4b86ceeff198afe2d503bf..6388c93c57df7a51357925f587159adb82be176e 100644
--- a/doc/man/man1/srun.1
+++ b/doc/man/man1/srun.1
@@ -1167,6 +1167,9 @@ Same as \fB\-v, \-\-verbose\fR
 \fBSLURMD_DEBUG\fR
 Same as \fB\-d, \-\-slurmd\-debug\fR
 .TP
+\fBSLURM_DEPENDENCY\fR
+\fB\-P, \-\-dependency\fR=\fIjobid\fR
+.TP
 \fBSLURM_DISABLE_STATUS\fR
 Same as \fB\-X, \-\-disable\-status\fR
 .TP
@@ -1182,6 +1185,9 @@ Same as \fB\-\-epilog\fR=\fIexecutable\fR
 \fBSLURM_GEOMETRY\fR
 Same as \fB\-g, \-\-geometry\fR=\fIX,Y,Z\fR
 .TP
+\fBSLURM_JOB_NAME\fR
+\fB\-J, \-\-job\-name\fR=\fIjobname\fR
+.TP
 \fBSLURM_LABELIO\fR
 Same as \fB\-l, \-\-label\fR
 .TP
@@ -1250,7 +1256,9 @@ Same as \fB-u, --unbuffered\fR
 .TP
 \fBSLURM_WAIT\fR
 Same as \fB\-W, \-\-wait\fR=\fIseconds\fR
-
+.TP
+\fBSLURM_WORKING_DIR\fR
+\fB\-D, \-\-chdir\fR=\fIpath\fR
 .PP
 Additionally, srun will set some environment variables in the environment 
 of the executing tasks on the remote compute nodes. 
diff --git a/src/srun/opt.c b/src/srun/opt.c
index 99e04be4b6a9eadc10e51c1bd1b86b1e85bb4577..e3d6945e175733683a57b0c46c8e62698fe1d6db 100644
--- a/src/srun/opt.c
+++ b/src/srun/opt.c
@@ -917,6 +917,7 @@ static void _opt_default()
 	if ((getcwd(buf, MAXPATHLEN)) == NULL) 
 		fatal("getcwd failed: %m");
 	opt.cwd = xstrdup(buf);
+	opt.cwd_set = false;
 
 	opt.progname = NULL;
 
@@ -948,6 +949,7 @@ static void _opt_default()
 	opt.relative = NO_VAL;
 	opt.relative_set = false;
 	opt.job_name = NULL;
+	opt.job_name_set = false;
 	opt.jobid    = NO_VAL;
 	opt.jobid_set = false;
 	opt.dependency = NO_VAL;
@@ -1064,49 +1066,52 @@ struct env_vars {
 };
 
 env_vars_t env_vars[] = {
-	{"SLURM_ACCOUNT",       OPT_STRING,     &opt.account,       NULL           },
-	{"SLURMD_DEBUG",        OPT_INT,        &opt.slurmd_debug,  NULL           },
-	{"SLURM_BLRTS_IMAGE",   OPT_STRING,     &opt.blrtsimage,    NULL           },
-	{"SLURM_CPUS_PER_TASK", OPT_INT,        &opt.cpus_per_task, &opt.cpus_set  },
-	{"SLURM_CONN_TYPE",     OPT_CONN_TYPE,  NULL,               NULL           },
-	{"SLURM_CORE_FORMAT",   OPT_CORE,       NULL,               NULL           },
-	{"SLURM_CPU_BIND",      OPT_CPU_BIND,   NULL,               NULL           },
-	{"SLURM_MEM_BIND",      OPT_MEM_BIND,   NULL,               NULL           },
-	{"SLURM_DISTRIBUTION",  OPT_DISTRIB,    NULL,               NULL           },
-	{"SLURM_GEOMETRY",      OPT_GEOMETRY,   NULL,               NULL           },
-	{"SLURM_IMMEDIATE",     OPT_INT,        &opt.immediate,     NULL           },
-	{"SLURM_JOBID",         OPT_INT,        &opt.jobid,         NULL           },
-	{"SLURM_KILL_BAD_EXIT", OPT_INT,        &opt.kill_bad_exit, NULL           },
-	{"SLURM_LABELIO",       OPT_INT,        &opt.labelio,       NULL           },
-	{"SLURM_LINUX_IMAGE",   OPT_STRING,     &opt.linuximage,    NULL           },
-	{"SLURM_MLOADER_IMAGE", OPT_STRING,     &opt.mloaderimage,  NULL           },
-	{"SLURM_NNODES",        OPT_NODES,      NULL,               NULL           },
-	{"SLURM_NSOCKETS_PER_NODE",OPT_NSOCKETS,NULL,               NULL           },
-	{"SLURM_NCORES_PER_SOCKET",OPT_NCORES,  NULL,               NULL           },
-	{"SLURM_NTHREADS_PER_CORE",OPT_NTHREADS,NULL,               NULL           },
-	{"SLURM_NO_REQUEUE",    OPT_INT,        &opt.no_requeue,    NULL           },
-	{"SLURM_NO_ROTATE",     OPT_NO_ROTATE,  NULL,               NULL           },
-	{"SLURM_NPROCS",        OPT_INT,        &opt.nprocs,        &opt.nprocs_set},
-	{"SLURM_OVERCOMMIT",    OPT_OVERCOMMIT, NULL,               NULL           },
-	{"SLURM_PARTITION",     OPT_STRING,     &opt.partition,     NULL           },
-	{"SLURM_RAMDISK_IMAGE", OPT_STRING,     &opt.ramdiskimage,  NULL           },
-	{"SLURM_REMOTE_CWD",    OPT_STRING,     &opt.cwd,           NULL           },
-	{"SLURM_STDERRMODE",    OPT_STRING,     &opt.efname,        NULL           },
-	{"SLURM_STDINMODE",     OPT_STRING,     &opt.ifname,        NULL           },
-	{"SLURM_STDOUTMODE",    OPT_STRING,     &opt.ofname,        NULL           },
-	{"SLURM_TIMELIMIT",     OPT_INT,        &opt.time_limit,    NULL           },
-	{"SLURM_WAIT",          OPT_INT,        &opt.max_wait,      NULL           },
-	{"SLURM_DISABLE_STATUS",OPT_INT,        &opt.disable_status,NULL           },
-	{"SLURM_MPI_TYPE",      OPT_MPI,        NULL,               NULL           },
-	{"SLURM_SRUN_COMM_IFHN",OPT_STRING,     &opt.ctrl_comm_ifhn,NULL           },
-	{"SLURM_SRUN_MULTI",    OPT_MULTI,      NULL,               NULL           },
-	{"SLURM_UNBUFFEREDIO",  OPT_INT,        &opt.unbuffered,    NULL           },
-	{"SLURM_NODELIST",      OPT_STRING,     &opt.alloc_nodelist,NULL           },
-	{"SLURM_PROLOG",        OPT_STRING,     &opt.prolog,        NULL           },
-	{"SLURM_EPILOG",        OPT_STRING,     &opt.epilog,        NULL           },
-	{"SLURM_TASK_PROLOG",   OPT_STRING,     &opt.task_prolog,   NULL           },
-	{"SLURM_TASK_EPILOG",   OPT_STRING,     &opt.task_epilog,   NULL           },
-	{NULL, 0, NULL, NULL}
+{"SLURM_ACCOUNT",       OPT_STRING,     &opt.account,       NULL             },
+{"SLURMD_DEBUG",        OPT_INT,        &opt.slurmd_debug,  NULL             },
+{"SLURM_BLRTS_IMAGE",   OPT_STRING,     &opt.blrtsimage,    NULL             },
+{"SLURM_CPUS_PER_TASK", OPT_INT,        &opt.cpus_per_task, &opt.cpus_set    },
+{"SLURM_CONN_TYPE",     OPT_CONN_TYPE,  NULL,               NULL             },
+{"SLURM_CORE_FORMAT",   OPT_CORE,       NULL,               NULL             },
+{"SLURM_CPU_BIND",      OPT_CPU_BIND,   NULL,               NULL             },
+{"SLURM_MEM_BIND",      OPT_MEM_BIND,   NULL,               NULL             },
+{"SLURM_DEPENDENCY",    OPT_INT,        &opt.dependency,    NULL             },
+{"SLURM_DISTRIBUTION",  OPT_DISTRIB,    NULL,               NULL             },
+{"SLURM_GEOMETRY",      OPT_GEOMETRY,   NULL,               NULL             },
+{"SLURM_IMMEDIATE",     OPT_INT,        &opt.immediate,     NULL             },
+{"SLURM_JOB_NAME",      OPT_STRING,     &opt.job_name,      &opt.job_name_set},
+{"SLURM_JOBID",         OPT_INT,        &opt.jobid,         NULL             },
+{"SLURM_KILL_BAD_EXIT", OPT_INT,        &opt.kill_bad_exit, NULL             },
+{"SLURM_LABELIO",       OPT_INT,        &opt.labelio,       NULL             },
+{"SLURM_LINUX_IMAGE",   OPT_STRING,     &opt.linuximage,    NULL             },
+{"SLURM_MLOADER_IMAGE", OPT_STRING,     &opt.mloaderimage,  NULL             },
+{"SLURM_NNODES",        OPT_NODES,      NULL,               NULL             },
+{"SLURM_NSOCKETS_PER_NODE",OPT_NSOCKETS,NULL,               NULL             },
+{"SLURM_NCORES_PER_SOCKET",OPT_NCORES,  NULL,               NULL             },
+{"SLURM_NTHREADS_PER_CORE",OPT_NTHREADS,NULL,               NULL             },
+{"SLURM_NO_REQUEUE",    OPT_INT,        &opt.no_requeue,    NULL             },
+{"SLURM_NO_ROTATE",     OPT_NO_ROTATE,  NULL,               NULL             },
+{"SLURM_NPROCS",        OPT_INT,        &opt.nprocs,        &opt.nprocs_set  },
+{"SLURM_OVERCOMMIT",    OPT_OVERCOMMIT, NULL,               NULL             },
+{"SLURM_PARTITION",     OPT_STRING,     &opt.partition,     NULL             },
+{"SLURM_RAMDISK_IMAGE", OPT_STRING,     &opt.ramdiskimage,  NULL             },
+{"SLURM_REMOTE_CWD",    OPT_STRING,     &opt.cwd,           NULL             },
+{"SLURM_STDERRMODE",    OPT_STRING,     &opt.efname,        NULL             },
+{"SLURM_STDINMODE",     OPT_STRING,     &opt.ifname,        NULL             },
+{"SLURM_STDOUTMODE",    OPT_STRING,     &opt.ofname,        NULL             },
+{"SLURM_TIMELIMIT",     OPT_INT,        &opt.time_limit,    NULL             },
+{"SLURM_WAIT",          OPT_INT,        &opt.max_wait,      NULL             },
+{"SLURM_DISABLE_STATUS",OPT_INT,        &opt.disable_status,NULL             },
+{"SLURM_MPI_TYPE",      OPT_MPI,        NULL,               NULL             },
+{"SLURM_SRUN_COMM_IFHN",OPT_STRING,     &opt.ctrl_comm_ifhn,NULL             },
+{"SLURM_SRUN_MULTI",    OPT_MULTI,      NULL,               NULL             },
+{"SLURM_UNBUFFEREDIO",  OPT_INT,        &opt.unbuffered,    NULL             },
+{"SLURM_NODELIST",      OPT_STRING,     &opt.alloc_nodelist,NULL             },
+{"SLURM_PROLOG",        OPT_STRING,     &opt.prolog,        NULL             },
+{"SLURM_EPILOG",        OPT_STRING,     &opt.epilog,        NULL             },
+{"SLURM_TASK_PROLOG",   OPT_STRING,     &opt.task_prolog,   NULL             },
+{"SLURM_TASK_EPILOG",   OPT_STRING,     &opt.task_epilog,   NULL             },
+{"SLURM_WORKING_DIR",   OPT_STRING,     &opt.cwd,           &opt.cwd_set     },
+{NULL, 0, NULL, NULL}
 };
 
 
@@ -1314,7 +1319,6 @@ _get_resource_range(const char *arg, const char *what, int* min, int *max,
 void set_options(const int argc, char **argv, int first)
 {
 	int opt_char, option_index = 0;
-	static bool set_cwd=false, set_name=false;
 	struct utsname name;
 	static struct option long_options[] = {
 		{"attach",        required_argument, 0, 'a'},
@@ -1524,10 +1528,10 @@ void set_options(const int argc, char **argv, int first)
 				_get_int(optarg, "slurmd-debug", false);
 			break;
 		case (int)'D':
-			if(!first && set_cwd)
+			if(!first && opt.cwd_set)
 				break;
 
-			set_cwd = true;
+			opt.cwd_set = true;
 			xfree(opt.cwd);
 			opt.cwd = xstrdup(optarg);
 			break;
@@ -1567,10 +1571,10 @@ void set_options(const int argc, char **argv, int first)
 			opt.join = true;
 			break;
 		case (int)'J':
-			if(!first && set_name)
+			if(!first && opt.job_name_set)
 				break;
 
-			set_name = true;
+			opt.job_name_set = true;
 			xfree(opt.job_name);
 			opt.job_name = xstrdup(optarg);
 			break;
@@ -2745,7 +2749,7 @@ static void _help(void)
 "      --begin=time            defer job until HH:MM DD/MM/YY\n"
 "      --mail-type=type        notify on state change: BEGIN, END, FAIL or ALL\n"
 "      --mail-user=user        who to send email notification for job state changes\n"
-"      --ctrl-comm-ifhn=addr   interface hostname for PMI commaunications from srun\n"
+"      --ctrl-comm-ifhn=addr   interface hostname for PMI communications from srun\n"
 "      --multi-prog            if set the program name specified is the\n"
 "                              configuration specification for multiple programs\n"
 "      --get-user-env          used by Moab.  See srun man page.\n"
diff --git a/src/srun/opt.h b/src/srun/opt.h
index fbca4fa044e6bda90ddcc331ad4e27eba815fba2..66367495dd921b6fecff090659025a1754252cec 100644
--- a/src/srun/opt.h
+++ b/src/srun/opt.h
@@ -95,7 +95,8 @@ typedef struct srun_options {
 	uid_t euid;		/* effective user --uid=user	*/
 	gid_t egid;		/* effective group --gid=group	*/
 	char *cwd;		/* current working directory	*/
-
+	bool cwd_set;		/* true if cwd is explicitly set */
+	
 	int  nprocs;		/* --nprocs=n,      -n n	*/
 	bool nprocs_set;	/* true if nprocs explicitly set */
 	int  cpus_per_task;	/* --cpus-per-task=n, -c n	*/
@@ -126,6 +127,7 @@ typedef struct srun_options {
 				 * when -m plane=<# of lllp per
 				 * plane> */      
 	char *job_name;		/* --job-name=,     -J name	*/
+	bool job_name_set;	/* true if job_name explicitly set */
 	unsigned int jobid;     /* --jobid=jobid                */
 	bool jobid_set;		/* true if jobid explicitly set */
 	char *mpi_type;		/* --mpi=type			*/