diff --git a/NEWS b/NEWS
index f4653f6988f32df56aaf6263307a65150aa53fe9..9eaa1b9a5d9562d0993514981c2a59ec7eadac58 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,9 @@
 This file describes changes in recent versions of SLURM. It primarily
 documents those changes that are of interest to users and admins.
 
+* Changes in SLURM 1.4.0-pre8
+=============================
+
 * Changes in SLURM 1.4.0-pre7
 =============================
  -- Bug fix for preemption with select/cons_res when there are no idle nodes.
diff --git a/doc/man/man1/salloc.1 b/doc/man/man1/salloc.1
index 596586ed4ed5d1b7ebb690e32d99383581832fcc..583e4490d27b41e736af8635e600233e4e2823df 100644
--- a/doc/man/man1/salloc.1
+++ b/doc/man/man1/salloc.1
@@ -616,6 +616,10 @@ job name and user have terminated.
 \fB\-q\fR, \fB\-\-quiet\fR
 Suppress informational messages from salloc. Errors will still be displayed.
 
+.TP
+\fB\-\-reservation\fR=\fIname\fR
+Allocate resources for the job from the named reservation.
+
 .TP
 \fB\-s\fR, \fB\-\-share\fR
 The job allocation can share nodes with other running jobs.  (The default
diff --git a/doc/man/man1/sbatch.1 b/doc/man/man1/sbatch.1
index f6090a51a61f9fd98d7f37d4dd5341b148a9ecd3..03626aa10bbb3f9809bd858d890200b6ec442bde 100644
--- a/doc/man/man1/sbatch.1
+++ b/doc/man/man1/sbatch.1
@@ -693,6 +693,10 @@ Also see the \fB\-\-no\-requeue\fR option.
 The \fIJobRequeue\fR configuration parameter controls the default 
 behavior on the cluster.
 
+.TP
+\fB\-\-reservation\fR=\fIname\fR
+Allocate resources for the job from the named reservation.
+
 .TP
 \fB\-s\fR, \fB\-\-share\fR
 The job allocation can share nodes with other running jobs.  (The default
diff --git a/doc/man/man1/srun.1 b/doc/man/man1/srun.1
index 3c6ec7a03273ef6994f2e615889f9d3c318acffe..c549c0ae7ba50d3a230af3c44405dd71026c3836 100644
--- a/doc/man/man1/srun.1
+++ b/doc/man/man1/srun.1
@@ -843,6 +843,10 @@ value of \fB\-\-nodes\fR exceeds the number of nodes identified
 with the \fB\-\-relative\fR option, a warning message will be 
 printed and the \fB\-\-relative\fR option will take precedence.
 
+.TP
+\fB\-\-reservation\fR=\fIname\fR
+Allocate resources for the job from the named reservation.
+
 .TP
 \fB\-s\fR, \fB\-\-share\fR
 The job can share nodes with other running jobs. This may result in faster job 
diff --git a/slurm/slurm.h.in b/slurm/slurm.h.in
index c85cb381de7c2b58411295f3ccb1d26b1d1c1027..69565e663c676bdb8446d42d2aa33a43a63db26c 100644
--- a/slurm/slurm.h.in
+++ b/slurm/slurm.h.in
@@ -2,7 +2,7 @@
  *  slurm.h - Definitions for all of the SLURM RPCs
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
- *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>, 
  *	Joey Ekstrom <ekstrom1@llnl.gov> et. al.
@@ -534,7 +534,7 @@ typedef struct job_descriptor {	/* For submit, allocate, and update requests */
 	char *req_nodes;	/* comma separated list of required nodes
 				 * default NONE */
 	uint16_t requeue;	/* enable or disable job requeue option */
-
+	char *reservation;	/* name of reservation to use */
 	char *script;		/* the actual job script, default NONE */
 	uint16_t shared;	/* 1 if job can share nodes with other jobs,
 				 * 0 if job needs exclusive access to the node,
diff --git a/slurm/slurm_errno.h b/slurm/slurm_errno.h
index eafe21aa7c657f4acd2aaf241168eedfae592a85..6ab77838ab64762e3baafab4b5e7669e7e5c1ba1 100644
--- a/slurm/slurm_errno.h
+++ b/slurm/slurm_errno.h
@@ -159,6 +159,8 @@ enum {
 	ESLURM_NEED_RESTART,
 	ESLURM_ACCOUNTING_POLICY,
 	ESLURM_INVALID_TIME_LIMIT,
+	ESLURM_RESERVATION_ACCESS,
+	ESLURM_RESERVATION_INVALID,
 
 	/* switch specific error codes, specific values defined in plugin module */
 	ESLURM_SWITCH_MIN = 3000,
diff --git a/src/api/init_msg.c b/src/api/init_msg.c
index d0eaac8ffc32bccdbf07555ef57a6546a64b4818..95d9ea6187dbfb7980ac0a11b8441f7b8efb01b5 100644
--- a/src/api/init_msg.c
+++ b/src/api/init_msg.c
@@ -129,6 +129,7 @@ void slurm_init_job_desc_msg(job_desc_msg_t * job_desc_msg)
 	job_desc_msg->resp_host		= NULL;
 	job_desc_msg->req_nodes		= NULL;
 	job_desc_msg->requeue		= (uint16_t) NO_VAL;
+	job_desc_msg->reservation	= NULL;
 	job_desc_msg->rotate		= (uint16_t) NO_VAL;
 	job_desc_msg->script		= NULL;
 	job_desc_msg->select_jobinfo	= NULL;
diff --git a/src/common/slurm_errno.c b/src/common/slurm_errno.c
index 0cdab103de322b75b301881013397d7ce0f190b4..fe1f2c4f757d92ac60cf3bd7200e63488371c386 100644
--- a/src/common/slurm_errno.c
+++ b/src/common/slurm_errno.c
@@ -218,9 +218,14 @@ static slurm_errtab_t slurm_errtab[] = {
 	  "The node configuration changes that were made require restart "
 	  "of the slurmctld daemon to take effect"},
 	{ ESLURM_ACCOUNTING_POLICY,
-	  "Job violates accounting policy (job submit limit, the user's size and/or time limits)"},
+	  "Job violates accounting policy (job submit limit, the user's "
+	  "size and/or time limits)"},
 	{ ESLURM_INVALID_TIME_LIMIT,
 	  "Requested time limit exceeds partition limit"	},
+	{ ESLURM_RESERVATION_ACCESS,
+	  "Access denied to requested reservation"		},
+	{ ESLURM_RESERVATION_INVALID,
+	  "Requested reservation is invalid"			},
 
 	/* slurmd error codes */
 
diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c
index e15137dc66d1e46298f128f40de7332a35c021fa..0503a91a69c38f120ead3b706a3e7ddd1689dc58 100644
--- a/src/common/slurm_protocol_pack.c
+++ b/src/common/slurm_protocol_pack.c
@@ -2825,6 +2825,7 @@ _pack_job_desc_msg(job_desc_msg_t * job_desc_ptr, Buf buffer)
 	packstr(job_desc_ptr->licenses, buffer);
 	pack16(job_desc_ptr->mail_type, buffer);
 	packstr(job_desc_ptr->mail_user, buffer);
+	packstr(job_desc_ptr->reservation, buffer);
 	packstr(job_desc_ptr->wckey, buffer);
 
 	if(job_desc_ptr->select_jobinfo)
@@ -2964,6 +2965,7 @@ _unpack_job_desc_msg(job_desc_msg_t ** job_desc_buffer_ptr, Buf buffer)
 	safe_unpackstr_xmalloc(&job_desc_ptr->licenses, &uint32_tmp, buffer);
 	safe_unpack16(&job_desc_ptr->mail_type, buffer);
 	safe_unpackstr_xmalloc(&job_desc_ptr->mail_user, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&job_desc_ptr->reservation, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&job_desc_ptr->wckey, &uint32_tmp, buffer);
 
 	if (select_g_alloc_jobinfo (&job_desc_ptr->select_jobinfo)
diff --git a/src/salloc/opt.c b/src/salloc/opt.c
index c8f99a475f57f3faf3eba943a89b088d155dec4b..9005f2c98267e67c50a16c83b5510b0e60b78e00 100644
--- a/src/salloc/opt.c
+++ b/src/salloc/opt.c
@@ -2,7 +2,7 @@
  *  opt.c - options processing for salloc
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
- *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona1@llnl.gov>, et. al.
  *  LLNL-CODE-402394.
@@ -135,6 +135,7 @@
 #define LONG_OPT_HINT            0x13b
 #define LONG_OPT_ACCTG_FREQ      0x13c
 #define LONG_OPT_WCKEY           0x13d
+#define LONG_OPT_RESERVATION     0x13e
 
 /*---- global variables, defined in opt.h ----*/
 opt_t opt;
@@ -301,7 +302,8 @@ static void _opt_default()
 	opt.no_shell	    = false;
 	opt.get_user_env_time = -1;
 	opt.get_user_env_mode = -1;
-	opt.wckey = NULL;
+	opt.reservation     = NULL;
+	opt.wckey           = NULL;
 }
 
 /*---[ env var processing ]-----------------------------------------------*/
@@ -573,6 +575,7 @@ void set_options(const int argc, char **argv)
 		{"cpu_bind",      required_argument, 0, LONG_OPT_CPU_BIND},
 		{"mem_bind",      required_argument, 0, LONG_OPT_MEM_BIND},
 		{"wckey",         required_argument, 0, LONG_OPT_WCKEY},
+		{"reservation",   required_argument, 0, LONG_OPT_RESERVATION},
 		{NULL,            0,                 0, 0}
 	};
 	char *opt_string = "+a:B:c:C:d:D:F:g:hHIJ:kK:L:m:n:N:Op:P:qR:st:uU:vVw:W:x:";
@@ -963,6 +966,10 @@ void set_options(const int argc, char **argv)
 			xfree(opt.wckey);
 			opt.wckey = xstrdup(optarg);
 			break;
+		case LONG_OPT_RESERVATION:
+			xfree(opt.reservation);
+			opt.reservation = xstrdup(optarg);
+			break;
 		default:
 			fatal("Unrecognized command line parameter %c",
 			      opt_char);
@@ -1376,6 +1383,7 @@ static void _opt_list()
 	info("partition      : %s",
 		opt.partition == NULL ? "default" : opt.partition);
 	info("job name       : `%s'", opt.job_name);
+	info("reservation    : `%s'", opt.reservation);
 	info("wckey          : `%s'", opt.wckey);
 	if (opt.jobid != NO_VAL)
 		info("jobid          : %u", opt.jobid);
@@ -1461,7 +1469,7 @@ static void _usage(void)
 "              [--bell] [--no-bell] [--kill-command[=signal]]\n"
 "              [--nodefile=file] [--nodelist=hosts] [--exclude=hosts]\n"
 "              [--network=type] [--mem-per-cpu=MB]\n"
-"              [--cpu_bind=...] [--mem_bind=...]\n"
+"              [--cpu_bind=...] [--mem_bind=...] [--reservation=name]\n"
 "              [executable [args...]]\n");
 }
 
