Index: uspace/srv/net/nil/eth/eth.c
===================================================================
--- uspace/srv/net/nil/eth/eth.c	(revision bd7928180295352fbc2d6d57a236f0ff2c516b4f)
+++ uspace/srv/net/nil/eth/eth.c	(revision 3fe58d3c98a1a1ef32bfc4718efd64ae275de456)
@@ -814,4 +814,25 @@
 }
 
+static int eth_received(nic_device_id_t device_id)
+{
+	void *data;
+	size_t size;
+	int rc;
+	
+	rc = async_data_write_accept(&data, false, 0, 0, 0, &size);
+	if (rc != EOK)
+		return rc;
+	
+	packet_t *packet = packet_get_1_remote(eth_globals.net_sess, size);
+	if (packet == NULL)
+		return ENOMEM;
+	
+	void *pdata = packet_suffix(packet, size);
+	memcpy(pdata, data, size);
+	free(data);
+	
+	return nil_received_msg_local(device_id, packet);
+}
+
 static int eth_addr_changed(nic_device_id_t device_id)
 {
@@ -926,9 +947,5 @@
 		return EOK;
 	case NET_NIL_RECEIVED:
-		rc = packet_translate_remote(eth_globals.net_sess, &packet,
-		    IPC_GET_ARG2(*call));
-		if (rc == EOK)
-			rc = nil_received_msg_local(IPC_GET_ARG1(*call), packet);
-		
+		rc = eth_received(IPC_GET_ARG1(*call));
 		async_answer_0(callid, (sysarg_t) rc);
 		return rc;
Index: uspace/srv/net/nil/nildummy/nildummy.c
===================================================================
--- uspace/srv/net/nil/nildummy/nildummy.c	(revision bd7928180295352fbc2d6d57a236f0ff2c516b4f)
+++ uspace/srv/net/nil/nildummy/nildummy.c	(revision 3fe58d3c98a1a1ef32bfc4718efd64ae275de456)
@@ -370,4 +370,25 @@
 }
 
+static int nildummy_received(nic_device_id_t device_id)
+{
+	void *data;
+	size_t size;
+	int rc;
+
+	rc = async_data_write_accept(&data, false, 0, 0, 0, &size);
+	if (rc != EOK)
+		return rc;
+
+	packet_t *packet = packet_get_1_remote(nildummy_globals.net_sess, size);
+	if (packet == NULL)
+		return ENOMEM;
+
+	void *pdata = packet_suffix(packet, size);
+	memcpy(pdata, data, size);
+	free(pdata);
+
+	return nil_received_msg_local(device_id, packet);
+}
+
 int nil_module_message(ipc_callid_t callid, ipc_call_t *call,
     ipc_call_t *answer, size_t *answer_count)
@@ -431,9 +452,5 @@
 	
 	case NET_NIL_RECEIVED:
-		rc = packet_translate_remote(nildummy_globals.net_sess, &packet,
-		    IPC_GET_ARG2(*call));
-		if (rc == EOK)
-			rc = nil_received_msg_local(IPC_GET_ARG1(*call), packet);
-		
+		rc = nildummy_received(IPC_GET_ARG1(*call));
 		async_answer_0(callid, (sysarg_t) rc);
 		return rc;
