Index: console/console.c
===================================================================
--- console/console.c	(revision d32af35c83dc913b2f1e3efb367b50592c865c31)
+++ console/console.c	(revision a8b2b5b22c8fcb4dc53e8ffa81d5e19da24080cb)
@@ -248,7 +248,6 @@
 		/* 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(1);
+		curs_visibility(conn->screenbuffer.is_cursor_visible);
 	} else {
-		curs_visibility(0);
 		clrscr();
 		
@@ -260,5 +259,5 @@
 			}
 		
-		curs_visibility(1);
+		curs_visibility(conn->screenbuffer.is_cursor_visible);
 	}
 }
@@ -381,4 +380,10 @@
 				set_style_col(arg1, arg2);
 				
+			break;
+		case CONSOLE_CURSOR_VISIBILITY:
+			arg1 = IPC_GET_ARG1(call);
+			connections[consnum].screenbuffer.is_cursor_visible = arg1;
+			if (consnum == active_console)
+				curs_visibility(arg1);
 			break;
 		case CONSOLE_GETCHAR:
@@ -394,5 +399,5 @@
 				continue;
 			};
-			keybuffer_pop(&(connections[consnum].keybuffer), (char *)&arg1);
+			keybuffer_pop(&(connections[consnum].keybuffer), (int *)&arg1);
 			
 			break;
@@ -465,6 +470,6 @@
 	async_new_connection(phonehash, 0, NULL, keyboard_events);
 	
-	sync_send_2(fb_info.phone, FB_CURSOR_GOTO, 0, 0, NULL, NULL); 
-	nsend_call(fb_info.phone, FB_CURSOR_VISIBILITY, 1); 
+	curs_goto(0,0);
+	curs_visibility(connections[active_console].screenbuffer.is_cursor_visible);
 
 	/* Register at NS */
Index: console/console.h
===================================================================
--- console/console.h	(revision d32af35c83dc913b2f1e3efb367b50592c865c31)
+++ console/console.h	(revision a8b2b5b22c8fcb4dc53e8ffa81d5e19da24080cb)
@@ -41,4 +41,5 @@
 #define CONSOLE_FLUSH		1031
 #define CONSOLE_SET_STYLE 	1032
+#define CONSOLE_CURSOR_VISIBILITY	1033
 
 #endif
Index: console/screenbuffer.c
===================================================================
--- console/screenbuffer.c	(revision d32af35c83dc913b2f1e3efb367b50592c865c31)
+++ console/screenbuffer.c	(revision a8b2b5b22c8fcb4dc53e8ffa81d5e19da24080cb)
@@ -61,4 +61,5 @@
 	scr->style.fg_color = DEFAULT_FOREGROUND;
 	scr->style.bg_color = DEFAULT_BACKGROUND;
+	scr->is_cursor_visible = 1;
 	
 	screenbuffer_clear(scr);
Index: console/screenbuffer.h
===================================================================
--- console/screenbuffer.h	(revision d32af35c83dc913b2f1e3efb367b50592c865c31)
+++ console/screenbuffer.h	(revision a8b2b5b22c8fcb4dc53e8ffa81d5e19da24080cb)
@@ -53,4 +53,5 @@
 	style_t style;				/**< Current style */
 	unsigned int top_line;			/**< Points to buffer[][] line that will be printed at screen as the first line */
+	unsigned char is_cursor_visible;	/**< Cursor state - default is visible */
 } screenbuffer_t;
 
Index: tetris/screen.c
===================================================================
--- tetris/screen.c	(revision d32af35c83dc913b2f1e3efb367b50592c865c31)
+++ tetris/screen.c	(revision a8b2b5b22c8fcb4dc53e8ffa81d5e19da24080cb)
@@ -114,4 +114,5 @@
 {
 	con_phone = get_fd_phone(1);
+	send_call(con_phone, CONSOLE_CURSOR_VISIBILITY, 0);
 	resume_normal();
 	scr_clear();