@@ -1520,6 +1528,7 @@ static void _help(void)
 "  -F, --nodefile=filename     request a specific list of hosts\n"
 "  -w, --nodelist=hosts...     request a specific list of hosts\n"
 "  -x, --exclude=hosts...      exclude a specific list of hosts\n"
+"      --reservation=name      allocate resources from named reservation\n"
 "\n"
 "Consumable resources related options:\n" 
 "      --exclusive             allocate nodes in exclusive mode when\n" 
diff --git a/src/salloc/opt.h b/src/salloc/opt.h
index 1301f950114941befe34e463d83a108ffd26e667..b842830d2f9c2cd4f8efb6542e50cf3fe8b57fc0 100644
--- a/src/salloc/opt.h
+++ b/src/salloc/opt.h
@@ -2,7 +2,7 @@
  *  opt.h - definitions for salloc option processing
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
- *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona1@llnl.gov>,
  *    Christopher J. Morrone <morrone2@llnl.gov>, et. al.
@@ -138,6 +138,7 @@ typedef struct salloc_options {
 	int get_user_env_time;	/* --get-user-env[=secs]	*/
 	int get_user_env_mode; 	/* --get-user-env=[S|L]		*/
 	char *cwd;		/* current working directory	*/
+	char *reservation;	/* --reservation		*/
 	char *wckey;            /* --wckey workload characterization key */
 } opt_t;
 
