Index: uspace/srv/hid/input/ctl/kbdev.c
===================================================================
--- uspace/srv/hid/input/ctl/kbdev.c	(revision 9c0242b0b40302f92f8d0ac933b78ff30bf0348d)
+++ uspace/srv/hid/input/ctl/kbdev.c	(revision ecb692a289b0fbcb7662930ed99c42e844f9e108)
@@ -54,5 +54,5 @@
 static void kbdev_ctl_set_ind(kbd_dev_t *, unsigned);
 
-static void kbdev_callback_conn(ipc_callid_t, ipc_call_t *);
+static void kbdev_callback_conn(ipc_callid_t, ipc_call_t *, void *arg);
 
 kbd_ctl_ops_t kbdev_ctl = {
@@ -73,7 +73,4 @@
 	int fd;
 } kbdev_t;
-
-/** XXX Need to pass data from async_connect_to_me() to connection handler */
-static kbdev_t *unprotected_kbdev;
 
 static kbdev_t *kbdev_new(kbd_dev_t *kdev)
@@ -140,12 +137,5 @@
 	}
 
-	/*
-	 * XXX We need to pass kbdev to the connection handler. Since the
-	 * framework does not support this, use a global variable.
-	 * This needs to be fixed ASAP.
-	 */
-	unprotected_kbdev = kbdev;
-
-	rc = async_connect_to_me(exch, 0, 0, 0, kbdev_callback_conn);
+	rc = async_connect_to_me(exch, 0, 0, 0, kbdev_callback_conn, kbdev);
 	if (rc != EOK) {
 		printf(NAME ": Failed creating callback connection from '%s'.\n",
@@ -177,5 +167,5 @@
 }
 
-static void kbdev_callback_conn(ipc_callid_t iid, ipc_call_t *icall)
+static void kbdev_callback_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
 	kbdev_t *kbdev;
@@ -183,5 +173,6 @@
 	int type, key;
 
-	kbdev = unprotected_kbdev;
+	/* Kbdev device structure */
+	kbdev = arg;
 
 	while (true) {
