Index: uspace/app/terminal/terminal.c
===================================================================
--- uspace/app/terminal/terminal.c	(revision b2c9e42c92bb4e1fad2a740a731e7d1095ca66e6)
+++ uspace/app/terminal/terminal.c	(revision e273e9e0486678e6c751938a061147ebd7d76110)
@@ -403,5 +403,7 @@
 		if (pos < size) {
 			link_t *link = prodcons_consume(&term->input_pc);
-			cons_event_t *event = list_get_instance(link, cons_event_t, link);
+			terminal_event_t *qevent = list_get_instance(link,
+			    terminal_event_t, link);
+			cons_event_t *event = &qevent->ev;
 
 			/* Accept key presses of printable chars only. */
@@ -417,5 +419,5 @@
 			}
 
-			free(event);
+			free(qevent);
 		}
 	}
@@ -635,7 +637,7 @@
 	terminal_t *term = srv_to_terminal(srv);
 	link_t *link = prodcons_consume(&term->input_pc);
-	cons_event_t *ev = list_get_instance(link, cons_event_t, link);
-
-	*event = *ev;
+	terminal_event_t *ev = list_get_instance(link, terminal_event_t, link);
+
+	*event = ev->ev;
 	free(ev);
 	return EOK;
@@ -823,10 +825,10 @@
 {
 	/* Got key press/release event */
-	cons_event_t *event =
-	    (cons_event_t *) malloc(sizeof(cons_event_t));
+	terminal_event_t *event =
+	    (terminal_event_t *) malloc(sizeof(terminal_event_t));
 	if (event == NULL)
 		return;
 
-	*event = *ev;
+	event->ev = *ev;
 	link_initialize(&event->link);
 
Index: uspace/app/terminal/terminal.h
===================================================================
--- uspace/app/terminal/terminal.h	(revision b2c9e42c92bb4e1fad2a740a731e7d1095ca66e6)
+++ uspace/app/terminal/terminal.h	(revision e273e9e0486678e6c751938a061147ebd7d76110)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * Copyright (c) 2012 Petr Koupy
  * All rights reserved.
@@ -46,4 +46,5 @@
 #include <gfx/coord.h>
 #include <io/con_srv.h>
+#include <io/cons_event.h>
 #include <loc.h>
 #include <stdatomic.h>
@@ -102,4 +103,12 @@
 } terminal_t;
 
+/** Terminal event */
+typedef struct {
+	/** Link to list of events */
+	link_t link;
+	/** Console event */
+	cons_event_t ev;
+} terminal_event_t;
+
 extern errno_t terminal_create(const char *, sysarg_t, sysarg_t,
     terminal_flags_t, const char *, terminal_t **);
Index: uspace/lib/console/include/io/cons_event.h
===================================================================
--- uspace/lib/console/include/io/cons_event.h	(revision b2c9e42c92bb4e1fad2a740a731e7d1095ca66e6)
+++ uspace/lib/console/include/io/cons_event.h	(revision e273e9e0486678e6c751938a061147ebd7d76110)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -36,5 +36,4 @@
 #define _LIBCONSOLE_IO_CONS_EVENT_H_
 
-#include <adt/list.h>
 #include <io/kbd_event.h>
 #include <io/pos_event.h>
@@ -51,7 +50,4 @@
 /** Console event structure. */
 typedef struct {
-	/** List handle */
-	link_t link;
-
 	/** Event type */
 	cons_event_type_t type;
Index: uspace/srv/hid/console/console.c
===================================================================
--- uspace/srv/hid/console/console.c	(revision b2c9e42c92bb4e1fad2a740a731e7d1095ca66e6)
+++ uspace/srv/hid/console/console.c	(revision e273e9e0486678e6c751938a061147ebd7d76110)
@@ -334,10 +334,10 @@
 {
 	/* Got key press/release event */
-	cons_event_t *event =
-	    (cons_event_t *) malloc(sizeof(cons_event_t));
+	cons_qevent_t *event =
+	    (cons_qevent_t *) malloc(sizeof(cons_qevent_t));
 	if (event == NULL)
 		return;
 
-	*event = *ev;
+	event->ev = *ev;
 	link_initialize(&event->link);
 
@@ -556,6 +556,7 @@
 		if (pos < size) {
 			link_t *link = prodcons_consume(&cons->input_pc);
-			cons_event_t *event = list_get_instance(link,
-			    cons_event_t, link);
+			cons_qevent_t *qevent = list_get_instance(link,
+			    cons_qevent_t, link);
+			cons_event_t *event = &qevent->ev;
 
 			/* Accept key presses of printable chars only. */
@@ -567,5 +568,5 @@
 			}
 
-			free(event);
+			free(qevent);
 		}
 	}
@@ -703,8 +704,8 @@
 	console_t *cons = srv_to_console(srv);
 	link_t *link = prodcons_consume(&cons->input_pc);
-	cons_event_t *cevent = list_get_instance(link, cons_event_t, link);
-
-	*event = *cevent;
-	free(cevent);
+	cons_qevent_t *qevent = list_get_instance(link, cons_qevent_t, link);
+
+	*event = qevent->ev;
+	free(qevent);
 	return EOK;
 }
Index: uspace/srv/hid/console/console.h
===================================================================
--- uspace/srv/hid/console/console.h	(revision b2c9e42c92bb4e1fad2a740a731e7d1095ca66e6)
+++ uspace/srv/hid/console/console.h	(revision e273e9e0486678e6c751938a061147ebd7d76110)
@@ -1,3 +1,4 @@
 /*
+ * Copyright (c) 2024 Jiri Svoboda
  * Copyright (c) 2006 Josef Cejka
  * All rights reserved.
@@ -36,5 +37,16 @@
 #define CONSOLE_CONSOLE_H__
 
+#include <adt/prodcons.h>
+#include <io/cons_event.h>
+
 #define CONSOLE_COUNT   11
+
+/** Console event queue entry */
+typedef struct {
+	/** Link to list of events */
+	link_t link;
+	/** Console event */
+	cons_event_t ev;
+} cons_qevent_t;
 
 #endif
Index: uspace/srv/hid/output/output.h
===================================================================
--- uspace/srv/hid/output/output.h	(revision b2c9e42c92bb4e1fad2a740a731e7d1095ca66e6)
+++ uspace/srv/hid/output/output.h	(revision e273e9e0486678e6c751938a061147ebd7d76110)
@@ -1,3 +1,4 @@
 /*
+ * Copyright (c) 2024 Jiri Svoboda
  * Copyright (c) 2011 Martin Decky
  * All rights reserved.
@@ -34,4 +35,5 @@
 #define OUTPUT_OUTPUT_H_
 
+#include <adt/list.h>
 #include <stdbool.h>
 #include <loc.h>
