Index: kernel/genarch/src/drivers/ega/ega.c
===================================================================
--- kernel/genarch/src/drivers/ega/ega.c	(revision d1582b502edcb7bfeef771a2019538f265e7e27c)
+++ kernel/genarch/src/drivers/ega/ega.c	(revision 26853ebcc36f8ada7a3516d36987217d14f1a3c3)
@@ -568,15 +568,33 @@
 }
 
-static void ega_redraw(outdev_t *dev)
-{
-	ega_instance_t *instance = (ega_instance_t *) dev->data;
-
-	irq_spinlock_lock(&instance->lock, true);
-
+static void ega_redraw_internal(ega_instance_t *instance)
+{
 	memcpy(instance->addr, instance->backbuf, EGA_VRAM_SIZE);
 	ega_move_cursor(instance);
 	ega_show_cursor(instance);
-
+}
+
+static void ega_redraw(outdev_t *dev)
+{
+	ega_instance_t *instance = (ega_instance_t *) dev->data;
+
+	irq_spinlock_lock(&instance->lock, true);
+	ega_redraw_internal(instance);
 	irq_spinlock_unlock(&instance->lock, true);
+}
+
+/** EGA was mapped or unmapped.
+ *
+ * @param arg EGA instance
+ */
+static void ega_mapped_changed(void *arg)
+{
+	ega_instance_t *instance = (ega_instance_t *) arg;
+
+	if (!instance->parea.mapped) {
+		irq_spinlock_lock(&instance->lock, true);
+		ega_redraw_internal(instance);
+		irq_spinlock_unlock(&instance->lock, true);
+	}
 }
 
@@ -621,4 +639,6 @@
 	instance->parea.unpriv = false;
 	instance->parea.mapped = false;
+	instance->parea.mapped_changed = ega_mapped_changed;
+	instance->parea.arg = (void *) instance;
 	ddi_parea_register(&instance->parea);
 
