diff --git a/doc/man/man5/bluegene.conf.5 b/doc/man/man5/bluegene.conf.5
index 344b5b5fc5680e25cd1d075d0cd29e2a088d51ac..eb24261238bc925cacfc90800207b25e41cf1a58 100644
--- a/doc/man/man5/bluegene.conf.5
+++ b/doc/man/man5/bluegene.conf.5
@@ -17,8 +17,10 @@ Changes to the configuration file take effect upon restart of
 SLURM daemons, daemon receipt of the SIGHUP signal, or execution 
 of the command "scontrol reconfigure" unless otherwise noted.
 .LP
-The overall configuration parameters available include:
 
+There are some differences between Bluegene/L and Bluegene/P in respects to the contents of the bluegene.conf file.  
+
+.SH "The Bluegene/L specific options are:"
 .TP
 \fBAltBlrtsImage\fR
 Alternative BlrtsImage.  This is an optional field only used for 
@@ -36,16 +38,59 @@ Groups= is not stated then this image will be able to be used by all
 groups. You can but as many alternative images as you want in the conf file.
 
 .TP
-\fBAltMloaderImage\fR
-Alternative MloaderImage.  This is an optional field only used for 
+\fBAltRamDiskImage\fR
+Alternative RamDiskImage.  This is an optional field only used for 
 mulitple images on a system and should be followed by a Groups= with
 the user groups allowed to use this image (i.e. Groups=da,jette) if 
 Groups= is not stated then this image will be able to be used by all
 groups. You can but as many alternative images as you want in the conf file.
 
 .TP
-\fBAltRamDiskImage\fR
-Alternative RamDiskImage.  This is an optional field only used for 
+\fBBlrtsImage\fR
+BlrtsImage used for creation of all bgblocks.
+There is no default value and this must be specified.
+
+.TP
+\fBLinuxImage\fR
+LinuxImage used for creation of all bgblocks.
+There is no default value and this must be specified.
+
+.TP
+\fBRamDiskImage\fR
+RamDiskImage used for creation of all bgblocks.
+There is no default value and this must be specified.
+
+.SH "The Bluegene/P specific options are:"
+.TP
+\fBAltCnloadImage\fR
+Alternative CnloadImage.  This is an optional field only used for 
+mulitple images on a system and should be followed by a Groups= with
+the user groups allowed to use this image (i.e. Groups=da,jette) if 
+Groups= is not stated then this image will be able to be used by all
+groups. You can but as many alternative images as you want in the conf file.
+
+.TP
+\fBAltIoloadImage\fR
+Alternative IoloadImage.  This is an optional field only used for 
+mulitple images on a system and should be followed by a Groups= with
+the user groups allowed to use this image (i.e. Groups=da,jette) if 
+Groups= is not stated then this image will be able to be used by all
+groups. You can but as many alternative images as you want in the conf file.
+
+.TP
+\fBCnloadImage\fR
+CnloadImage used for creation of all bgblocks.
+There is no default value and this must be specified.
+
+.TP
+\fBIoloadImage\fR
+IoloadImage used for creation of all bgblocks.
+There is no default value and this must be specified.
+
+.SH "All options below are common on all Bluegene systems:"
+.TP
+\fBAltMloaderImage\fR
+Alternative MloaderImage.  This is an optional field only used for 
 mulitple images on a system and should be followed by a Groups= with
 the user groups allowed to use this image (i.e. Groups=da,jette) if 
 Groups= is not stated then this image will be able to be used by all
@@ -57,11 +102,6 @@ The number of c\-nodes per base partition.
 There is no default value and this must be specified. (For bgl systems this
 is usually 512)
 
-.TP
-\fBBlrtsImage\fR
-BlrtsImage used for creation of all bgblocks.
-There is no default value and this must be specified.
-
 .TP
 \fBBridgeAPILogFile\fR
 Fully qualified pathname of a into which the Bridge API logs are 
@@ -85,6 +125,11 @@ The default value is 0.
 \fB4\fR: Log all messages
 .RE
 
+.TP
+\fBDenyPassthrough\fR
+Specify which dimsions you do not want to allow pass throughs.  Valid options are X, Y, Z or all.
+example: If you don't want to allow passthroughs in the X and Y diminsions you would specify DenyPassthrough=X,Y
+
 .TP
 \fBLayoutMode\fR
 Describes how SLURM should create bgblocks.