diff --git a/src/salloc/salloc.c b/src/salloc/salloc.c
index 9295bbcfe3f8367a8ea8827e46714915aa0f9661..549a617b3a796401b54cf7d0c00f49fe26fd432c 100644
--- a/src/salloc/salloc.c
+++ b/src/salloc/salloc.c
@@ -348,6 +348,7 @@ static int _fill_job_desc_from_opts(job_desc_msg_t *desc)
 	desc->features = opt.constraints;
 	desc->immediate = opt.immediate ? 1 : 0;
 	desc->name = xstrdup(opt.job_name);
+	desc->reservation = xstrdup(opt.reservation);
 	desc->wckey  = xstrdup(opt.wckey);
 
 	desc->req_nodes = opt.nodelist;
diff --git a/src/sbatch/opt.c b/src/sbatch/opt.c
index ea77c0d78fbc5c7f47fc433f2dc1c2bec5798718..71b0e9199b770629d3496ba6d43275a3046c871c 100644
--- a/src/sbatch/opt.c
+++ b/src/sbatch/opt.c
@@ -2,7 +2,7 @@
  *  opt.c - options processing for sbatch
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
- *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona1@llnl.gov>, et. al.
  *  LLNL-CODE-402394.
@@ -138,6 +138,7 @@
 #define LONG_OPT_OPEN_MODE       0x147
 #define LONG_OPT_ACCTG_FREQ      0x148
 #define LONG_OPT_WCKEY           0x149
