Index: uspace/lib/c/generic/async.c
===================================================================
--- uspace/lib/c/generic/async.c	(revision 6d8455d96fd6cd160666aef7ea55519828d14f42)
+++ uspace/lib/c/generic/async.c	(revision f3025861da728fb4754f9d1cdcfeda5675ac98f3)
@@ -257,4 +257,5 @@
 void async_set_client_data_constructor(async_client_data_ctor_t ctor)
 {
+	assert(async_client_data_create == default_client_data_constructor);
 	async_client_data_create = ctor;
 }
@@ -262,4 +263,5 @@
 void async_set_client_data_destructor(async_client_data_dtor_t dtor)
 {
+	assert(async_client_data_destroy == default_client_data_destructor);
 	async_client_data_destroy = dtor;
 }
@@ -303,4 +305,5 @@
 void async_set_client_connection(async_client_conn_t conn)
 {
+	assert(client_connection == default_client_connection);
 	client_connection = conn;
 }
Index: uspace/lib/c/generic/devman.c
===================================================================
--- uspace/lib/c/generic/devman.c	(revision 6d8455d96fd6cd160666aef7ea55519828d14f42)
+++ uspace/lib/c/generic/devman.c	(revision f3025861da728fb4754f9d1cdcfeda5675ac98f3)
@@ -177,5 +177,5 @@
 
 /** Register running driver with device manager. */
-int devman_driver_register(const char *name, async_client_conn_t conn)
+int devman_driver_register(const char *name)
 {
 	async_exch_t *exch = devman_exchange_begin_blocking(DEVMAN_DRIVER);
@@ -192,8 +192,6 @@
 	}
 	
-	async_set_client_connection(conn);
-	
 	exch = devman_exchange_begin(DEVMAN_DRIVER);
-	async_connect_to_me(exch, 0, 0, 0, conn, NULL);
+	async_connect_to_me(exch, 0, 0, 0, NULL, NULL);
 	devman_exchange_end(exch);
 	
Index: uspace/lib/c/generic/loc.c
===================================================================
--- uspace/lib/c/generic/loc.c	(revision 6d8455d96fd6cd160666aef7ea55519828d14f42)
+++ uspace/lib/c/generic/loc.c	(revision f3025861da728fb4754f9d1cdcfeda5675ac98f3)
@@ -242,5 +242,5 @@
 
 /** Register new driver with loc. */
-int loc_server_register(const char *name, async_client_conn_t conn)
+int loc_server_register(const char *name)
 {
 	async_exch_t *exch = loc_exchange_begin_blocking(LOC_PORT_SUPPLIER);
@@ -256,6 +256,4 @@
 		return retval;
 	}
-	
-	async_set_client_connection(conn);
 	
 	exch = loc_exchange_begin(LOC_PORT_SUPPLIER);
Index: uspace/lib/c/include/devman.h
===================================================================
--- uspace/lib/c/include/devman.h	(revision 6d8455d96fd6cd160666aef7ea55519828d14f42)
+++ uspace/lib/c/include/devman.h	(revision f3025861da728fb4754f9d1cdcfeda5675ac98f3)
@@ -46,5 +46,5 @@
 extern void devman_exchange_end(async_exch_t *);
 
-extern int devman_driver_register(const char *, async_client_conn_t);
+extern int devman_driver_register(const char *);
 extern int devman_add_function(const char *, fun_type_t, match_id_list_t *,
     devman_handle_t, devman_handle_t *);
Index: uspace/lib/c/include/loc.h
===================================================================
--- uspace/lib/c/include/loc.h	(revision 6d8455d96fd6cd160666aef7ea55519828d14f42)
+++ uspace/lib/c/include/loc.h	(revision f3025861da728fb4754f9d1cdcfeda5675ac98f3)
@@ -46,5 +46,5 @@
 extern void loc_exchange_end(async_exch_t *);
 
