Index: uspace/srv/net/dnsrsrv/dns_msg.c
===================================================================
--- uspace/srv/net/dnsrsrv/dns_msg.c	(revision 4a5a18bec3fd7337a3a2a793ccab2f7149bb5b4a)
+++ uspace/srv/net/dnsrsrv/dns_msg.c	(revision 3e664287e034298711db95506e3d6e3f1a348b8a)
@@ -299,7 +299,7 @@
 	assert(buf_size >= 4);
 
-	w = ((uint32_t)buf[0] << 24) +
-	    ((uint32_t)buf[1] << 16) +
-	    ((uint32_t)buf[2] << 8) +
+	w = ((uint32_t) buf[0] << 24) +
+	    ((uint32_t) buf[1] << 16) +
+	    ((uint32_t) buf[2] << 8) +
 	    buf[3];
 
Index: uspace/srv/net/dnsrsrv/dns_type.h
===================================================================
--- uspace/srv/net/dnsrsrv/dns_type.h	(revision 4a5a18bec3fd7337a3a2a793ccab2f7149bb5b4a)
+++ uspace/srv/net/dnsrsrv/dns_type.h	(revision 3e664287e034298711db95506e3d6e3f1a348b8a)
@@ -39,4 +39,5 @@
 #include <adt/list.h>
 #include <inet/inet.h>
+#include <inet/addr2.h>
 #include <stdbool.h>
 #include <stdint.h>
@@ -115,5 +116,5 @@
 	char *cname;
 	/** Host address */
-	inet_addr_t addr;
+	inet2_addr_t addr;
 } dns_host_info_t;
 
Index: uspace/srv/net/dnsrsrv/dnsrsrv.c
===================================================================
--- uspace/srv/net/dnsrsrv/dnsrsrv.c	(revision 4a5a18bec3fd7337a3a2a793ccab2f7149bb5b4a)
+++ uspace/srv/net/dnsrsrv/dnsrsrv.c	(revision 3e664287e034298711db95506e3d6e3f1a348b8a)
@@ -116,4 +116,12 @@
 		return;
 	}
+	
+	uint32_t addr;
+	rc = inet2_addr_pack(&hinfo->addr, &addr);
+	if (rc != EOK) {
+		async_answer_0(rcallid, rc);
+		async_answer_0(callid, rc);
+		return;
+	}
 
 	act_size = str_size(hinfo->cname);
@@ -125,24 +133,59 @@
 
 	retval = async_data_read_finalize(rcallid, hinfo->cname, act_size);
-	async_answer_1(callid, retval, hinfo->addr.ipv4);
+	async_answer_1(callid, retval, (sysarg_t) addr);
 
 	dns_hostinfo_destroy(hinfo);
 }
 
-static void dnsr_get_srvaddr_srv(dnsr_client_t *client, ipc_callid_t callid,
-    ipc_call_t *call)
+static void dnsr_get_srvaddr_srv(dnsr_client_t *client, ipc_callid_t iid,
+    ipc_call_t *icall)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_get_srvaddr_srv()");
-	async_answer_1(callid, EOK, dns_server_addr.ipv4);
-}
-
-static void dnsr_set_srvaddr_srv(dnsr_client_t *client, ipc_callid_t callid,
-    ipc_call_t *call)
+	
+	ipc_callid_t callid;
+	size_t size;
+	if (!async_data_read_receive(&callid, &size)) {
+		async_answer_0(callid, EREFUSED);
+		async_answer_0(iid, EREFUSED);
+		return;
+	}
+	
+	if (size != sizeof(inet2_addr_t)) {
+		async_answer_0(callid, EINVAL);
+		async_answer_0(iid, EINVAL);
+		return;
+	}
+	
+	// FIXME locking
+	
+	sysarg_t retval =
+	    async_data_read_finalize(callid, &dns_server_addr, size);
+	async_answer_0(iid, retval);
+}
+
+static void dnsr_set_srvaddr_srv(dnsr_client_t *client, ipc_callid_t iid,
+    ipc_call_t *icall)
 {
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "dnsr_set_srvaddr_srv()");
-
-	dns_server_addr.ipv4 = IPC_GET_ARG1(*call);
-
-	async_answer_0(callid, EOK);
+	
+	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(inet2_addr_t)) {
+		async_answer_0(callid, EINVAL);
+		async_answer_0(iid, EINVAL);
+		return;
+	}
+	
+	// FIXME locking
+	
+	sysarg_t retval =
+	    async_data_write_finalize(callid, &dns_server_addr, size);
+	async_answer_0(iid, retval);
 }
 