+#define LONG_OPT_RESERVATION     0x14a
 
 /*---- global variables, defined in opt.h ----*/
 opt_t opt;
@@ -306,7 +307,8 @@ static void _opt_default()
 	opt.get_user_env_time = -1;
 	opt.get_user_env_mode = -1;
 	opt.acctg_freq        = -1;
-	opt.wckey = NULL;
+	opt.reservation       = NULL;
+	opt.wckey             = NULL;
 }
 
 /*---[ env var processing ]-----------------------------------------------*/
@@ -586,6 +588,7 @@ static struct option long_options[] = {
 	{"cpu_bind",      required_argument, 0, LONG_OPT_CPU_BIND},
 	{"mem_bind",      required_argument, 0, LONG_OPT_MEM_BIND},
 	{"wckey",         required_argument, 0, LONG_OPT_WCKEY},
+	{"reservation",   required_argument, 0, LONG_OPT_RESERVATION},
 	{NULL,            0,                 0, 0}
 };
 
@@ -1364,6 +1367,10 @@ static void _set_options(int argc, char **argv)
 			xfree(opt.wckey);
 			opt.wckey = xstrdup(optarg);
 			break;
+		case LONG_OPT_RESERVATION:
+			xfree(opt.reservation);
+			opt.reservation = xstrdup(optarg);
+			break;
 		default:
 			fatal("Unrecognized command line parameter %c",
 			      opt_char);
@@ -2119,6 +2126,7 @@ static void _opt_list()
 	info("partition      : %s",
 		opt.partition == NULL ? "default" : opt.partition);
 	info("job name       : `%s'", opt.job_name);
+	info("reservation    : `%s'", opt.reservation);
 	info("wckey          : `%s'", opt.wckey);
 	info("distribution   : %s", format_task_dist_states(opt.distribution));
 	if(opt.distribution == SLURM_DIST_PLANE)
@@ -2208,7 +2216,7 @@ static void _usage(void)
 "              [--requeue] [--no-requeue] [--ntasks-per-node=n] [--propagate]\n"
 "              [--nodefile=file] [--nodelist=hosts] [--exclude=hosts]\n"
 "              [--network=type] [--mem-per-cpu=MB]\n"
-"              [--cpu_bind=...] [--mem_bind=...]\n"
+"              [--cpu_bind=...] [--mem_bind=...] [--reservation=name]\n"
 "              executable [args...]\n");
 }
 
@@ -2269,6 +2277,7 @@ static void _help(void)
 "  -F, --nodefile=filename     request a specific list of hosts\n"
 "  -w, --nodelist=hosts...     request a specific list of hosts\n"
 "  -x, --exclude=hosts...      exclude a specific list of hosts\n"
+"      --reservation=name      allocate resources from named reservation\n"
 "\n"
 "Consumable resources related options:\n" 
 "      --exclusive             allocate nodes in exclusive mode when\n" 