-extern int loc_server_register(const char *, async_client_conn_t);
+extern int loc_server_register(const char *);
 extern int loc_service_register(const char *, service_id_t *);
 extern int loc_service_register_with_iface(const char *, service_id_t *,
Index: uspace/lib/drv/generic/driver.c
===================================================================
--- uspace/lib/drv/generic/driver.c	(revision 6d8455d96fd6cd160666aef7ea55519828d14f42)
+++ uspace/lib/drv/generic/driver.c	(revision f3025861da728fb4754f9d1cdcfeda5675ac98f3)
@@ -1016,5 +1016,6 @@
 	 * incoming connections.
 	 */
-	rc = devman_driver_register(driver->name, driver_connection);
+	async_set_client_connection(driver_connection);
+	rc = devman_driver_register(driver->name);
 	if (rc != EOK) {
 		printf("Error: Failed to register driver with device manager "
Index: uspace/srv/bd/ata_bd/ata_bd.c
===================================================================
--- uspace/srv/bd/ata_bd/ata_bd.c	(revision 6d8455d96fd6cd160666aef7ea55519828d14f42)
+++ uspace/srv/bd/ata_bd/ata_bd.c	(revision f3025861da728fb4754f9d1cdcfeda5675ac98f3)
@@ -245,6 +245,7 @@
 	void *vaddr;
 	int rc;
-
-	rc = loc_server_register(NAME, ata_bd_connection);
+	
+	async_set_client_connection(ata_bd_connection);
+	rc = loc_server_register(NAME);
 	if (rc < 0) {
 		printf(NAME ": Unable to register driver.\n");
Index: uspace/srv/bd/file_bd/file_bd.c
===================================================================
--- uspace/srv/bd/file_bd/file_bd.c	(revision 6d8455d96fd6cd160666aef7ea55519828d14f42)
+++ uspace/srv/bd/file_bd/file_bd.c	(revision f3025861da728fb4754f9d1cdcfeda5675ac98f3)
@@ -141,6 +141,7 @@
 	int rc;
 	long img_size;
-
-	rc = loc_server_register(NAME, file_bd_connection);
+	
+	async_set_client_connection(file_bd_connection);
+	rc = loc_server_register(NAME);
 	if (rc < 0) {
 		printf(NAME ": Unable to register driver.\n");
Index: uspace/srv/bd/gxe_bd/gxe_bd.c
===================================================================
--- uspace/srv/bd/gxe_bd/gxe_bd.c	(revision 6d8455d96fd6cd160666aef7ea55519828d14f42)
+++ uspace/srv/bd/gxe_bd/gxe_bd.c	(revision f3025861da728fb4754f9d1cdcfeda5675ac98f3)
@@ -125,6 +125,7 @@
 	int rc, i;
 	char name[16];
-
-	rc = loc_server_register(NAME, gxe_bd_connection);
+	
+	async_set_client_connection(gxe_bd_connection);
+	rc = loc_server_register(NAME);
 	if (rc < 0) {
 		printf(NAME ": Unable to register driver.\n");
Index: uspace/srv/bd/part/guid_part/guid_part.c
===================================================================
--- uspace/srv/bd/part/guid_part/guid_part.c	(revision 6d8455d96fd6cd160666aef7ea55519828d14f42)
+++ uspace/srv/bd/part/guid_part/guid_part.c	(revision f3025861da728fb4754f9d1cdcfeda5675ac98f3)
@@ -164,5 +164,6 @@
 
 	/* Register server with location service. */
-	rc = loc_server_register(NAME, gpt_connection);
+	async_set_client_connection(gpt_connection);
+	rc = loc_server_register(NAME);
 	if (rc != EOK) {
 		printf(NAME ": Unable to register server.\n");
Index: uspace/srv/bd/part/mbr_part/mbr_part.c
===================================================================
--- uspace/srv/bd/part/mbr_part/mbr_part.c	(revision 6d8455d96fd6cd160666aef7ea55519828d14f42)
+++ uspace/srv/bd/part/mbr_part/mbr_part.c	(revision f3025861da728fb4754f9d1cdcfeda5675ac98f3)
@@ -214,5 +214,6 @@
 
 	/* Register server with location service. */
-	rc = loc_server_register(NAME, mbr_connection);
+	async_set_client_connection(mbr_connection);
+	rc = loc_server_register(NAME);
 	if (rc != EOK) {
 		printf(NAME ": Unable to register server.\n");
Index: uspace/srv/bd/rd/rd.c
===================================================================
--- uspace/srv/bd/rd/rd.c	(revision 6d8455d96fd6cd160666aef7ea55519828d14f42)
+++ uspace/srv/bd/rd/rd.c	(revision f3025861da728fb4754f9d1cdcfeda5675ac98f3)
@@ -235,5 +235,6 @@
 	    (void *) addr_phys, size);
 	
-	ret = loc_server_register(NAME, rd_connection);
+	async_set_client_connection(rd_connection);
+	ret = loc_server_register(NAME);
 	if (ret < 0) {
 		printf("%s: Unable to register driver (%d)\n", NAME, ret);
Index: uspace/srv/devman/main.c
===================================================================
--- uspace/srv/devman/main.c	(revision 6d8455d96fd6cd160666aef7ea55519828d14f42)
+++ uspace/srv/devman/main.c	(revision f3025861da728fb4754f9d1cdcfeda5675ac98f3)
@@ -1309,10 +1309,11 @@
 
 	/*
-	 * !!! devman_connection ... as the device manager is not a real loc
-	 * driver (it uses a completely different ipc protocol than an ordinary
-	 * loc driver) forwarding a connection from client to the devman by
-	 * location service would not work.
+	 * Caution: As the device manager is not a real loc
+	 * driver (it uses a completely different IPC protocol
+	 * than an ordinary loc driver), forwarding a connection
+	 * from client to the devman by location service will
+	 * not work.
 	 */
-	loc_server_register(NAME, devman_connection);
+	loc_server_register(NAME);
 	
 	return true;
@@ -1325,9 +1326,4 @@
 	if (log_init(NAME, LVL_WARN) != EOK) {
 		printf(NAME ": Error initializing logging subsystem.\n");
-		return -1;
-	}
-
-	if (!devman_init()) {
-		log_msg(LVL_ERROR, "Error while initializing service.");
 		return -1;
 	}
@@ -1338,4 +1334,9 @@
 	async_set_client_connection(devman_connection);
 
+	if (!devman_init()) {
+		log_msg(LVL_ERROR, "Error while initializing service.");
+		return -1;
+	}
+
 	/* Register device manager at naming service. */
 	if (service_register(SERVICE_DEVMAN) != EOK) {
Index: uspace/srv/hid/console/console.c
===================================================================
--- uspace/srv/hid/console/console.c	(revision 6d8455d96fd6cd160666aef7ea55519828d14f42)
+++ uspace/srv/hid/console/console.c	(revision f3025861da728fb4754f9d1cdcfeda5675ac98f3)
@@ -825,5 +825,6 @@
 	
 	/* Register server */
-	int rc = loc_server_register(NAME, client_connection);
+	async_set_client_connection(client_connection);
+	int rc = loc_server_register(NAME);
 	if (rc < 0) {
 		printf("%s: Unable to register server (%s)\n", NAME,
Index: uspace/srv/hid/fb/fb.c
===================================================================
--- uspace/srv/hid/fb/fb.c	(revision 6d8455d96fd6cd160666aef7ea55519828d14f42)
+++ uspace/srv/hid/fb/fb.c	(revision f3025861da728fb4754f9d1cdcfeda5675ac98f3)
@@ -987,5 +987,6 @@
 	
 	/* Register server */
-	int rc = loc_server_register(NAME, client_connection);
+	async_set_client_connection(client_connection);
+	int rc = loc_server_register(NAME);
 	if (rc != EOK) {
 		printf("%s: Unable to register driver (%d)\n", NAME, rc);
Index: uspace/srv/hid/input/generic/input.c
===================================================================
--- uspace/srv/hid/input/generic/input.c	(revision 6d8455d96fd6cd160666aef7ea55519828d14f42)
+++ uspace/srv/hid/input/generic/input.c	(revision f3025861da728fb4754f9d1cdcfeda5675ac98f3)
@@ -649,5 +649,6 @@
 	
 	/* Register driver */
-	int rc = loc_server_register(NAME, client_connection);
+	async_set_client_connection(client_connection);
+	int rc = loc_server_register(NAME);
 	if (rc < 0) {
 		printf("%s: Unable to register server (%d)\n", NAME, rc);
Index: uspace/srv/hid/s3c24xx_ts/s3c24xx_ts.c
===================================================================
--- uspace/srv/hid/s3c24xx_ts/s3c24xx_ts.c	(revision 6d8455d96fd6cd160666aef7ea55519828d14f42)
+++ uspace/srv/hid/s3c24xx_ts/s3c24xx_ts.c	(revision f3025861da728fb4754f9d1cdcfeda5675ac98f3)
@@ -85,6 +85,7 @@
 
 	printf(NAME ": S3C24xx touchscreen driver\n");
-
-	rc = loc_server_register(NAME, s3c24xx_ts_connection);
+	
+	async_set_client_connection(s3c24xx_ts_connection);
+	rc = loc_server_register(NAME);
 	if (rc < 0) {
 		printf(NAME ": Unable to register driver.\n");
Index: uspace/srv/hw/bus/cuda_adb/cuda_adb.c
===================================================================
--- uspace/srv/hw/bus/cuda_adb/cuda_adb.c	(revision 6d8455d96fd6cd160666aef7ea55519828d14f42)
+++ uspace/srv/hw/bus/cuda_adb/cuda_adb.c	(revision f3025861da728fb4754f9d1cdcfeda5675ac98f3)
@@ -154,5 +154,6 @@
 	}
 
-	rc = loc_server_register(NAME, cuda_connection);
+	async_set_client_connection(cuda_connection);
+	rc = loc_server_register(NAME);
 	if (rc < 0) {
 		printf(NAME ": Unable to register server.\n");
Index: uspace/srv/hw/char/s3c24xx_uart/s3c24xx_uart.c
===================================================================
--- uspace/srv/hw/char/s3c24xx_uart/s3c24xx_uart.c	(revision 6d8455d96fd6cd160666aef7ea55519828d14f42)
+++ uspace/srv/hw/char/s3c24xx_uart/s3c24xx_uart.c	(revision f3025861da728fb4754f9d1cdcfeda5675ac98f3)
@@ -79,5 +79,6 @@
 	printf(NAME ": S3C24xx on-chip UART driver\n");
 
-	rc = loc_server_register(NAME, s3c24xx_uart_connection);
+	async_set_client_connection(s3c24xx_uart_connection);
+	rc = loc_server_register(NAME);
 	if (rc < 0) {
 		printf(NAME ": Unable to register server.\n");
