Index: uspace/app/virtusbkbd/Makefile
===================================================================
--- uspace/app/virtusbkbd/Makefile	(revision bc9a629fec035ed4a62c13a00781814283dc523f)
+++ uspace/app/virtusbkbd/Makefile	(revision b8100da862d7faddeef79335833e685b1bc3b497)
@@ -31,6 +31,8 @@
 # (it is really annoying to write long names)
 BINARY = vuk
-LIBS = $(LIBUSB_PREFIX)/libusb.a
+
+LIBS = $(LIBUSB_PREFIX)/libusb.a $(LIBUSBVIRT_PREFIX)/libusbvirt.a
 EXTRA_CFLAGS = -I$(LIB_PREFIX)
+
 SOURCES = \
 	virtusbkbd.c
Index: uspace/app/virtusbkbd/virtusbkbd.c
===================================================================
--- uspace/app/virtusbkbd/virtusbkbd.c	(revision bc9a629fec035ed4a62c13a00781814283dc523f)
+++ uspace/app/virtusbkbd/virtusbkbd.c	(revision b8100da862d7faddeef79335833e685b1bc3b497)
@@ -46,5 +46,7 @@
 
 #include <usb/hcd.h>
-#include <usb/virtdev.h>
+#include <usbvirt/device.h>
+#include <usbvirt/hub.h>
+#include <usbvirt/ids.h>
 
 #define LOOPS 5
@@ -59,4 +61,28 @@
 	(printf("%s: %s" fmt "\n", NAME, _QUOTEME(cmd), __VA_ARGS__), cmd(__VA_ARGS__))
 
+static int on_incoming_data(struct usbvirt_device *dev,
+    usb_endpoint_t endpoint, void *buffer, size_t size)
+{
+	printf("%s: ignoring incomming data to endpoint %d\n", NAME, endpoint);
+	
+	return EOK;
+}
+
+/** Keyboard callbacks.
+ * We abuse the fact that static variables are zero-filled.
+ */
+static usbvirt_device_ops_t keyboard_ops = {
+	.on_data = on_incoming_data
+};
+
+/** Keyboard device.
+ * Rest of the items will be initialized later.
+ */
+static usbvirt_device_t keyboard_dev = {
+	.ops = &keyboard_ops,
+	.device_id_ = USBVIRT_DEV_KEYBOARD_ID
+};
+
+
 static void fibril_sleep(size_t sec)
 {
@@ -66,21 +92,13 @@
 }
 
-static void on_data_from_host(usb_endpoint_t endpoint, void *buffer, size_t len)
-{
-	printf("%s: ignoring incomming data to endpoint %d\n", NAME, endpoint);
-}
 
 int main(int argc, char * argv[])
 {
-	int vhcd_phone = usb_virtdev_connect(DEV_HCD_NAME,
-	    USB_VIRTDEV_KEYBOARD_ID, on_data_from_host);
-	
-	if (vhcd_phone < 0) {
+	int rc = usbvirt_connect(&keyboard_dev, DEV_HCD_NAME);
+	if (rc != EOK) {
 		printf("%s: Unable to start comunication with VHCD at usb://%s (%s).\n",
-		    NAME, DEV_HCD_NAME, str_error(vhcd_phone));
-		return vhcd_phone;
+		    NAME, DEV_HCD_NAME, str_error(rc));
+		return rc;
 	}
-	
-	
 	
 	size_t i;
@@ -94,5 +112,5 @@
 		
 		printf("%s: Will send data to VHCD...\n", NAME);
-		int rc = usb_virtdev_data_to_host(vhcd_phone, 0, data, size);
+		int rc = keyboard_dev.send_data(&keyboard_dev, 0, data, size);
 		printf("%s:   ...data sent (%s).\n", NAME, str_error(rc));
 	}
@@ -101,5 +119,5 @@
 	printf("%s: Terminating...\n", NAME);
 	
-	ipc_hangup(vhcd_phone);
+	usbvirt_disconnect();
 	
 	return 0;
