Index: uspace/srv/hid/display/client.c
===================================================================
--- uspace/srv/hid/display/client.c	(revision 959b7ecef4838bb0b41711a3b77e4f3d3559af5c)
+++ uspace/srv/hid/display/client.c	(revision e422ff67bc3bc55a2253d0ddb4c3e0ac0c052b65)
@@ -34,4 +34,5 @@
  */
 
+#include <adt/list.h>
 #include <errno.h>
 #include <stdlib.h>
@@ -58,5 +59,5 @@
 
 	list_initialize(&client->windows);
-	prodcons_initialize(&client->events);
+	list_initialize(&client->events);
 	client->cb = cb;
 	client->cb_arg = cb_arg;
@@ -162,7 +163,7 @@
 /** Get next event from client event queue.
  *
- * This function blocks until an event is available.
- *
- * @param wnd Window
+ * @param client Client
+ * @param ewindow Place to store pointer to window receiving the event
+ * @param event Place to store event
  * @return Graphic context
  */
@@ -173,5 +174,7 @@
 	ds_window_ev_t *wevent;
 
-	link = prodcons_consume(&client->events);
+	link = list_first(&client->events);
+	if (link == NULL)
+		return ENOENT;
 	wevent = list_get_instance(link, ds_window_ev_t, levents);
 
@@ -182,4 +185,12 @@
 }
 
+/** Post keyboard event to the client's message queue.
+ *
+ * @param client Client
+ * @param ewindow Window that the message is targetted to
+ * @param event Event
+ *
+ * @return EOK on success or an error code
+ */
 errno_t ds_client_post_kbd_event(ds_client_t *client, ds_window_t *ewindow,
     kbd_event_t *event)
@@ -193,5 +204,5 @@
 	wevent->window = ewindow;
 	wevent->event.kbd_event = *event;
-	prodcons_produce(&client->events, &wevent->levents);
+	list_append(&wevent->levents, &client->events);
 
 	/* Notify the client */
Index: uspace/srv/hid/display/test/client.c
===================================================================
--- uspace/srv/hid/display/test/client.c	(revision 959b7ecef4838bb0b41711a3b77e4f3d3559af5c)
+++ uspace/srv/hid/display/test/client.c	(revision e422ff67bc3bc55a2253d0ddb4c3e0ac0c052b65)
@@ -180,9 +180,6 @@
 	PCUT_ASSERT_FALSE(called_cb);
 
-#if 0
-	// XXX Forgot to change ds_client_get_event not to block
 	rc = ds_client_get_event(client, &rwindow, &revent);
 	PCUT_ASSERT_ERRNO_VAL(ENOENT, rc);
-#endif
 
 	rc = ds_client_post_kbd_event(client, wnd, &event);
Index: uspace/srv/hid/display/types/display/client.h
===================================================================
--- uspace/srv/hid/display/types/display/client.h	(revision 959b7ecef4838bb0b41711a3b77e4f3d3559af5c)
+++ uspace/srv/hid/display/types/display/client.h	(revision e422ff67bc3bc55a2253d0ddb4c3e0ac0c052b65)
@@ -38,5 +38,4 @@
 
 #include <adt/list.h>
-#include <adt/prodcons.h>
 
 typedef sysarg_t ds_wnd_id_t;
@@ -60,5 +59,5 @@
 	list_t windows;
 	/** Event queue (of ds_window_ev_t) */
-	prodcons_t events;
+	list_t events;
 } ds_client_t;
 
