diff --git a/NEWS b/NEWS
index 5a5811e0bc037e7a49730f5b0e66fa2344090210..31d7dfc4507b7b776959b1d9ca6aa54ba7dbaa82 100644
--- a/NEWS
+++ b/NEWS
@@ -32,6 +32,8 @@ documents those changes that are of interest to users and admins.
     management. Add resv_port_cnt and resv_ports fields to the job step 
     data structures. Add environment variable SLURM_STEP_RESV_PORTS to
     show what ports are reserved for a job step.
+ -- Add support for SchedulerParameters=interval=<sec> to control the time
+    interval between executions of the backfill scheduler logic.
  -- NOTE: Cold-start (without preserving state) required for upgrade from 
     version 1.4.0-pre7.
 
diff --git a/doc/man/man5/slurm.conf.5 b/doc/man/man5/slurm.conf.5
index 5608d04e0b70d364fa487a3489f0ef0addddca43..a3edff41a011f3e1d6b356be4b9c58f47066cd1d 100644
--- a/doc/man/man5/slurm.conf.5
+++ b/doc/man/man5/slurm.conf.5
@@ -1025,6 +1025,15 @@ and
 
 would run \fBxterm\fR with the title set to the SLURM jobid.
 
+.TP
+\fBSchedulerParameters\fR
+The interprettation of this parameter varies by \fBSchedulerType\fR.
+In the case of \fBSchedulerType=sched/backfill\fR, there is one 
+optional argument of the form "interval:#", where "#" is number of
+seconds between iterations. Higher values result in less overhead 
+and responsivenss, The default value is 5 secondson BlueGene systems 
+and 10 seconds otherwise.
+
 .TP
 \fBSchedulerPort\fR
 The port number on which slurmctld should listen for connection requests.
diff --git a/src/common/slurm_protocol_api.c b/src/common/slurm_protocol_api.c
index 633fa0f3bb8c464ed930bac93ab583794e265004..c645de8b359c49d9b467f6bf037fd4dc7755cdcb 100644
--- a/src/common/slurm_protocol_api.c
+++ b/src/common/slurm_protocol_api.c
@@ -1275,6 +1275,23 @@ extern uint16_t slurm_get_root_filter(void)
 	}
 	return root_filter;
 }
+
+/* slurm_get_sched_params
+ * RET char * - Value of SchedulerParameters, MUST be xfreed by caller */
+extern char *slurm_get_sched_params(void)
+{
+	char *params = 0;
+	slurm_ctl_conf_t *conf;
+
+ 	if(slurmdbd_conf) {
+	} else {
+		conf = slurm_conf_lock();
+		params = conf->sched_params;
+		slurm_conf_unlock();
+	}
+	return params;
+}
+
 /* slurm_get_sched_port
  * RET uint16_t  - Value of SchedulerPort */
 extern uint16_t slurm_get_sched_port(void)
diff --git a/src/common/slurm_protocol_api.h b/src/common/slurm_protocol_api.h
index 13df3a70137a2f6c4e008c0eb4ba76fb33270e1e..d9c7830ba1823dc61597aac9aa5273f7772cc4e4 100644
--- a/src/common/slurm_protocol_api.h
+++ b/src/common/slurm_protocol_api.h
@@ -3,7 +3,7 @@
  *	definitions
  *****************************************************************************
  *  Copyright (C) 2002-2006 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 Kevin Tew <tew1@llnl.gov>, et. al.
  *  CODE-OCEC-09-009. All rights reserved.
@@ -424,6 +424,10 @@ char *slurm_get_proctrack_type(void);
  * RET uint16_t  - Value of SchedulerRootFilter */
 extern uint16_t slurm_get_root_filter(void);
 
+/* slurm_get_sched_params
+ * RET char * - Value of SchedulerParameters, MUST be xfreed by caller */
+extern char *slurm_get_sched_params(void);
+
 /* slurm_get_sched_port
  * RET uint16_t  - Value of SchedulerPort */
 extern uint16_t slurm_get_sched_port(void);
diff --git a/src/plugins/sched/backfill/backfill.c b/src/plugins/sched/backfill/backfill.c
index 09414d02c4e94b43ff09e2bd32b7d681ae6a3ebf..191daa95c73c3bbee7a2af1e7c46fb094e33fd0a 100644
--- a/src/plugins/sched/backfill/backfill.c
+++ b/src/plugins/sched/backfill/backfill.c
@@ -91,10 +91,6 @@ static bool new_work      = false;
 static bool stop_backfill = false;
 static pthread_mutex_t thread_flag_mutex = PTHREAD_MUTEX_INITIALIZER;
 
-/* Backfill scheduling has considerable overhead, 
- *	so only attempt it every BACKFILL_INTERVAL seconds.
- * Much of the scheduling for BlueGene happens through backfill,
- *	so we run it more frequently. */
 #ifndef BACKFILL_INTERVAL
 #  ifdef HAVE_BG
 #    define BACKFILL_INTERVAL	5
@@ -176,14 +172,24 @@ extern void stop_backfill_agent(void)
 extern void *backfill_agent(void *args)
 {
 	struct timeval tv1, tv2;
-	char tv_str[20];
+	char tv_str[20], *sched_params, *tmp_ptr;
 	time_t now;
-	int i, iter;
+	int backfill_interval = 0, i, iter;
 	static time_t last_backfill_time = 0;
 	/* Read config, and partitions; Write jobs and nodes */
 	slurmctld_lock_t all_locks = {
 		READ_LOCK, WRITE_LOCK, WRITE_LOCK, READ_LOCK };
 
+	sched_params = slurm_get_sched_params();
+	if (sched_params && (tmp_ptr=strstr(sched_params, "interval:")))
+		backfill_interval = atoi(tmp_ptr+9);
+	else
+		backfill_interval = BACKFILL_INTERVAL;
+	if (backfill_interval < 1) {
+		fatal("Invalid backfill scheduler interval: %d", 
+		      backfill_interval);
+	}
+
 	while (!stop_backfill) {
 		iter = (BACKFILL_CHECK_SEC * 1000000) /
 		       STOP_CHECK_USEC;
@@ -197,7 +203,7 @@ extern void *backfill_agent(void *args)
 		/* Avoid resource fragmentation if important */
 		if (job_is_completing())
 			continue;
-		if ((difftime(now, last_backfill_time) < BACKFILL_INTERVAL) ||
+		if ((difftime(now, last_backfill_time) < backfill_interval) ||
 		    stop_backfill || (!_more_work()))
 			continue;
 		last_backfill_time = now;