diff --git a/slurm/slurm.h.in b/slurm/slurm.h.in
index 1fcf6329776f9629f243e049d624b63bd719ed47..f230ab60f851af6586f5bb66da95bab690c41a04 100644
--- a/slurm/slurm.h.in
+++ b/slurm/slurm.h.in
@@ -564,6 +564,10 @@ typedef struct {
 	bool parallel_debug;
 	char *task_prolog;
 	char *task_epilog;
+	cpu_bind_type_t cpu_bind_type;
+	char *cpu_bind;
+	mem_bind_type_t mem_bind_type;
+	char *mem_bind;
 } slurm_job_step_launch_t;
 
 typedef struct {
diff --git a/src/api/step_launch.c b/src/api/step_launch.c
index 9a0420d9051e648839de24711076f38ed440fc40..00c6501abd80105d8846446f6049400e22e079b7 100644
--- a/src/api/step_launch.c
+++ b/src/api/step_launch.c
@@ -188,10 +188,10 @@ int slurm_step_launch (slurm_step_ctx ctx,
 	launch.switch_job = ctx->step_resp->switch_job;
 	launch.task_prolog = params->task_prolog;
 	launch.task_epilog = params->task_epilog;
-	launch.cpu_bind_type = 0; /* FIXME opt.cpu_bind_type; */
-	launch.cpu_bind = NULL; /* FIXME opt.cpu_bind; */
-	launch.mem_bind_type = 0; /* FIXME opt.mem_bind_type; */
-	launch.mem_bind = NULL; /* FIXME opt.mem_bind; */
+	launch.cpu_bind_type = params->cpu_bind_type;
+	launch.cpu_bind = params->cpu_bind;
+	launch.mem_bind_type = params->mem_bind_type;
+	launch.mem_bind = params->mem_bind;
 	launch.multi_prog = params->multi_prog ? 1 : 0;
 
 	launch.options = job_options_create();
diff --git a/src/slaunch/slaunch.c b/src/slaunch/slaunch.c
index a282585aca15f7557e350065c3174800f19c632b..e505ad39d10bd5c6aed255c03f6b04c0e8396255 100644
--- a/src/slaunch/slaunch.c
+++ b/src/slaunch/slaunch.c
@@ -240,6 +240,10 @@ int slaunch(int argc, char **argv)
 	params.remote_error_filename = opt.remote_efname;
 	params.task_prolog = opt.task_prolog;
 	params.task_epilog = opt.task_epilog;
+	params.cpu_bind = opt.cpu_bind;
+	params.cpu_bind_type = opt.cpu_bind_type;
+	params.mem_bind = opt.mem_bind;
+	params.mem_bind_type = opt.mem_bind_type;
 	
 	_setup_local_fds(&params.local_fds, step_ctx);
 	params.parallel_debug = opt.parallel_debug ? true : false;