Index: uspace/srv/clip/clip.c
===================================================================
--- uspace/srv/clip/clip.c	(revision 1e4cadad49fbe94a308f6f74c331537fbfc59425)
+++ uspace/srv/clip/clip.c	(revision fc6dd18feebbc66893aec4d86827b7c815dbbfe7)
@@ -46,5 +46,6 @@
 static void clip_put_data(ipc_callid_t rid, ipc_call_t *request)
 {
-	ipc_callid_t callid;
+	char *data;
+	int rc;
 	size_t size;
 	
@@ -64,21 +65,7 @@
 		break;
 	case CLIPBOARD_TAG_BLOB:
-		if (!async_data_write_receive(&callid, &size)) {
-			ipc_answer_0(callid, EINVAL);
-			ipc_answer_0(rid, EINVAL);
-			break;
-		}
-		
-		char *data = malloc(size);
-		if (!data) {
-			ipc_answer_0(callid, ENOMEM);
-			ipc_answer_0(rid, ENOMEM);
-			break;
-		}
-		
-		ipcarg_t retval = async_data_write_finalize(callid, data, size);
-		if (retval != EOK) {
-			ipc_answer_0(rid, retval);
-			free(data);
+		rc = async_data_blob_receive(&data, 0, &size);
+		if (rc != EOK) {
+			ipc_answer_0(rid, rc);
 			break;
 		}
