Index: kernel/genarch/src/fb/fb.c
===================================================================
--- kernel/genarch/src/fb/fb.c	(revision 98895c5cde22214bf8348ead154e445dbb032065)
+++ kernel/genarch/src/fb/fb.c	(revision 726ef8495cfc44e27adcbbbbeee254d1b5a82dfb)
@@ -48,4 +48,5 @@
 #include <bitops.h>
 #include <print.h>
+#include <string.h>
 #include <ddi/ddi.h>
 #include <arch/types.h>
@@ -79,6 +80,4 @@
 #define FG_COLOR     0xffff00
 #define INV_COLOR    0xaaaaaa
-
-#define CURSOR       0x2588
 
 #define RED(x, bits)         ((x >> (8 + 8 + 8 - bits)) & ((1 << bits) - 1))
@@ -201,5 +200,5 @@
  *
  */
-static void glyph_draw(uint16_t glyph, unsigned int col, unsigned int row, bool silent)
+static void glyph_draw(uint16_t glyph, unsigned int col, unsigned int row, bool silent, bool overlay)
 {
 	unsigned int x = COL2X(col);
@@ -210,5 +209,6 @@
 		logo_hide(silent);
 	
-	backbuf[BB_POS(col, row)] = glyph;
+	if (!overlay)
+		backbuf[BB_POS(col, row)] = glyph;
 	
 	if (!silent) {
@@ -270,5 +270,8 @@
 static void cursor_put(bool silent)
 {
-	glyph_draw(fb_font_glyph(CURSOR), position % cols, position / cols, silent);
+	unsigned int col = position % cols;
+	unsigned int row = position / cols;
+	
+	glyph_draw(fb_font_glyph(U_CURSOR), col, row, silent, true);
 }
 
@@ -276,5 +279,8 @@
 static void cursor_remove(bool silent)
 {
-	glyph_draw(fb_font_glyph(0), position % cols, position / cols, silent);
+	unsigned int col = position % cols;
+	unsigned int row = position / cols;
+	
+	glyph_draw(backbuf[BB_POS(col, row)], col, row, silent, true);
 }
 
@@ -308,5 +314,5 @@
 		do {
 			glyph_draw(fb_font_glyph(' '), position % cols,
-			    position / cols, silent);
+			    position / cols, silent, false);
 			position++;
 		} while ((position % 8) && (position < cols * rows));
@@ -314,5 +320,5 @@
 	default:
 		glyph_draw(fb_font_glyph(ch), position % cols,
-		    position / cols, silent);
+		    position / cols, silent, false);
 		position++;
 	}
