Index: uspace/drv/vhc/conndev.c
===================================================================
--- uspace/drv/vhc/conndev.c	(revision 79ae36ddc409577eb0da3750b3a7280e034566a2)
+++ uspace/drv/vhc/conndev.c	(revision 4a4c8bcf0ce34cbf901b7d7d1d02ef84f5b04d48)
@@ -45,5 +45,4 @@
 static fibril_local char plugged_device_name[PLUGGED_DEVICE_NAME_MAXLEN + 1] = "<unknown>";
 
-#if 0
 /** Receive device name.
  *
@@ -85,5 +84,4 @@
 	plugged_device_name[len] = 0;
 }
-#endif
 
 /** Default handler for IPC methods not handled by DDF.
@@ -93,20 +91,14 @@
  * @param icall Call data.
  */
-void default_connection_handler(ddf_fun_t *fun,
-    ipc_callid_t icallid, ipc_call_t *icall)
+void default_connection_handler(ddf_fun_t *fun, ipc_callid_t icallid,
+    ipc_call_t *icall)
 {
-// FIXME:
-// This code needs to be refactored since the async
-// framework does not support automatic callback connections
-// yet.
-
-#if 0
 	vhc_data_t *vhc = fun->dev->driver_data;
-	sysarg_t method = IPC_GET_IMETHOD(*icall);
-
-	if (method == IPC_M_CONNECT_TO_ME) {
-		int callback = IPC_GET_ARG5(*icall);
-		int rc = vhc_virtdev_plug(vhc, callback,
-		    &plugged_device_handle);
+	
+	async_sess_t *callback =
+	    async_callback_receive_start(EXCHANGE_SERIALIZE, icall);
+	
+	if (callback) {
+		int rc = vhc_virtdev_plug(vhc, callback, &plugged_device_handle);
 		if (rc != EOK) {
 			async_answer_0(icallid, rc);
@@ -114,17 +106,13 @@
 			return;
 		}
-
+		
 		async_answer_0(icallid, EOK);
-
+		
 		receive_device_name(callback);
-
+		
 		usb_log_info("New virtual device `%s' (id: %" PRIxn ").\n",
 		    plugged_device_name, plugged_device_handle);
-
-		return;
-	}
-#endif
-
-	async_answer_0(icallid, EINVAL);
+	} else
+		async_answer_0(icallid, EINVAL);
 }
 
