Index: kernel/arch/ia32/include/drivers/vesa.h
===================================================================
--- kernel/arch/ia32/include/drivers/vesa.h	(revision 19490cea4251de33ed19741087be0c03ff4d2a4f)
+++ kernel/arch/ia32/include/drivers/vesa.h	(revision a71c158ef82122abfeef92f86344709bbad55d17)
@@ -36,7 +36,7 @@
 #define KERN_ia32_VESA_H_
 
-extern int vesa_present(void);
-extern void vesa_redraw(void);
-extern void vesa_init(void);
+#include <arch/types.h>
+
+extern bool vesa_init(void);
 
 #endif
Index: kernel/arch/ia32/src/drivers/vesa.c
===================================================================
--- kernel/arch/ia32/src/drivers/vesa.c	(revision 19490cea4251de33ed19741087be0c03ff4d2a4f)
+++ kernel/arch/ia32/src/drivers/vesa.c	(revision a71c158ef82122abfeef92f86344709bbad55d17)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup ia32	
+/** @addtogroup ia32
  * @{
  */
@@ -40,4 +40,6 @@
 #include <genarch/fb/visuals.h>
 #include <arch/drivers/vesa.h>
+#include <console/chardev.h>
+#include <console/console.h>
 #include <putchar.h>
 #include <mm/page.h>
@@ -66,15 +68,10 @@
 uint8_t vesa_blue_pos;
 
-int vesa_present(void)
+bool vesa_init(void)
 {
-	if ((vesa_width != 0xffff) && (vesa_height != 0xffff))
-		return true;
+	if ((vesa_width == 0xffff) || (vesa_height == 0xffff))
+		return false;
 	
-	return false;
-}
-
-void vesa_init(void)
-{
-	unsigned int visual;
+	visual_t visual;
 	
 	switch (vesa_bpp) {
@@ -97,5 +94,6 @@
 		break;
 	default:
-		panic("Unsupported bits per pixel.");
+		LOG("Unsupported bits per pixel.");
+		return false;
 	}
 	
@@ -108,10 +106,11 @@
 		.visual = visual,
 	};
-	fb_init(&vesa_props);
-}
-
-void vesa_redraw(void)
-{
-	fb_redraw();
+	
+	outdev_t *fbdev = fb_init(&vesa_props);
+	if (!fbdev)
+		return false;
+	
+	stdout_wire(fbdev);
+	return true;
 }
 
Index: kernel/arch/ia32/src/ia32.c
===================================================================
--- kernel/arch/ia32/src/ia32.c	(revision 19490cea4251de33ed19741087be0c03ff4d2a4f)
+++ kernel/arch/ia32/src/ia32.c	(revision a71c158ef82122abfeef92f86344709bbad55d17)
@@ -112,13 +112,18 @@
 		i8254_init();
 		
+#if (defined(CONFIG_FB) || defined(CONFIG_EGA))
+		bool vesa = false;
+#endif
+		
 #ifdef CONFIG_FB
-		if (vesa_present())
-			vesa_init();
-		else
-#endif
+		vesa = vesa_init();
+#endif
+		
 #ifdef CONFIG_EGA
-			ega_init(EGA_BASE, EGA_VIDEORAM);  /* video */
-#else
-			{}
+		if (!vesa) {
+			outdev_t *egadev = ega_init(EGA_BASE, EGA_VIDEORAM);
+			if (egadev)
+				stdout_wire(egadev);
+		}
 #endif
 		
@@ -201,30 +206,6 @@
 	THREAD->arch.tls = addr;
 	set_tls_desc(addr);
-
+	
 	return 0;
-}
-
-/** Acquire console back for kernel
- *
- */
-void arch_grab_console(void)
-{
-#ifdef CONFIG_FB
-	if (vesa_present())
-		vesa_redraw();
-	else
-#endif
-#ifdef CONFIG_EGA
-		ega_redraw();
-#else
-		{}
-#endif
-}
-
-/** Return console to userspace
- *
- */
-void arch_release_console(void)
-{
 }
 
