Index: uspace/srv/hid/display/client.c
===================================================================
--- uspace/srv/hid/display/client.c	(revision b3c185b62f0fa507e9d72bce104161ccdb4b3d57)
+++ uspace/srv/hid/display/client.c	(revision be15256dedca4e5ededf91be5e6ece8445b5a118)
@@ -34,5 +34,4 @@
  */
 
-#include <disp_srv.h>
 #include <errno.h>
 #include <stdlib.h>
@@ -44,9 +43,11 @@
  *
  * @param display Parent display
+ * @param cb Client callbacks
+ * @param cb_arg Callback argument
  * @param rclient Place to store pointer to new client.
  * @return EOK on success, ENOMEM if out of memory
  */
-errno_t ds_client_create(ds_display_t *display, display_srv_t *srv,
-    ds_client_t **rclient)
+errno_t ds_client_create(ds_display_t *display, ds_client_cb_t *cb,
+    void *cb_arg, ds_client_t **rclient)
 {
 	ds_client_t *client;
@@ -58,5 +59,6 @@
 	list_initialize(&client->windows);
 	prodcons_initialize(&client->events);
-	client->srv = srv;
+	client->cb = cb;
+	client->cb_arg = cb_arg;
 
 	ds_display_add_client(display, client);
@@ -195,5 +197,5 @@
 	/* Notify the client */
 	// TODO Do not send more than once until client drains the queue
-	display_srv_ev_pending(client->srv);
+	client->cb->ev_pending(client->cb_arg);
 
 	return EOK;
Index: uspace/srv/hid/display/client.h
===================================================================
--- uspace/srv/hid/display/client.h	(revision b3c185b62f0fa507e9d72bce104161ccdb4b3d57)
+++ uspace/srv/hid/display/client.h	(revision be15256dedca4e5ededf91be5e6ece8445b5a118)
@@ -37,9 +37,9 @@
 #define CLIENT_H
 
-#include <disp_srv.h>
 #include "types/display/client.h"
 #include "types/display/display.h"
 
-extern errno_t ds_client_create(ds_display_t *, display_srv_t *, ds_client_t **);
+extern errno_t ds_client_create(ds_display_t *, ds_client_cb_t *, void *,
+    ds_client_t **);
 extern void ds_client_destroy(ds_client_t *);
 extern errno_t ds_client_add_window(ds_client_t *, ds_window_t *);
Index: uspace/srv/hid/display/main.c
===================================================================
--- uspace/srv/hid/display/main.c	(revision b3c185b62f0fa507e9d72bce104161ccdb4b3d57)
+++ uspace/srv/hid/display/main.c	(revision be15256dedca4e5ededf91be5e6ece8445b5a118)
@@ -52,4 +52,9 @@
 
 static void display_client_conn(ipc_call_t *, void *);
+static void display_client_ev_pending(void *);
+
+static ds_client_cb_t display_client_cb = {
+	.ev_pending = display_client_ev_pending
+};
 
 static void display_kbd_event(void *arg, kbd_event_t *event)
@@ -59,4 +64,11 @@
 	printf("display_kbd_event\n");
 	ds_display_post_kbd_event(disp, event);
+}
+
+static void display_client_ev_pending(void *arg)
+{
+	display_srv_t *srv = (display_srv_t *) arg;
+	printf("display_client_ev_pending\n");
+	display_srv_ev_pending(srv);
 }
 
@@ -137,5 +149,5 @@
 	if (svc_id != 0) {
 		/* Create client object */
-		rc = ds_client_create(disp, &srv, &client);
+		rc = ds_client_create(disp, &display_client_cb, &srv, &client);
 		if (rc != EOK) {
 			async_answer_0(icall, ENOMEM);
Index: uspace/srv/hid/display/test/display.c
===================================================================
--- uspace/srv/hid/display/test/display.c	(revision b3c185b62f0fa507e9d72bce104161ccdb4b3d57)
+++ uspace/srv/hid/display/test/display.c	(revision be15256dedca4e5ededf91be5e6ece8445b5a118)
@@ -39,4 +39,16 @@
 PCUT_TEST_SUITE(display);
 
+static void test_ds_ev_pending(void *);
+
+static ds_client_cb_t test_ds_client_cb = {
+	.ev_pending = test_ds_ev_pending
+};
+
+static void test_ds_ev_pending(void *arg)
+{
+	printf("test_ds_ev_pending\n");
+}
+
+
 /** Display creation and destruction. */
 PCUT_TEST(display_create_destroy)
@@ -62,5 +74,5 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = ds_client_create(disp, NULL, &client);
+	rc = ds_client_create(disp, &test_ds_client_cb, NULL, &client);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
Index: uspace/srv/hid/display/test/window.c
===================================================================
--- uspace/srv/hid/display/test/window.c	(revision b3c185b62f0fa507e9d72bce104161ccdb4b3d57)
+++ uspace/srv/hid/display/test/window.c	(revision be15256dedca4e5ededf91be5e6ece8445b5a118)
@@ -47,5 +47,5 @@
 	errno_t rc;
 
-	rc = ds_client_create(NULL, NULL, &client);
+	rc = ds_client_create(NULL, NULL, NULL, &client);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
Index: uspace/srv/hid/display/types/display/client.h
===================================================================
--- uspace/srv/hid/display/types/display/client.h	(revision b3c185b62f0fa507e9d72bce104161ccdb4b3d57)
+++ uspace/srv/hid/display/types/display/client.h	(revision be15256dedca4e5ededf91be5e6ece8445b5a118)
@@ -39,7 +39,11 @@
 #include <adt/list.h>
 #include <adt/prodcons.h>
-#include <disp_srv.h>
 
 typedef sysarg_t ds_wnd_id_t;
+
+/** Display server client callbacks */
+typedef struct {
+	void (*ev_pending)(void *);
+} ds_client_cb_t;
 
 /** Display server client */
@@ -47,6 +51,8 @@
 	/** Parent display */
 	struct ds_display *display;
-	/** Display protocol per-connection structure */
-	display_srv_t *srv;
+	/** Callbacks */
+	ds_client_cb_t *cb;
+	/** Callback argument */
+	void *cb_arg;
 	/** Link to @c display->clients */
 	link_t lclients;