Index: uspace/srv/net/dnsrsrv/query.c
===================================================================
--- uspace/srv/net/dnsrsrv/query.c	(revision 4a5a18bec3fd7337a3a2a793ccab2f7149bb5b4a)
+++ uspace/srv/net/dnsrsrv/query.c	(revision 3e664287e034298711db95506e3d6e3f1a348b8a)
@@ -128,8 +128,7 @@
 
 			info->cname = str_dup(rr->name);
-			info->addr.ipv4 = dns_uint32_t_decode(rr->rdata, rr->rdata_size);
-			log_msg(LOG_DEFAULT, LVL_DEBUG, "info->name = '%s' "
-			    "info->addr = %x", info->cname, info->addr.ipv4);
-
+			inet2_addr_unpack(dns_uint32_t_decode(rr->rdata, rr->rdata_size),
+			    &info->addr);
+			
 			dns_message_destroy(msg);
 			dns_message_destroy(amsg);
Index: uspace/srv/net/dnsrsrv/transport.c
===================================================================
--- uspace/srv/net/dnsrsrv/transport.c	(revision 4a5a18bec3fd7337a3a2a793ccab2f7149bb5b4a)
+++ uspace/srv/net/dnsrsrv/transport.c	(revision 3e664287e034298711db95506e3d6e3f1a348b8a)
@@ -52,8 +52,10 @@
 
 /** Request timeout (microseconds) */
-#define REQ_TIMEOUT (5*1000*1000)
+#define REQ_TIMEOUT (5 * 1000 * 1000)
 
 /** Maximum number of retries */
 #define REQ_RETRY_MAX 3
+
+inet2_addr_t dns_server_addr;
 
 typedef struct {
@@ -72,5 +74,4 @@
 static fid_t recv_fid;
 static int transport_fd = -1;
-inet_addr_t dns_server_addr;
 
 /** Outstanding requests */
@@ -194,5 +195,5 @@
 	addr.sin_family = AF_INET;
 	addr.sin_port = htons(DNS_SERVER_PORT);
-	addr.sin_addr.s_addr = host2uint32_t_be(dns_server_addr.ipv4);
+	inet2_addr_sockaddr_in(&dns_server_addr, &addr);
 
 	rc = dns_message_encode(req, &req_data, &req_size);
@@ -204,5 +205,5 @@
 	while (ntry < REQ_RETRY_MAX) {
 		rc = sendto(transport_fd, req_data, req_size, 0,
-		    (struct sockaddr *)&addr, sizeof(addr));
+		    (struct sockaddr *) &addr, sizeof(addr));
 		if (rc != EOK)
 			goto error;
Index: uspace/srv/net/dnsrsrv/transport.h
===================================================================
--- uspace/srv/net/dnsrsrv/transport.h	(revision 4a5a18bec3fd7337a3a2a793ccab2f7149bb5b4a)
+++ uspace/srv/net/dnsrsrv/transport.h	(revision 3e664287e034298711db95506e3d6e3f1a348b8a)
@@ -37,6 +37,8 @@
 #define TRANSPORT_H
 
-#include <inet/addr.h>
+#include <inet/addr2.h>
 #include "dns_type.h"
+
+extern inet2_addr_t dns_server_addr;
 
 extern int transport_init(void);
@@ -44,7 +46,4 @@
 extern int dns_request(dns_message_t *, dns_message_t **);
 
-extern inet_addr_t dns_server_addr;
-
-
 #endif
 
