Index: uspace/lib/drv/generic/driver.c
===================================================================
--- uspace/lib/drv/generic/driver.c	(revision 957cfa58e9f28dbcaf9efd98ce73ec541a8166fe)
+++ uspace/lib/drv/generic/driver.c	(revision c9f3b45c6db879f3774a8e1052c76615112ebaad)
@@ -89,53 +89,4 @@
 }
 
-/** Wrapper for receiving strings
- *
- * This wrapper only makes it more comfortable to use async_data_write_*
- * functions to receive strings.
- *
- * @param str      Pointer to string pointer (which should be later disposed
- *                 by free()). If the operation fails, the pointer is not
- *                 touched.
- * @param max_size Maximum size (in bytes) of the string to receive. 0 means
- *                 no limit.
- * @param received If not NULL, the size of the received data is stored here.
- *
- * @return Zero on success or a value from @ref errno.h on failure.
- *
- */
-static int async_string_receive(char **str, const size_t max_size, size_t *received)
-{
-        ipc_callid_t callid;
-        size_t size;
-        if (!async_data_write_receive(&callid, &size)) {
-                ipc_answer_0(callid, EINVAL);
-                return EINVAL;
-        }
-        
-        if ((max_size > 0) && (size > max_size)) {
-                ipc_answer_0(callid, EINVAL);
-                return EINVAL;
-        }
-        
-        char *data = (char *) malloc(size + 1);
-        if (data == NULL) {
-                ipc_answer_0(callid, ENOMEM);
-                return ENOMEM;
-        }
-        
-        int rc = async_data_write_finalize(callid, data, size);
-        if (rc != EOK) {
-                free(data);
-                return rc;
-        }
-        
-        data[size] = 0;
-        *str = data;
-        if (received != NULL)
-                *received = size;
-        
-        return EOK;
-}
-
 int register_interrupt_handler(device_t *dev, int irq, interrupt_handler_t *handler, irq_code_t *pseudocode)
 {
@@ -213,5 +164,5 @@
 	dev->handle = dev_handle;
 	
-	async_string_receive(&dev_name, 0, NULL);
+	async_data_write_accept((void **)&dev_name, true, 0, 0, 0, 0);
 	dev->name = dev_name;
 	
Index: uspace/srv/devman/main.c
===================================================================
--- uspace/srv/devman/main.c	(revision 957cfa58e9f28dbcaf9efd98ce73ec541a8166fe)
+++ uspace/srv/devman/main.c	(revision c9f3b45c6db879f3774a8e1052c76615112ebaad)
@@ -61,52 +61,4 @@
 static dev_tree_t device_tree;
 
-/** Wrapper for receiving strings
- *
- * This wrapper only makes it more comfortable to use async_data_write_*
- * functions to receive strings.
- *
- * @param str      Pointer to string pointer (which should be later disposed
- *                 by free()). If the operation fails, the pointer is not
- *                 touched.
- * @param max_size Maximum size (in bytes) of the string to receive. 0 means
- *                 no limit.
- * @param received If not NULL, the size of the received data is stored here.
- *
- * @return Zero on success or a value from @ref errno.h on failure.
- *
- */
-static int async_string_receive(char **str, const size_t max_size, size_t *received)
-{
-        ipc_callid_t callid;
-        size_t size;
-        if (!async_data_write_receive(&callid, &size)) {
-                ipc_answer_0(callid, EINVAL);
-                return EINVAL;
-        }
-        
-        if ((max_size > 0) && (size > max_size)) {
-                ipc_answer_0(callid, EINVAL);
-                return EINVAL;
-        }
-        
-        char *data = (char *) malloc(size + 1);
-        if (data == NULL) {
-                ipc_answer_0(callid, ENOMEM);
-                return ENOMEM;
-        }
-        
-        int rc = async_data_write_finalize(callid, data, size);
-        if (rc != EOK) {
-                free(data);
-                return rc;
-        }
-        
-        data[size] = 0;
-        *str = data;
-        if (received != NULL)
-                *received = size;
-        
-        return EOK;
-}
 
 /**
@@ -129,5 +81,5 @@
 	
 	// Get driver name
-	int rc = async_string_receive(&drv_name, DEVMAN_NAME_MAXLEN, NULL);	
+	int rc = async_data_write_accept((void **)&drv_name, true, 0, 0, 0, 0);
 	if (rc != EOK) {
 		ipc_answer_0(iid, rc);
@@ -205,5 +157,5 @@
 	
 	char *match_id_str;
-	rc = async_string_receive(&match_id_str, DEVMAN_NAME_MAXLEN, NULL);	
+	rc = async_data_write_accept((void **)&match_id_str, true, 0, 0, 0, 0);
 	match_id->id = match_id_str;
 	if (EOK != rc) {
@@ -262,5 +214,5 @@
 	
 	char *dev_name = NULL;
-	int rc = async_string_receive(&dev_name, DEVMAN_NAME_MAXLEN, NULL);	
+	int rc = async_data_write_accept((void **)&dev_name, true, 0, 0, 0, 0);	
 	if (EOK != rc) {
 		fibril_rwlock_write_unlock(&tree->rwlock);
@@ -354,8 +306,6 @@
 static void devman_device_get_handle(ipc_callid_t iid, ipc_call_t *icall)
 {
-	char *pathname;
-	
-	/* Get fqdn */
-	int rc = async_string_receive(&pathname, 0, NULL);
+	char *pathname;	
+	int rc = async_data_write_accept((void **)&pathname, true, 0, 0, 0, 0);
 	if (rc != EOK) {
 		ipc_answer_0(iid, rc);
