Index: sys/dev/wscons/wsdisplay.c
===================================================================
RCS file: /cvsroot/src/sys/dev/wscons/wsdisplay.c,v
retrieving revision 1.135
diff -u -r1.135 wsdisplay.c
--- sys/dev/wscons/wsdisplay.c	2 Feb 2012 13:11:25 -0000	1.135
+++ sys/dev/wscons/wsdisplay.c	20 Jan 2014 19:36:46 -0000
@@ -884,6 +884,15 @@
 	wsdisplay_console_initted = 1;
 }
 
+void
+wsdisplay_cndetach(void)
+{
+	KASSERT(wsdisplay_console_initted == 2);
+
+	cn_tab = NULL;
+	wsdisplay_console_initted = 0;
+}
+
 /*
  * Tty and cdevsw functions.
  */
Index: sys/dev/wscons/wsdisplay_vcons.c
===================================================================
RCS file: /cvsroot/src/sys/dev/wscons/wsdisplay_vcons.c,v
retrieving revision 1.29
diff -u -r1.29 wsdisplay_vcons.c
--- sys/dev/wscons/wsdisplay_vcons.c	15 Sep 2013 16:12:00 -0000	1.29
+++ sys/dev/wscons/wsdisplay_vcons.c	20 Jan 2014 19:36:46 -0000
@@ -1262,10 +1262,15 @@
 	struct vcons_screen *scr = vd->active;
 	unsigned int dirty;
 
-	if (scr && vd->use_intr == 1) {
+	if (scr && vd->use_intr) {
 		if (!SCREEN_IS_BUSY(scr)) {
 			dirty = atomic_swap_uint(&scr->scr_dirty, 0);
-			if (dirty > 0) {
+			if (vd->use_intr == 2) {
+				if ((scr->scr_flags & VCONS_NO_REDRAW) == 0) {
+					vd->use_intr = 1;
+					vcons_redraw_screen(scr);
+				}
+			} else if (dirty > 0) {
 				if ((scr->scr_flags & VCONS_NO_REDRAW) == 0)
 					vcons_update_screen(scr);
 			}
@@ -1280,7 +1285,7 @@
 {
 	/* the 'dev' arg we pass to config_interrupts isn't a device_t */
 	struct vcons_data *vd = (struct vcons_data *)dev;
-	vd->use_intr = 1;
+	vd->use_intr = 2;
 	callout_schedule(&vd->intr, mstohz(33));
 }
 #endif /* VCONS_DRAW_INTR */
@@ -1309,7 +1314,7 @@
 	if (!vd->intr_valid)
 		return;
 
-	vd->use_intr = 1;
+	vd->use_intr = 2;
 	if (scr)
 		atomic_inc_uint(&scr->scr_dirty);
 #endif
Index: sys/dev/wscons/wsdisplayvar.h
===================================================================
RCS file: /cvsroot/src/sys/dev/wscons/wsdisplayvar.h,v
retrieving revision 1.50
diff -u -r1.50 wsdisplayvar.h
--- sys/dev/wscons/wsdisplayvar.h	31 Jan 2013 10:57:30 -0000	1.50
+++ sys/dev/wscons/wsdisplayvar.h	20 Jan 2014 19:36:47 -0000
@@ -163,6 +163,7 @@
             long);
 void	wsdisplay_preattach(const struct wsscreen_descr *, void *, int, int,
             long);
+void	wsdisplay_cndetach(void);
 
 int	wsdisplaydevprint(void *, const char *);
 int	wsemuldisplaydevprint(void *, const char *);
