diff --git a/src/common/env.c b/src/common/env.c
index b3b4777870754df23d0a219b8fd082c09b07bd47..f4ac432b41c8439f240893c685ab1b59265fa263 100644
--- a/src/common/env.c
+++ b/src/common/env.c
@@ -528,3 +528,270 @@ int setup_env(env_t *env)
 	
 	return SLURM_SUCCESS;
 }
+
+#if 0
+/**********************************************************************
+ * FIXME - Not yet fully implemented, still in the planning phase
+ **********************************************************************/
+/*
+ * Create an array of pointers to environment variables strings relevant
+ * to a SLURM job allocation.  The array is terminated by a NULL pointer,
+ * and thus is suitable for use by execle() and other env_array_* functions.
+ *
+ * Sets the variables:
+ *	SLURM_JOB_ID
+ *	SLURM_JOB_NUM_NODES
+ *	SLURM_JOB_NODELIST
+ *	SLURM_JOB_CPUS_PER_NODE
+ *
+ * Sets OBSOLETE variables:
+ *	? probably only needed for users...
+ */
+char **
+env_array_create_for_job(const resource_allocation_response_msg_t *alloc)
+{
+	char **ptr;
+
+	ptr = env_array_create();
+	env_array_append(&ptr, "SLURM_JOB_ID", "%u", alloc->job_id);
+	env_array_append(&ptr, "SLURM_JOB_NUM_NODES", "%u", alloc->node_cnt);
+	env_array_append(&ptr, "SLURM_JOB_NODELIST", "%s", alloc->node_list);
+	env_array_append(&ptr, "SLURM_JOB_CPUS_PER_NODE", "%s", FIXME);
+
+	return ptr;
+}
+
+/*
+ * Create an array of pointers to environment variables strings relevant
+ * to a SLURM job step.  The array is terminated by a NULL pointer,
+ * and thus is suitable for use by execle() and other env_array_* functions.
+ *
+ * Sets variables:
+ *	SLURM_STEP_ID
+ *	SLURM_STEP_NUM_NODES
+ *	SLURM_STEP_NUM_TASKS
+ *	SLURM_STEP_TASKS_PER_NODE
+ *	SLURM_STEP_LAUNCHER_HOSTNAME
+ *	SLURM_STEP_LAUNCHER_PORT
+ *	SLURM_STEP_LAUNCHER_IPADDR
+ *
+ * Sets OBSOLETE variables:
+ *	SLURM_STEPID
+ *      SLURM_NNODES
+ *	SLURM_NPROCS
+ *	SLURM_NODELIST
+ *	SLURM_TASKS_PER_NODE
+ *	SLURM_SRUN_COMM_HOST
+ *	SLURM_SRUN_COMM_PORT
+ *	SLURM_LAUNCH_NODE_IPADDR
+ *
+ */
+char **
+env_array_create_for_step(const job_step_create_response_msg_t *step,
+			  const char *launcher_hostname,
+			  uint16_t launcher_port,
+			  const char *ip_addr_str)
+{
+	char **ptr;
+
+	ptr = env_array_create();
+	env_array_append(&ptr, "SLURM_STEP_ID", "%u", step->job_step_id);
+	env_array_append(&ptr, "SLURM_STEP_NUM_NODES",
+			 "%hu", step->step_layout->node_cnt);
+	env_array_append(&ptr, "SLURM_STEP_NUM_TASKS",
+			 "%s", step->step_layout->task_cnt);
+	env_array_append(&ptr, "SLURM_STEP_TASKS_PER_NODE", "%s", FIXME);
+	env_array_append(&ptr, "SLURM_STEP_LAUNCHER_HOSTNAME",
+			 "%s", launcher_hostname);
+	env_array_append(&ptr, "SLURM_STEP_LAUNCHER_PORT",
+			 "%hu", launcher_port);
+	env_array_appent(&ptr, "SLURM_STEP_LAUNCHER_IPADDR",
+			 "%s", ip_addr_str);
+
+	/* OBSOLETE */
+	env_array_append(&ptr, "SLURM_STEPID", "%u", step->job_step_id);
+	env_array_append(&ptr, "SLURM_NNODES",
+			 "%hu", step->step_layout->node_cnt);
+	env_array_append(&ptr, "SLURM_NPROCS",
+			 "%s", step->step_layout->task_cnt);
+	env_array_append(&ptr, "SLURM_TASKS_PER_NODE", "%s", FIXME);
+	env_array_append(&ptr, "SLURM_SRUN_COMM_HOST",
+			 "%s", launcher_hostname);
+	env_array_append(&ptr, "SLURM_SRUN_COMM_PORT",
+			 "%hu", launcher_port);
+	env_array_appent(&ptr, "SLURM_LAUNCH_NODE_IPADDR",
+			 "%s", ip_addr_str);
+
+	return ptr;
+}
+
+/*
+ * Enviroment variables set elsewhere
+ * ----------------------------------
+ *
+ * Set by slurmstepd:
+ *	SLURM_STEP_NODEID
+ *	SLURM_STEP_PROCID
+ *	SLURM_STEP_LOCALID
+ *
+ * OBSOLETE set by slurmstepd:
+ *	SLURM_NODEID
+ *	SLURM_PROCID
+ *	SLURM_LOCALID
+ */
+
+/***********************************************************************
+ * Environment variable array support functions
+ ***********************************************************************/
+
+/*
+ * Return an empty environment variable array (contains a single
+ * pointer to NULL).
+ */
+char **env_array_create(void)
+{
+	char **env_array;
+
+	env_array = (char **)xmalloc(sizeof(char **));
+	env_array[0] = NULL;
+
+	return env_array;
+}
+/*
+ * Append a single environment variable to an environment variable array,
+ * if and only if a variable by that name does not already exist in the
+ * array.
+ *
+ * Return 1 on success, and 0 on error.
+ */
+int env_array_append(char ***array_ptr, const char *name,
+		     const char *value_fmt, ...)
+{
+	char buf[BUFSIZ];
+	char **ep = NULL;
+	char *str = NULL;
+	va_list ap;
+	int rc;
+
+	buf[0] = '\0';
+	if (array_ptr == NULL || *array == NULL) {
+		return 0;
+	}
+
+	va_start(ap, value_fmt);
+	vsnprintf (buf, BUFSIZ, value_fmt, ap);
+	va_end(ap);
+	
+	ep = _find_name_in_env(*array_ptr, name);
+	if (*ep != NULL) {
+		return 0;
+	}
+
+	xstrfmtcat (str, "%s=%s", name, buf);
+	ep = _extend_env(array_ptr);
+	*ep = str;
+	
+	return 1;
+}
+
+/*
+ * Append a single environment variable to an environment variable array
+ * if a variable by that name does not already exist.  If a variable
+ * by the same name is found in the array, it is overwritten with the
+ * new value.
+ *
+ * Return 1 on success, and 0 on error.
+ */
+int env_array_overwrite(char ***array_ptr, const char *name,
+			const char *value_fmt, ...)
+{
+	char buf[BUFSIZ];
+	char **ep = NULL;
+	char *str = NULL;
+	va_list ap;
+	int rc;
+
+	buf[0] = '\0';
+	if (array_ptr == NULL || *array == NULL) {
+		return 0;
+	}
+
+	va_start(ap, value_fmt);
+	vsnprintf (buf, BUFSIZ, value_fmt, ap);
+	va_end(ap);
+	
+	xstrfmtcat (str, "%s=%s", name, buf);
+	ep = _find_name_in_env(*array_ptr, name);
+	if (*ep != NULL) {
+		xfree (*ep);
+	} else {
+		ep = _extend_env(array_ptr);
+	}
+
+	*ep = str;
+	
+	return 1;
+}
+
+char **env_array_copy(const char **array)
+{
+
+}
+
+/*
+ * Merge all of the environment variables in src_array into the
+ * array dest_array.  Any variables already found in dest_array
+ * will be overwritten with the value from src_array.
+ */
+void env_array_merge(char ***dest_array, const char **src_array)
+{
+	char **ptr;
+
+	if (src_array == NULL)
+		return;
+
+	for (ptr = array; *ptr != NULL; ptr++) {
+		env_array_overwrite(dest_array, *ptr);
+	}
+}
+
+void env_array_free(char **env_array)
+{
+	char **ptr;
+
+	if (array == NULL)
+		return;
+
+	for (ptr = array; *ptr != NULL; ptr++) {
+		xfree(*ptr);
+	}
+	xfree(array);
+}
+
+/*
+ * Work similarly to putenv() (from C stdlib), but uses setenv()
+ * under the covers.  This avoids having pointers from the global
+ * array "environ" to "string".
+ */
+static int _env_array_putenv(const char *string)
+{
+
+}
+
+/*
+ * Set all of the environment variables in a supplied environment
+ * variable array.
+ */
+void env_array_set_environment(char **env_array)
+{
+	char **ptr;
+
+	if (array == NULL)
+		return;
+
+	for (ptr = array; *ptr != NULL; ptr++) {
+		_env_array_putenv(*ptr);
+	}
+}
+
+#endif