diff --git a/grid.c b/grid.c
index 2955e8b..ff06070 100644
--- a/grid.c
+++ b/grid.c
@@ -592,6 +592,7 @@ grid_string_cells(struct grid *gd, u_int px, u_int py, u_int nx,
 	char			*buf, code[128];
 	size_t			 len, off, size, codelen;
 	u_int			 xx;
+	const struct grid_line	*gl;
 
 	GRID_DEBUG(gd, "px=%u, py=%u, nx=%u", px, py, nx);
 
@@ -604,8 +605,11 @@ grid_string_cells(struct grid *gd, u_int px, u_int py, u_int nx,
 	buf = xmalloc(len);
 	off = 0;
 
+	gl = grid_peek_line(gd, py);
 	for (xx = px; xx < px + nx; xx++) {
-		gc = grid_peek_cell(gd, xx, py);
+	    	if (gl == NULL || xx >= gl->cellsize)
+		    	break;
+		gc = &gl->celldata[xx];
 		if (gc->flags & GRID_FLAG_PADDING)
 			continue;
 		grid_cell_get(gc, &ud);
