Index: uspace/srv/net/dnsrsrv/dnsrsrv.c
===================================================================
--- uspace/srv/net/dnsrsrv/dnsrsrv.c	(revision 1d24ad312b4ddcdf3dc7c30ee0effc5293fd669c)
+++ uspace/srv/net/dnsrsrv/dnsrsrv.c	(revision 882bc4ba2157550e314d5120fd5f0cb3fad2d63e)
@@ -197,6 +197,8 @@
 	
 	int rc = async_data_write_finalize(callid, &dns_server_addr, size);
-	if (rc != EOK)
-		async_answer_0(callid, rc);
+	if (rc != EOK) {
+		async_answer_0(callid, rc);
+		async_answer_0(iid, rc);
+	}
 	
 	async_answer_0(iid, (sysarg_t) rc);
Index: uspace/srv/net/ethip/atrans.c
===================================================================
--- uspace/srv/net/ethip/atrans.c	(revision 1d24ad312b4ddcdf3dc7c30ee0effc5293fd669c)
+++ uspace/srv/net/ethip/atrans.c	(revision 882bc4ba2157550e314d5120fd5f0cb3fad2d63e)
@@ -49,5 +49,5 @@
 static FIBRIL_CONDVAR_INITIALIZE(atrans_cv);
 
-static ethip_atrans_t *atrans_find(uint32_t ip_addr)
+static ethip_atrans_t *atrans_find(addr32_t ip_addr)
 {
 	list_foreach(atrans_list, link) {
@@ -62,5 +62,5 @@
 }
 
-int atrans_add(uint32_t ip_addr, addr48_t mac_addr)
+int atrans_add(addr32_t ip_addr, addr48_t mac_addr)
 {
 	ethip_atrans_t *atrans;
@@ -88,5 +88,5 @@
 }
 
-int atrans_remove(uint32_t ip_addr)
+int atrans_remove(addr32_t ip_addr)
 {
 	ethip_atrans_t *atrans;
@@ -106,5 +106,5 @@
 }
 
-int atrans_lookup(uint32_t ip_addr, addr48_t mac_addr)
+int atrans_lookup(addr32_t ip_addr, addr48_t mac_addr)
 {
 	fibril_mutex_lock(&atrans_list_lock);
Index: uspace/srv/net/ethip/atrans.h
===================================================================
--- uspace/srv/net/ethip/atrans.h	(revision 1d24ad312b4ddcdf3dc7c30ee0effc5293fd669c)
+++ uspace/srv/net/ethip/atrans.h	(revision 882bc4ba2157550e314d5120fd5f0cb3fad2d63e)
@@ -42,7 +42,7 @@
 #include "ethip.h"
 
-extern int atrans_add(uint32_t, addr48_t);
-extern int atrans_remove(uint32_t);
-extern int atrans_lookup(uint32_t, addr48_t);
+extern int atrans_add(addr32_t, addr48_t);
+extern int atrans_remove(addr32_t);
+extern int atrans_lookup(addr32_t, addr48_t);
 extern int atrans_wait_timeout(suseconds_t);
 
Index: uspace/srv/net/ethip/ethip.h
===================================================================
--- uspace/srv/net/ethip/ethip.h	(revision 1d24ad312b4ddcdf3dc7c30ee0effc5293fd669c)
+++ uspace/srv/net/ethip/ethip.h	(revision 882bc4ba2157550e314d5120fd5f0cb3fad2d63e)
@@ -97,9 +97,9 @@
 	addr48_t sender_hw_addr;
 	/** Sender protocol address */
-	uint32_t sender_proto_addr;
+	addr32_t sender_proto_addr;
 	/** Target hardware address */
 	addr48_t target_hw_addr;
 	/** Target protocol address */
-	uint32_t target_proto_addr;
+	addr32_t target_proto_addr;
 } arp_eth_packet_t;
 
@@ -107,5 +107,5 @@
 typedef struct {
 	link_t atrans_list;
-	uint32_t ip_addr;
+	addr32_t ip_addr;
 	addr48_t mac_addr;
 } ethip_atrans_t;
Index: uspace/srv/net/ethip/std.h
===================================================================
--- uspace/srv/net/ethip/std.h	(revision 1d24ad312b4ddcdf3dc7c30ee0effc5293fd669c)
+++ uspace/srv/net/ethip/std.h	(revision 882bc4ba2157550e314d5120fd5f0cb3fad2d63e)
@@ -70,9 +70,9 @@
 	addr48_t sender_hw_addr;
 	/** Sender protocol address */
-	uint32_t sender_proto_addr;
+	addr32_t sender_proto_addr;
 	/** Target hardware address */
 	addr48_t target_hw_addr;
 	/** Target protocol address */
-	uint32_t target_proto_addr;
+	addr32_t target_proto_addr;
 } __attribute__((packed)) arp_eth_packet_fmt_t;
 
Index: uspace/srv/net/inetsrv/inetsrv.c
===================================================================
--- uspace/srv/net/inetsrv/inetsrv.c	(revision 1d24ad312b4ddcdf3dc7c30ee0effc5293fd669c)
+++ uspace/srv/net/inetsrv/inetsrv.c	(revision 882bc4ba2157550e314d5120fd5f0cb3fad2d63e)
@@ -207,53 +207,115 @@
 }
 