@@ -104,11 +149,6 @@ and starvation of larger jobs.
 \fBUse this mode with caution.\fR
 .RE
 
-.TP
-\fBLinuxImage\fR
-LinuxImage used for creation of all bgblocks.
-There is no default value and this must be specified.
-
 .TP
 \fBMloaderImage\fR
 MloaderImage used for creation of all bgblocks.
@@ -132,11 +172,6 @@ you do not wish to create small blocks, 8 is usually the number to use.
 For bgp IO rich systems 32 is the value that should be used to create small 
 blocks since you can only have 2 ionodes per nodecard instead of 4 like on bgl.
 
-.TP
-\fBRamDiskImage\fR
-RamDiskImage used for creation of all bgblocks.
-There is no default value and this must be specified.
-
 .LP
 Each bgblock is defined by the base partitions used to construct it.
 Ordering is very important for laying out switch wires.  Please create
diff --git a/src/plugins/accounting_storage/mysql/mysql_jobacct_process.c b/src/plugins/accounting_storage/mysql/mysql_jobacct_process.c
index 527467889d8b2fbae5d612f63c6e2801233da25b..f43a42f236528e5a4c9014550e5c7fc5f292bc6e 100644
--- a/src/plugins/accounting_storage/mysql/mysql_jobacct_process.c
+++ b/src/plugins/accounting_storage/mysql/mysql_jobacct_process.c
@@ -231,7 +231,7 @@ extern int setup_job_cond_limits(acct_job_cond_t *job_cond, char **extra)
 		while((object = list_next(itr))) {
 			if(set) 
 				xstrcat(*extra, " || ");
-			xstrfmtcat(*extra, "t1.gid=", object);
+			xstrfmtcat(*extra, "t1.gid='%s'", object);
 			set = 1;
 		}
 		list_iterator_destroy(itr);
diff --git a/src/plugins/select/bluegene/block_allocator/block_allocator.c b/src/plugins/select/bluegene/block_allocator/block_allocator.c
index 0b6a774fcf42cb9c406c7f0a324434569d7bc9aa..d1fd596c034570f0f18ed253d687268433392755 100644
--- a/src/plugins/select/bluegene/block_allocator/block_allocator.c
+++ b/src/plugins/select/bluegene/block_allocator/block_allocator.c
@@ -62,10 +62,11 @@ List path = NULL;
 List best_path = NULL;
 int best_count;
 int color_count = 0;
-bool *passthrough = NULL;
+uint16_t *deny_pass = NULL;
 
 /* extern Global */
 my_bluegene_t *bg = NULL;
+uint16_t ba_deny_pass = 0;
 List bp_map_list = NULL;
 char letters[62];
 char colors[6];
@@ -91,6 +92,7 @@ s_p_options_t bg_conf_file_options[] = {
 	{"AltCnloadImage", S_P_ARRAY, parse_image, NULL},
 	{"AltIoloadImage", S_P_ARRAY, parse_image, NULL},
 #endif
+	{"DenyPassthrough", S_P_STRING},
 	{"LayoutMode", S_P_STRING},
 	{"MloaderImage", S_P_STRING},
 	{"BridgeAPILogFile", S_P_STRING},
@@ -242,6 +244,28 @@ extern char *bg_block_state_string(rm_partition_state_t state)
 	return tmp;
 }
 
+extern char *ba_passthroughs_string(uint16_t passthrough)
+{
+	char *pass = NULL;
+	if(passthrough & PASS_FOUND_X)
+		xstrcat(pass, "X");
+	if(passthrough & PASS_FOUND_Y) {
+		if(pass)
+			xstrcat(pass, ",Y");
+		else
+			xstrcat(pass, "Y");
+	}
+	if(passthrough & PASS_FOUND_Z) {
+		if(pass)
+			xstrcat(pass, ",Z");
+		else
+			xstrcat(pass, "Z");
+	}
+	
+	return pass;
+}
+
+
 extern int parse_blockreq(void **dest, slurm_parser_enum_t type,
 			  const char *key, const char *value, 
 			  const char *line, char **leftover)
