Index: uspace/srv/hid/display/display.c
===================================================================
--- uspace/srv/hid/display/display.c	(revision 4e7b0ad8c2c453472fec59e7c0bfc7b56f327abc)
+++ uspace/srv/hid/display/display.c	(revision df54aa85251aae893ebd928df03d3714b25ea049)
@@ -644,7 +644,10 @@
 {
 	errno_t rc;
+	gfx_rect_t old_disp_rect;
 
 	assert(ddev->display == NULL);
 	assert(!link_used(&ddev->lddevs));
+
+	old_disp_rect = disp->rect;
 
 	ddev->display = disp;
@@ -658,14 +661,12 @@
 		/* Create cloning GC */
 		rc = ds_clonegc_create(ddev->gc, &disp->fbgc);
-		if (rc != EOK) {
-			// XXX Remove output
-			return ENOMEM;
-		}
+		if (rc != EOK)
+			goto error;
 
 		/* Allocate backbuffer */
 		rc = ds_display_alloc_backbuf(disp);
 		if (rc != EOK) {
-			// XXX Remove output
-			// XXX Delete clone GC
+			ds_clonegc_delete(disp->fbgc);
+			disp->fbgc = NULL;
 			goto error;
 		}
@@ -681,8 +682,5 @@
 	return EOK;
 error:
-	disp->rect.p0.x = 0;
-	disp->rect.p0.y = 0;
-	disp->rect.p1.x = 0;
-	disp->rect.p1.y = 0;
+	disp->rect = old_disp_rect;
 	list_remove(&ddev->lddevs);
 	return rc;