-static void inet_get_srcaddr_srv(inet_client_t *client, ipc_callid_t callid,
-    ipc_call_t *call)
+static void inet_get_srcaddr_srv(inet_client_t *client, ipc_callid_t iid,
+    ipc_call_t *icall)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_get_srcaddr_srv()");
 	
-	addr32_t remote_v4 = IPC_GET_ARG1(*call);
-	uint8_t tos = IPC_GET_ARG2(*call);
+	uint8_t tos = IPC_GET_ARG1(*icall);
+	
+	ipc_callid_t callid;
+	size_t size;
+	if (!async_data_write_receive(&callid, &size)) {
+		async_answer_0(callid, EREFUSED);
+		async_answer_0(iid, EREFUSED);
+		return;
+	}
+	
+	if (size != sizeof(inet_addr_t)) {
+		async_answer_0(callid, EINVAL);
+		async_answer_0(iid, EINVAL);
+		return;
+	}
 	
 	inet_addr_t remote;
-	inet_addr_set(remote_v4, &remote);
+	int rc = async_data_write_finalize(callid, &remote, size);
+	if (rc != EOK) {
+		async_answer_0(callid, rc);
+		async_answer_0(iid, rc);
+	}
 	
 	inet_addr_t local;
-	int rc = inet_get_srcaddr(&remote, tos, &local);
+	rc = inet_get_srcaddr(&remote, tos, &local);
+	if (rc != EOK) {
+		async_answer_0(iid, rc);
+		return;
+	}
+	
+	if (!async_data_read_receive(&callid, &size)) {
+		async_answer_0(callid, EREFUSED);
+		async_answer_0(iid, EREFUSED);
+		return;
+	}
+	
+	if (size != sizeof(inet_addr_t)) {
+		async_answer_0(callid, EINVAL);
+		async_answer_0(iid, EINVAL);
+		return;
+	}
+	
+	rc = async_data_read_finalize(callid, &local, size);
 	if (rc != EOK) {
 		async_answer_0(callid, rc);
-		return;
-	}
-	
-	addr32_t local_v4;
-	uint16_t family = inet_addr_get(&local, &local_v4, NULL);
-	if (family != AF_INET) {
+		async_answer_0(iid, rc);
+		return;
+	}
+	
+	async_answer_0(iid, rc);
+}
+
+static void inet_send_srv(inet_client_t *client, ipc_callid_t iid,
+    ipc_call_t *icall)
+{
+	log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_send_srv()");
+	
+	inet_dgram_t dgram;
+	
+	dgram.tos = IPC_GET_ARG1(*icall);
+	
+	uint8_t ttl = IPC_GET_ARG2(*icall);
+	int df = IPC_GET_ARG3(*icall);
+	
+	ipc_callid_t callid;
+	size_t size;
+	if (!async_data_write_receive(&callid, &size)) {
+		async_answer_0(callid, EREFUSED);
+		async_answer_0(iid, EREFUSED);
+		return;
+	}
+	
+	if (size != sizeof(inet_addr_t)) {
 		async_answer_0(callid, EINVAL);
-		return;
-	}
-	
-	async_answer_1(callid, rc, (sysarg_t) local_v4);
-}
-
-static void inet_send_srv(inet_client_t *client, ipc_callid_t callid,
-    ipc_call_t *call)
-{
-	log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_send_srv()");
-	
-	addr32_t src_v4 = IPC_GET_ARG1(*call);
-	addr32_t dest_v4 = IPC_GET_ARG2(*call);
-	
-	inet_dgram_t dgram;
-	
-	inet_addr_set(src_v4, &dgram.src);
-	inet_addr_set(dest_v4, &dgram.dest);
-	dgram.tos = IPC_GET_ARG3(*call);
-	
-	uint8_t ttl = IPC_GET_ARG4(*call);
-	int df = IPC_GET_ARG5(*call);
-	
-	int rc = async_data_write_accept(&dgram.data, false, 0, 0, 0,
+		async_answer_0(iid, EINVAL);
+		return;
+	}
+	
+	int rc = async_data_write_finalize(callid, &dgram.src, size);
+	if (rc != EOK) {
+		async_answer_0(callid, rc);
+		async_answer_0(iid, rc);
+	}
+	
+	if (!async_data_write_receive(&callid, &size)) {
+		async_answer_0(callid, EREFUSED);
+		async_answer_0(iid, EREFUSED);
+		return;
+	}
+	
+	if (size != sizeof(inet_addr_t)) {
+		async_answer_0(callid, EINVAL);
+		async_answer_0(iid, EINVAL);
+		return;
+	}
+	
+	rc = async_data_write_finalize(callid, &dgram.dest, size);
+	if (rc != EOK) {
+		async_answer_0(callid, rc);
+		async_answer_0(iid, rc);
+	}
+	
+	rc = async_data_write_accept(&dgram.data, false, 0, 0, 0,
 	    &dgram.size);
 	if (rc != EOK) {
-		async_answer_0(callid, rc);
+		async_answer_0(iid, rc);
 		return;
 	}
@@ -262,5 +324,5 @@
 	
 	free(dgram.data);
-	async_answer_0(callid, rc);
+	async_answer_0(iid, rc);
 }
 
