Index: console/console.c
===================================================================
--- console/console.c	(revision ec9623de0b1b438d520d44a504fbbe2548952a27)
+++ console/console.c	(revision 6d5005cb0471d23184bf5c73dc7f5a8c423d09e5)
@@ -206,4 +206,6 @@
 	static int console_pixmap = -1;
 	int i, j;
+	keyfield_t *field;
+	style_t *style;
 	char c;
 
@@ -242,4 +244,6 @@
 	set_style(&conn->screenbuffer.style);
 	curs_goto(conn->screenbuffer.position_y, conn->screenbuffer.position_x);
+	curs_visibility(0);
+	
 	if (interbuffer) {
 		for (i = 0; i < conn->screenbuffer.size_x; i++)
@@ -247,18 +251,26 @@
 				interbuffer[i + j*conn->screenbuffer.size_x] = *get_field_at(&(conn->screenbuffer),i, j);
 		/* This call can preempt, but we are already at the end */
-		sync_send_2(fb_info.phone, FB_DRAW_TEXT_DATA, 0, 0, NULL, NULL);		
-		curs_visibility(conn->screenbuffer.is_cursor_visible);
-	} else {
+		j = sync_send_2(fb_info.phone, FB_DRAW_TEXT_DATA, 0, 0, NULL, NULL);		
+	};
+	
+	if ((!interbuffer) || (j != 0)){
+		set_style(&conn->screenbuffer.style);
 		clrscr();
-		
-		for (i = 0; i < conn->screenbuffer.size_x; i++)
-			for (j = 0; j < conn->screenbuffer.size_y; j++) {
-				c = get_field_at(&(conn->screenbuffer),i, j)->character;
-				if (c && c != ' ')
-					prtchr(c, j, i);
+		style = &conn->screenbuffer.style;
+
+		for (j = 0; j < conn->screenbuffer.size_y; j++) 
+			for (i = 0; i < conn->screenbuffer.size_x; i++) {
+				field = get_field_at(&(conn->screenbuffer),i, j);
+				if (!style_same(*style, field->style))
+					set_style(&field->style);
+				style = &field->style;
+				if ((field->character == ' ') && (style_same(field->style, conn->screenbuffer.style)))
+					continue;
+
+				prtchr(field->character, j, i);
 			}
-		
-		curs_visibility(conn->screenbuffer.is_cursor_visible);
-	}
+	}
+	
+	curs_visibility(conn->screenbuffer.is_cursor_visible);
 }
 