diff --git a/src/sbatch/opt.h b/src/sbatch/opt.h
index 1d53bb46deb28b657f9b4b258b601008fb6c54e4..516613c926a6b4fe2ef90db6111eae6d29d5c830 100644
--- a/src/sbatch/opt.h
+++ b/src/sbatch/opt.h
@@ -2,7 +2,7 @@
  *  opt.h - definitions for srun option processing
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
- *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona1@llnl.gov>,
  *    Christopher J. Morrone <morrone2@llnl.gov>, et. al.
@@ -144,6 +144,7 @@ typedef struct sbatch_options {
 	int get_user_env_time;	/* --get-user-env[=timeout]	*/
 	int get_user_env_mode;	/* --get-user-env=[S|L]         */
 	char *wckey;            /* --wckey workload characterization key */
+	char *reservation;      /* --reservation */
 } opt_t;
 
 extern opt_t opt;
diff --git a/src/sbatch/sbatch.c b/src/sbatch/sbatch.c
index 685cb9f434e66d7578cba203bb326be773cdc514..72d0ec54a95000ca24fe79b9148b7c17be41f2f3 100644
--- a/src/sbatch/sbatch.c
+++ b/src/sbatch/sbatch.c
@@ -2,7 +2,7 @@
  *  sbatch.c - Submit a SLURM batch script.$
  *****************************************************************************
  *  Copyright (C) 2006-2007 The Regents of the University of California.
- *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Christopher J. Morrone <morrone2@llnl.gov>
  *  LLNL-CODE-402394.
@@ -146,7 +146,7 @@ static int fill_job_desc_from_opts(job_desc_msg_t *desc)
 		desc->name = xstrdup(opt.job_name);
 	else
 		desc->name = xstrdup("sbatch");
-	
+	desc->reservation  = xstrdup(opt.reservation);
 	desc->wckey  = xstrdup(opt.wckey);
 
 	desc->req_nodes = opt.nodelist;
diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c
index 29bbcf9ef80d453d9589ef88d45673cfa2de3498..7f139e0f28d1886fc5c5ebdda19b88d655630412 100644
--- a/src/slurmctld/job_mgr.c
+++ b/src/slurmctld/job_mgr.c
@@ -4,7 +4,7 @@
  *	(last_job_update), and hash table (job_hash)
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
- *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
  *  LLNL-CODE-402394.
@@ -1403,8 +1403,8 @@ void dump_job_desc(job_desc_msg_t * job_specs)
 	debug3("   min_memory_%s=%ld job_min_tmp_disk=%ld",
 	       mem_type, job_min_memory, job_min_tmp_disk);
 	immediate = (job_specs->immediate == 0) ? 0L : 1L;
-	debug3("   immediate=%ld features=%s",
-	       immediate, job_specs->features);
+	debug3("   immediate=%ld features=%s reservation=%s",
+	       immediate, job_specs->features, job_specs->reservation);
 
 	debug3("   req_nodes=%s exc_nodes=%s", 
 	       job_specs->req_nodes, job_specs->exc_nodes);
diff --git a/src/srun/allocate.c b/src/srun/allocate.c
index b39775f155f1230388569d177f2afa2ee39bd1ef..449577dc94ddcb6c2e6470d5403476404fc70609 100644
--- a/src/srun/allocate.c
+++ b/src/srun/allocate.c
@@ -2,7 +2,7 @@
  *  src/srun/allocate.c - srun functions for managing node allocations
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
- *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
  *  LLNL-CODE-402394.
@@ -343,8 +343,8 @@ job_desc_msg_create_from_opts ()
 		j->name   = xstrdup(opt.job_name);
 	else
 		j->name   = xstrdup(opt.cmd_name);
-
-	j->wckey  = xstrdup(opt.wckey);
+	j->reservation    = xstrdup(opt.reservation);
+	j->wckey          = xstrdup(opt.wckey);
 	
 	j->req_nodes      = xstrdup(opt.nodelist);
 	
diff --git a/src/srun/opt.c b/src/srun/opt.c
index a04056d6777d19368a945e6987c36fec87147f04..fffe6324afce9b4e5c171dae3b301bd3d9f09e12 100644
--- a/src/srun/opt.c
+++ b/src/srun/opt.c
@@ -2,7 +2,7 @@
  *  opt.c - options processing for srun
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
- *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona1@llnl.gov>, et. al.
  *  LLNL-CODE-402394.
