diff --git a/NEWS b/NEWS
index 12f0e6c952d456fb13383220bdddd7f6891db848..30ad27806a4b88f9170d476b0025e05d997c6060 100644
--- a/NEWS
+++ b/NEWS
@@ -109,6 +109,7 @@ documents those changes that are of interest to users and admins.
  -- BGQ - Fix for printing realtime server debug correctly.
  -- BGQ - Cleaner handling of cnode failures when reported through the runjob
     interface instead of through the normal method.
+ -- smap - spread node information across multiple lines for larger systems.
 
 * Changes in SLURM 2.4.3
 ========================
diff --git a/src/smap/grid_functions.c b/src/smap/grid_functions.c
index 2f0fe3ae9900b8931db54f7ace6b4101404bab66..e02af52a204ba296f65975c43d05dedac1af47e9 100644
--- a/src/smap/grid_functions.c
+++ b/src/smap/grid_functions.c
@@ -164,7 +164,7 @@ extern int set_grid_bg(int *start, int *end, int count, int set)
 }
 
 /* Build the smap_system_ptr structure from the node records */
-extern void init_grid(node_info_msg_t *node_info_ptr)
+extern void init_grid(node_info_msg_t *node_info_ptr, int cols)
 {
 	int i, j, len;
 	int default_y_offset = 0;
@@ -265,11 +265,13 @@ extern void init_grid(node_info_msg_t *node_info_ptr)
 		default_y_offset = (dim_size[3] * dim_size[2]) +
 				   (dim_size[2] - dim_size[3]);
 	}
+	if (cols == 0)
+		cols = 80;
 	for (i = 0; i < smap_system_ptr->node_cnt; i++) {
 		smap_node = smap_system_ptr->grid[i];
 		if (params.cluster_dims == 1) {
-			smap_node->grid_xcord = i + 1;
-			smap_node->grid_ycord = 1;
+			smap_node->grid_xcord = (i % cols) + 1;
+			smap_node->grid_ycord = (i / cols) + 1;
 		} else if (params.cluster_dims == 2) {
 			smap_node->grid_xcord = smap_node->coord[0] + 1;
 			smap_node->grid_ycord =
diff --git a/src/smap/smap.c b/src/smap/smap.c
index b4126299b1b56efb799f4ef14f2f98101bfbf6bf..03dd4e760a7e6ae277e40a3642d5485c4b86c1ec 100644
--- a/src/smap/smap.c
+++ b/src/smap/smap.c
@@ -139,10 +139,9 @@ int main(int argc, char *argv[])
 	if (!params.commandline) {
 		int check_width = min_screen_width;
 
-		init_grid(new_node_ptr);
-
-		signal(SIGWINCH, (void (*)(int))_resize_handler);
 		initscr();
+		init_grid(new_node_ptr, COLS);
+		signal(SIGWINCH, (void (*)(int))_resize_handler);
 
 		if (params.cluster_dims == 4) {
 			height = dim_size[2] * dim_size[3] + dim_size[2] + 3;
diff --git a/src/smap/smap.h b/src/smap/smap.h
index 7839dcae482f265322997863b1e60d9220487963..e887f10cc3a4a6cfecc01a62a3964da32b83f369 100644
--- a/src/smap/smap.h
+++ b/src/smap/smap.h
@@ -182,7 +182,7 @@ extern void parse_command_line(int argc, char *argv[]);
 extern smap_system_t *smap_system_ptr;
 extern int quiet_flag;
 
-extern void init_grid(node_info_msg_t *node_info_ptr);
+extern void init_grid(node_info_msg_t *node_info_ptr, int cols);
 extern void update_grid(node_info_msg_t *node_info_ptr);
 extern void clear_grid(void);
 extern void free_grid(void);