@@ -489,8 +513,11 @@ extern int new_ba_request(ba_request_t* ba_request)
 	geo[X] = ba_request->geometry[X];
 	geo[Y] = ba_request->geometry[Y];
 	geo[Z] = ba_request->geometry[Z];
-	passthrough = &ba_request->passthrough;
-
+	if(ba_request->deny_pass == (uint16_t)NO_VAL) 
+		ba_request->deny_pass = ba_deny_pass;
+	
+	deny_pass = &ba_request->deny_pass;
+	
 	if(geo[X] != (uint16_t)NO_VAL) { 
 		for (i=0; i<BA_SYSTEM_DIMENSIONS; i++){
 			if ((geo[i] < 1) 
@@ -2102,17 +2129,38 @@ extern int *find_bp_loc(char* bp_id)
 #ifdef HAVE_BG_FILES
 	ba_bp_map_t *bp_map = NULL;
 	ListIterator itr;
-	
+	char *check = bp_id;
+
 	if(!bp_map_list) {
 		if(set_bp_map() == -1)
 			return NULL;
 	}
+
+	/* with BGP they changed the names of the rack midplane action from
+	 * R000 to R00-M0 so we now support both formats for each of the
+	 * systems */
+#ifdef HAVE_BGL
+	if(check[3] == '-') {
+		if(check[5]) {
+			check[3] = check[5];
+			check[4] = '\0';
+		}
+	}
+#else
+	if(bp_id[3] != '-') 
+		check = xstrdup_printf("R%c%c-M%c",
+				       bp_id[1], bp_id[2], bp_id[3]);
+#endif
+
 	itr = list_iterator_create(bp_map_list);
 	while ((bp_map = list_next(itr)))  
-		if (!strcasecmp(bp_map->bp_id, bp_id)) 
+		if (!strcasecmp(bp_map->bp_id, check)) 
 			break;	/* we found it */
-	
 	list_iterator_destroy(itr);
+
+#ifndef HAVE_BGL
+	xfree(check);
+#endif
 	if(bp_map != NULL)
 		return bp_map->coord;
 	else
@@ -2795,7 +2843,9 @@ static int _append_geo(int *geometry, List geos, int rotate)
 	if(rotate) {
 		for (i = (BA_SYSTEM_DIMENSIONS - 1); i >= 0; i--) {
 			for (j = 1; j <= i; j++) {
-				if (geometry[j-1] > geometry[j]) {
+				if ((geometry[j-1] > geometry[j])
+				    && (geometry[j] <= DIM_SIZE[j-i])
+				    && (geometry[j-1] <= DIM_SIZE[j])) {
 					temp_geo = geometry[j-1];
 					geometry[j-1] = geometry[j];
 					geometry[j] = temp_geo;
@@ -2921,6 +2971,19 @@ static int _fill_in_coords(List results, List start_list,
 			goto failed;
 		}
 	}
+
+	if(deny_pass) {
+		if((*deny_pass & PASS_DENY_Y)
+		   && (*deny_pass & PASS_FOUND_Y)) {
+			debug("We don't allow Y passthoughs");
+			rc = 0;
+		} else if((*deny_pass & PASS_DENY_Z)
+		   && (*deny_pass & PASS_FOUND_Z)) {
+			debug("We don't allow Z passthoughs");
+			rc = 0;
+		}
+	}
+
 failed:
 	list_iterator_destroy(itr);				
 				
@@ -3124,7 +3187,16 @@ static int _find_yz_path(ba_node_t *ba_node, int *first,
 					dim_curr_switch->int_wire[2].port_tar
 						= 0;
 					dim_curr_switch = dim_next_switch;
-									
+
+					if(deny_pass
+					   && (node_tar[i2] != first[i2])) {
+						if(i2 == 1) 
+							*deny_pass |=
+								PASS_FOUND_Y;
+						else 
+							*deny_pass |=
+								PASS_FOUND_Z;
+					}
 					while(node_tar[i2] != first[i2]) {
 						debug3("on dim %d at %d "
 						       "looking for %d",
@@ -3138,6 +3210,7 @@ static int _find_yz_path(ba_node_t *ba_node, int *first,
 							       "here 3");
 							return 0;
 						} 
+						
 						dim_curr_switch->
 							int_wire[2].used = 1;
 						dim_curr_switch->
@@ -4262,6 +4335,11 @@ static int _find_x_path(List results, ba_node_t *ba_node,
 			} else if(found == x_size) {
 				debug2("Algo(%d) finishing the torus!", algo);
 
+				if(deny_pass && (*deny_pass & PASS_DENY_X)) {
+					info("we don't allow passthroughs 1");
+					return 0;
+				}
+
 				if(best_path)
 					list_flush(best_path);
 				else
@@ -4416,7 +4494,13 @@ static int _find_x_path(List results, ba_node_t *ba_node,
 			debug2("Algo(%d) yes found next free %d", algo,
 			       best_count);
 			node_tar = _set_best_path();
-			
+
+			if(deny_pass && (*deny_pass & PASS_DENY_X)
+			   && (*deny_pass & PASS_FOUND_X)) {
+				debug("We don't allow X passthoughs.");
+				return 0;
+			}
+
 			next_node = &ba_system_ptr->grid[node_tar[X]]
 #ifdef HAVE_3D
 				[node_tar[Y]]
@@ -4834,9 +4918,9 @@ static int *_set_best_path()
 
 	itr = list_iterator_create(best_path);
 	while((path_switch = (ba_path_switch_t*) list_next(itr))) {
-		if(passthrough && path_switch->in > 1 && path_switch->out > 1) {
-			*passthrough = true;
-			debug2("got a passthrough");
+		if(deny_pass && path_switch->in > 1 && path_switch->out > 1) {
+			*deny_pass |= PASS_FOUND_X;
+			debug2("got a passthrough in X");
 		}
 #ifdef HAVE_3D
 		debug3("mapping %c%c%c %d->%d",
diff --git a/src/plugins/select/bluegene/block_allocator/block_allocator.h b/src/plugins/select/bluegene/block_allocator/block_allocator.h
index d8cc9ff70f9c570490f3b51b0d7504c77a4275e4..45aea50ca0f16e7946f6cabad8da7745395a1b6b 100644
--- a/src/plugins/select/bluegene/block_allocator/block_allocator.h
+++ b/src/plugins/select/bluegene/block_allocator/block_allocator.h
@@ -52,6 +52,16 @@
 #define BA_SYSTEM_DIMENSIONS 1
 #endif
 
+#define PASS_DENY_X 0x0001
+#define PASS_DENY_Y 0x0002
+#define PASS_DENY_Z 0x0004
+#define PASS_DENY_ALL 0x00ff
+
+#define PASS_FOUND_X 0x0100
+#define PASS_FOUND_Y 0x0200
+#define PASS_FOUND_Z 0x0400
+#define PASS_FOUND_ANY 0xff00
+
 extern bool _initialized;
 
 enum {X, Y, Z};
@@ -92,8 +102,11 @@ typedef struct {
 	int geometry[BA_SYSTEM_DIMENSIONS]; /* size of block in geometry */
 	char *linuximage;              /* LinuxImage for this block */
 	char *mloaderimage;            /* mloaderImage for this block */
-	bool passthrough;              /* filled in if there are
-					  passthroughs in the block created */
+	uint16_t deny_pass;            /* PASSTHROUGH_FOUND is set if there are
+					  passthroughs in the block
+					  created you can deny
+					  passthroughs by setting the
+					  appropriate bits*/
 	int procs;                     /* Number of Real processors in
 					  block */
 	char *ramdiskimage;            /* RamDiskImage for this block */
@@ -258,10 +271,14 @@ extern int DIM_SIZE[BA_SYSTEM_DIMENSIONS]; /* how many midplanes in
 					    * each dimension */
 extern s_p_options_t bg_conf_file_options[]; /* used to parse the
 					      * bluegene.conf file. */
+extern uint16_t ba_deny_pass;
 
 /* Translate a state enum to a readable string */
 extern char *bg_block_state_string(rm_partition_state_t state);
 
+/* must xfree return of this */
+extern char *ba_passthroughs_string(uint16_t passthrough);
+
 /* Parse a block request from the bluegene.conf file */
 extern int parse_blockreq(void **dest, slurm_parser_enum_t type,
 			  const char *key, const char *value, 
diff --git a/src/plugins/select/bluegene/plugin/bg_job_place.c b/src/plugins/select/bluegene/plugin/bg_job_place.c
index 838b68d81f0a5884ae76336d7c1d9227e98e1acb..517421d9c042a1f38627d8175d277269d14a49c8 100644
--- a/src/plugins/select/bluegene/plugin/bg_job_place.c
+++ b/src/plugins/select/bluegene/plugin/bg_job_place.c
@@ -932,12 +932,15 @@ static int _find_best_block_match(List block_list,
 	*found_bg_record = NULL;
 	allow = 0;
 
+	memset(&request, 0, sizeof(ba_request_t));
+
 	for(i=0; i<BA_SYSTEM_DIMENSIONS; i++) 
 		request.start[i] = start[i];
 	
 	for(i=0; i<BA_SYSTEM_DIMENSIONS; i++) 
 		request.geometry[i] = req_geometry[i];
-	
+
+	request.deny_pass = (uint16_t)NO_VAL;
 	request.save_name = NULL;
 	request.elongate_geos = NULL;
 	request.size = target_size;
diff --git a/src/plugins/select/bluegene/plugin/bluegene.c b/src/plugins/select/bluegene/plugin/bluegene.c
index e81c3a9ce85b0bded3de2c381b65171a86fcc6f5..a7aa544ea783fcc769cddc0e3d2eaef5d7c9d9ce 100644
--- a/src/plugins/select/bluegene/plugin/bluegene.c
+++ b/src/plugins/select/bluegene/plugin/bluegene.c
@@ -86,6 +86,7 @@ uint16_t bluegene_quarter_ionode_cnt = 0;
 uint16_t bluegene_nodecard_node_cnt = 0;
 uint16_t bluegene_nodecard_ionode_cnt = 0;
 uint16_t bridge_api_verb = 0;
+
 bool agent_fini = false;
 time_t last_bg_update;
 pthread_mutex_t block_state_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -1287,6 +1288,20 @@ extern int read_bg_conf(void)
 		info("BridgeAPILogFile not configured in bluegene.conf");
 	else
 		_reopen_bridge_log();
+
+	if (s_p_get_string(&layout, "DenyPassthrough", tbl)) {
+		if(strstr(layout, "X")) 
+			ba_deny_pass |= PASS_DENY_X;
+		if(strstr(layout, "Y")) 
+			ba_deny_pass |= PASS_DENY_Y;
+		if(strstr(layout, "Z")) 
+			ba_deny_pass |= PASS_DENY_Z;
+		if(!strcasecmp(layout, "ALL")) 
+			ba_deny_pass |= PASS_DENY_ALL;
+		
+		xfree(layout);
+	}
+
 	if (!s_p_get_string(&layout, "LayoutMode", tbl)) {
 		info("Warning: LayoutMode was not specified in bluegene.conf "
 		     "defaulting to STATIC partitioning");
diff --git a/src/plugins/select/bluegene/plugin/bluegene.h b/src/plugins/select/bluegene/plugin/bluegene.h
index 7674c0e651d55719c9d8e6d8fcb7ba4119b9c7db..4c6b6ef941fa9e5e06f0291bf797e9bb5fe5160c 100644
--- a/src/plugins/select/bluegene/plugin/bluegene.h
+++ b/src/plugins/select/bluegene/plugin/bluegene.h
@@ -49,7 +49,6 @@ typedef enum bg_layout_type {
 	LAYOUT_DYNAMIC	/* slurm will make all blocks */
 } bg_layout_t;
 
-
 /* Global variables */
 #ifdef HAVE_BGL
 extern char *default_blrtsimage;
@@ -72,6 +71,7 @@ extern uint16_t bluegene_nodecard_node_cnt;
 extern uint16_t bluegene_nodecard_ionode_cnt;
 extern uint16_t bluegene_quarter_node_cnt;
 extern uint16_t bluegene_quarter_ionode_cnt;
+
 extern ba_system_t *ba_system_ptr;
 extern time_t last_bg_update;
 
diff --git a/src/smap/configure_functions.c b/src/smap/configure_functions.c
index fca5cf5ab5dc2e37ce392806c8b7b60416c712c1..693939d97048e7ca86d59f7949e3724f6f8022c4 100644
--- a/src/smap/configure_functions.c
+++ b/src/smap/configure_functions.c
@@ -98,9 +98,12 @@ static allocated_block_t *_make_request(ba_request_t *request)
 			  request->geometry[2]);
 		return NULL;
 	} else {
-		if(request->passthrough)
+		char *pass = ba_passthroughs_string(request->deny_pass);
+		if(pass) {
 			sprintf(error_string,"THERE ARE PASSTHROUGHS IN "
-				"THIS ALLOCATION!!!!!!!");
+				"THIS ALLOCATION DIM %s!!!!!!!", pass);
+			xfree(pass);
+		}
 		
 		allocated_block = (allocated_block_t *)xmalloc(
 			sizeof(allocated_block_t));
@@ -213,7 +216,7 @@ static int _create_allocation(char *com, List allocated_blocks)
 	request->size = 0;
 	request->small32 = 0;
 	request->small128 = 0;
-	request->passthrough = false;
+	request->deny_pass = 0;
 	request->avail_node_bitmap = NULL;
 
 	while(i<len) {				
@@ -1393,7 +1396,9 @@ void get_command(void)
 			_delete_allocated_blocks(allocated_blocks);
 			ba_fini();
 			exit(0);
-		} if (!strcmp(com, "quit")) {
+		} 
+		
+		if (!strcmp(com, "quit") || !strcmp(com, "\\q")) {
 			break;
 		} else if (!strncasecmp(com, "layout", 6)) {
 			_set_layout(com);
diff --git a/src/smap/job_functions.c b/src/smap/job_functions.c
index ec2cb5f1baa2fa592351acca93c19b73cbd87504..aca404349338006a54527d74ac77cb6198880235 100644
--- a/src/smap/job_functions.c
+++ b/src/smap/job_functions.c
@@ -195,7 +195,7 @@ static void _print_header_job(void)
 		main_xcord += 3;
 		mvwprintw(text_win, main_ycord,
 			  main_xcord, "JOBID");
-		main_xcord += 6;
+		main_xcord += 8;
 		mvwprintw(text_win, main_ycord,
 			  main_xcord, "PARTITION");
 		main_xcord += 10;
@@ -291,7 +291,7 @@ static int _print_text_job(job_info_t * job_ptr)
 		main_xcord += 3;
 		mvwprintw(text_win, main_ycord,
 			  main_xcord, "%d", job_ptr->job_id);
-		main_xcord += 6;
+		main_xcord += 8;
 		mvwprintw(text_win, main_ycord,
 			  main_xcord, "%.10s", job_ptr->partition);
 		main_xcord += 10;
@@ -378,7 +378,7 @@ static int _print_text_job(job_info_t * job_ptr)
 		main_xcord = 1;
 		main_ycord++;
 	} else {
-		printf("%5d ", job_ptr->job_id);
+		printf("%8d ", job_ptr->job_id);
 		printf("%9.9s ", job_ptr->partition);
 #ifdef HAVE_BG
 		printf("%16.16s ", 
diff --git a/src/sview/block_info.c b/src/sview/block_info.c
index 702ac98a99dbfef137078a7c9d1bbcdac69d6f8c..1ae5873e830ee625a5ac7a0a5f92f2194b9f674e 100644
--- a/src/sview/block_info.c
+++ b/src/sview/block_info.c
@@ -73,7 +73,9 @@ enum {
 	SORTID_RAMDISKIMAGE,
 	SORTID_STATE,
 	SORTID_UPDATED, 
+#ifdef HAVE_BGL
 	SORTID_USE,
+#endif
 	SORTID_USER,
 	SORTID_CNT
 };
diff --git a/src/sview/common.c b/src/sview/common.c
index aecce533c8eb4e4cbb8d62cd30fe30b52f6988bb..fa341ede4296df0f82d5445694b71081b602bc47 100644
--- a/src/sview/common.c
+++ b/src/sview/common.c
@@ -546,7 +546,7 @@ extern GtkTreeStore *create_treestore(GtkTreeView *tree_view,
 	
 	treestore = gtk_tree_store_newv(count, types);
 	if(!treestore) {
-		g_error("Can't great treestore.\n");
+		g_error("Can't create treestore.\n");
 		return NULL;
 	}