@@ -168,6 +168,7 @@
 #define LONG_OPT_OPEN_MODE       0x149
 #define LONG_OPT_ACCTG_FREQ      0x14a
 #define LONG_OPT_WCKEY           0x14b
+#define LONG_OPT_RESERVATION     0x14c
 
 /*---- global variables, defined in opt.h ----*/
 int _verbose;
@@ -435,6 +436,7 @@ static void _opt_default()
 	opt.pty = false;
 	opt.open_mode = 0;
 	opt.acctg_freq = -1;
+	opt.reservation = NULL;
 	opt.wckey = NULL;
 }
 
@@ -770,6 +772,7 @@ static void set_options(const int argc, char **argv)
 		{"open-mode",        required_argument, 0, LONG_OPT_OPEN_MODE},
 		{"acctg-freq",       required_argument, 0, LONG_OPT_ACCTG_FREQ},
 		{"wckey",            required_argument, 0, LONG_OPT_WCKEY},
+		{"reservation",      required_argument, 0, LONG_OPT_RESERVATION},
 		{NULL,               0,                 0, 0}
 	};
 	char *opt_string = "+aAbB:c:C:d:D:e:Eg:Hi:IjJ:kKlL:m:n:N:"
@@ -1297,6 +1300,10 @@ static void set_options(const int argc, char **argv)
 			xfree(opt.wckey);
 			opt.wckey = xstrdup(optarg);
 			break;
+		case LONG_OPT_RESERVATION:
+			xfree(opt.reservation);
+			opt.reservation = xstrdup(optarg);
+			break;
 		case LONG_OPT_CHECKPOINT_PATH:
 			xfree(opt.ckpt_path);
 			opt.ckpt_path = xstrdup(optarg);
@@ -1840,6 +1847,7 @@ static void _opt_list()
 	info("partition      : %s",
 	     opt.partition == NULL ? "default" : opt.partition);
 	info("job name       : `%s'", opt.job_name);
+	info("reservation    : `%s'", opt.reservation);
 	info("wckey          : `%s'", opt.wckey);
 	info("distribution   : %s", format_task_dist_states(opt.distribution));
 	if(opt.distribution == SLURM_DIST_PLANE)
@@ -1946,7 +1954,7 @@ static void _usage(void)
 "            [--mpi=type] [--account=name] [--dependency=type:jobid]\n"
 "            [--kill-on-bad-exit] [--propagate[=rlimits] [--comment=name]\n"
 "            [--cpu_bind=...] [--mem_bind=...] [--network=type]\n"
-"            [--ntasks-per-node=n] [--ntasks-per-socket=n]\n"
+"            [--ntasks-per-node=n] [--ntasks-per-socket=n] [reservation=name]\n"
 "            [--ntasks-per-core=n] [--mem-per-cpu=MB] [--preserve-env]\n"
 #ifdef HAVE_BG		/* Blue gene specific options */
 "            [--geometry=XxYxZ] [--conn-type=type] [--no-rotate] [--reboot]\n"
@@ -2039,6 +2047,7 @@ static void _help(void)
 "  -w, --nodelist=hosts...     request a specific list of hosts\n"
 "  -x, --exclude=hosts...      exclude a specific list of hosts\n"
 "  -Z, --no-allocate           don't allocate nodes (must supply -w)\n"
+"      --reservation=name      allocate resources from named reservation\n"
 "\n"
 "Consumable resources related options:\n" 
 "      --exclusive             allocate nodes in exclusive mode when\n" 
diff --git a/src/srun/opt.h b/src/srun/opt.h
index c273790ce615c41b27eb3318ac29143eb83c4f9d..4a1e56798d3bdd55a14e86727cb6127bc33390e6 100644
--- a/src/srun/opt.h
+++ b/src/srun/opt.h
@@ -2,7 +2,8 @@
  *  opt.h - definitions for srun option processing
  *  $Id$
  *****************************************************************************
- *  Copyright (C) 2002-2006 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona1@llnl.gov>, et. al.
  *  LLNL-CODE-402394.
@@ -210,6 +211,7 @@ typedef struct srun_options {
 	int argc;		/* length of argv array		*/
 	char **argv;		/* left over on command line	*/
 	char *wckey;            /* --wckey workload characterization key */
+	char *reservation;      /* --reservation		*/
 } opt_t;
 
 extern opt_t opt;