Index: uspace/app/dnscfg/dnscfg.c
===================================================================
--- uspace/app/dnscfg/dnscfg.c	(revision 5147ff124d29e1b9d3e60be5848187fd214f2924)
+++ uspace/app/dnscfg/dnscfg.c	(revision b6bbc74b63bc4fbd88824dc1c87c59ea24fcff28)
@@ -72,5 +72,5 @@
 	
 	inet_addr_t addr;
-	int rc = inet_addr_parse(srv_addr, &addr);
+	int rc = inet_addr_parse(srv_addr, &addr, NULL);
 	
 	if (rc != EOK) {
Index: uspace/app/inet/inet.c
===================================================================
--- uspace/app/inet/inet.c	(revision 5147ff124d29e1b9d3e60be5848187fd214f2924)
+++ uspace/app/inet/inet.c	(revision b6bbc74b63bc4fbd88824dc1c87c59ea24fcff28)
@@ -88,5 +88,5 @@
 	}
 
-	rc = inet_naddr_parse(addr_spec, &naddr);
+	rc = inet_naddr_parse(addr_spec, &naddr, NULL);
 	if (rc != EOK) {
 		printf(NAME ": Invalid network address format '%s'.\n",
@@ -177,5 +177,5 @@
 	route_name = argv[2];
 
-	rc = inet_naddr_parse(dest_str, &dest);
+	rc = inet_naddr_parse(dest_str, &dest, NULL);
 	if (rc != EOK) {
 		printf(NAME ": Invalid network address format '%s'.\n",
@@ -184,5 +184,5 @@
 	}
 
-	rc = inet_addr_parse(router_str, &router);
+	rc = inet_addr_parse(router_str, &router, NULL);
 	if (rc != EOK) {
 		printf(NAME ": Invalid address format '%s'.\n", router_str);
Index: uspace/app/netecho/comm.c
===================================================================
--- uspace/app/netecho/comm.c	(revision 5147ff124d29e1b9d3e60be5848187fd214f2924)
+++ uspace/app/netecho/comm.c	(revision b6bbc74b63bc4fbd88824dc1c87c59ea24fcff28)
@@ -37,6 +37,6 @@
 #include <errno.h>
 #include <fibril.h>
-#include <inet/dnsr.h>
 #include <inet/endpoint.h>
+#include <inet/hostport.h>
 #include <inet/udp.h>
 #include <macros.h>
@@ -109,28 +109,8 @@
 }
 
-int comm_open(const char *host, const char *port_s)
+int comm_open_listen(const char *port_s)
 {
 	inet_ep2_t epp;
-	inet_addr_t iaddr;
 	int rc;
-
-	if (host != NULL) {
-		/* Interpret as address */
-		inet_addr_t iaddr;
-		int rc = inet_addr_parse(host, &iaddr);
-
-		if (rc != EOK) {
-			/* Interpret as a host name */
-			dnsr_hostinfo_t *hinfo = NULL;
-			rc = dnsr_name2host(host, &hinfo, ip_any);
-
-			if (rc != EOK) {
-				printf("Error resolving host '%s'.\n", host);
-				goto error;
-			}
-
-			iaddr = hinfo->addr;
-		}
-	}
 
 	char *endptr;
@@ -142,16 +122,39 @@
 
 	inet_ep2_init(&epp);
-	if (host != NULL) {
-		/* Talk to remote host */
-		remote.addr = iaddr;
-		remote.port = port;
+	epp.local.port = port;
 
-		printf("Talking to host %s port %u\n", host, port);
-	} else {
-		/* Listen on local port */
-		epp.local.port = port;
+	printf("Listening on port %u\n", port);
 
-		printf("Listening on port %u\n", port);
+	rc = udp_create(&udp);
+	if (rc != EOK)
+		goto error;
+
+	rc = udp_assoc_create(udp, &epp, &comm_udp_cb, NULL, &assoc);
+	if (rc != EOK)
+		goto error;
+
+	return EOK;
+error:
+	udp_assoc_destroy(assoc);
+	udp_destroy(udp);
+
+	return EIO;
+}
+
+int comm_open_talkto(const char *hostport)
+{
+	inet_ep2_t epp;
+	const char *errmsg;
+	int rc;
+
+	inet_ep2_init(&epp);
+	rc = inet_hostport_plookup_one(hostport, ip_any, &epp.remote, NULL,
+	    &errmsg);
+	if (rc != EOK) {
+		printf("Error: %s (host:port %s).\n", errmsg, hostport);
+		goto error;
 	}
+
+	printf("Talking to %s\n", hostport);
 
 	rc = udp_create(&udp);
Index: uspace/app/netecho/comm.h
===================================================================
--- uspace/app/netecho/comm.h	(revision 5147ff124d29e1b9d3e60be5848187fd214f2924)
+++ uspace/app/netecho/comm.h	(revision b6bbc74b63bc4fbd88824dc1c87c59ea24fcff28)
@@ -39,5 +39,6 @@
 #include <sys/types.h>
 
-extern int comm_open(const char *, const char *);
+extern int comm_open_listen(const char *);
+extern int comm_open_talkto(const char *);
 extern void comm_close(void);
 extern int comm_send(void *, size_t);
Index: uspace/app/netecho/netecho.c
===================================================================
--- uspace/app/netecho/netecho.c	(revision 5147ff124d29e1b9d3e60be5848187fd214f2924)
+++ uspace/app/netecho/netecho.c	(revision b6bbc74b63bc4fbd88824dc1c87c59ea24fcff28)
@@ -115,5 +115,5 @@
 	printf("syntax:\n");
 	printf("\t%s -l <port>\n", NAME);
-	printf("\t%s -d <host> <port> [<message> [<message...>]]\n", NAME);
+	printf("\t%s -d <host>:<port> [<message> [<message...>]]\n", NAME);
 }
 
@@ -151,5 +151,5 @@
 int main(int argc, char *argv[])
 {
-	char *host;
+	char *hostport;
 	char *port;
 	char **msgs;
@@ -167,24 +167,29 @@
 		}
 
-		host = NULL;
 		port = argv[2];
 		msgs = NULL;
+
+		rc = comm_open_listen(port);
+		if (rc != EOK) {
+			printf("Error setting up communication.\n");
+			return 1;
+		}
 	} else if (str_cmp(argv[1], "-d") == 0) {
-		if (argc < 4) {
+		if (argc < 3) {
 			print_syntax();
 			return 1;
 		}
 
-		host = argv[2];
-		port = argv[3];
-		msgs = argv + 4;
+		hostport = argv[2];
+		port = NULL;
+		msgs = argv + 3;
+
+		rc = comm_open_talkto(hostport);
+		if (rc != EOK) {
+			printf("Error setting up communication.\n");
+			return 1;
+		}
 	} else {
 		print_syntax();
-		return 1;
-	}
-
-	rc = comm_open(host, port);
-	if (rc != EOK) {
-		printf("Error setting up communication.\n");
 		return 1;
 	}
Index: uspace/app/nterm/conn.c
===================================================================
--- uspace/app/nterm/conn.c	(revision 5147ff124d29e1b9d3e60be5848187fd214f2924)
+++ uspace/app/nterm/conn.c	(revision b6bbc74b63bc4fbd88824dc1c87c59ea24fcff28)
@@ -37,6 +37,6 @@
 #include <errno.h>
 #include <fibril.h>
-#include <inet/dnsr.h>
 #include <inet/endpoint.h>
+#include <inet/hostport.h>
 #include <inet/tcp.h>
 #include <stdio.h>
@@ -86,37 +86,23 @@
 }
 
-int conn_open(const char *host, const char *port_s)
+int conn_open(const char *hostport)
 {
 	inet_ep2_t epp;
+	const char *errmsg;
+	int rc;
 
-	/* Interpret as address */
-	inet_addr_t iaddr;
-	int rc = inet_addr_parse(host, &iaddr);
-
+	inet_ep2_init(&epp);
+	rc = inet_hostport_plookup_one(hostport, ip_any, &epp.remote, NULL,
+	    &errmsg);
 	if (rc != EOK) {
-		/* Interpret as a host name */
-		dnsr_hostinfo_t *hinfo = NULL;
-		rc = dnsr_name2host(host, &hinfo, ip_any);
-
-		if (rc != EOK) {
-			printf("Error resolving host '%s'.\n", host);
-			goto error;
-		}
-
-		iaddr = hinfo->addr;
-	}
-
-	char *endptr;
-	uint16_t port = strtol(port_s, &endptr, 10);
-	if (*endptr != '\0') {
-		printf("Invalid port number %s\n", port_s);
+		printf("Error: %s (host:port %s).\n", errmsg, hostport);
 		goto error;
 	}
 
-	inet_ep2_init(&epp);
-	epp.remote.addr = iaddr;
-	epp.remote.port = port;
-
-	printf("Connecting to host %s port %u\n", host, port);
+	printf("Connecting to %s\n", hostport);
+	char *s;
+	rc = inet_addr_format(&epp.remote.addr, &s);
+	if (rc != EOK)
+		goto error;
 
 	rc = tcp_create(&tcp);
Index: uspace/app/nterm/conn.h
===================================================================
--- uspace/app/nterm/conn.h	(revision 5147ff124d29e1b9d3e60be5848187fd214f2924)
+++ uspace/app/nterm/conn.h	(revision b6bbc74b63bc4fbd88824dc1c87c59ea24fcff28)
@@ -39,5 +39,5 @@
 #include <sys/types.h>
 
-extern int conn_open(const char *, const char *);
+extern int conn_open(const char *);
 extern int conn_send(void *, size_t);
 
Index: uspace/app/nterm/nterm.c
===================================================================
--- uspace/app/nterm/nterm.c	(revision 5147ff124d29e1b9d3e60be5848187fd214f2924)
+++ uspace/app/nterm/nterm.c	(revision b6bbc74b63bc4fbd88824dc1c87c59ea24fcff28)
@@ -104,5 +104,5 @@
 static void print_syntax(void)
 {
-	printf("syntax: nterm <host> <port>\n");
+	printf("syntax: nterm <host>:<port>\n");
 }
 
@@ -112,10 +112,10 @@
 	int rc;
 
-	if (argc != 3) {
+	if (argc != 2) {
 		print_syntax();
 		return 1;
 	}
 
-	rc = conn_open(argv[1], argv[2]);
+	rc = conn_open(argv[1]);
 	if (rc != EOK) {
 		printf("Error connecting.\n");
Index: uspace/app/ping/ping.c
===================================================================
--- uspace/app/ping/ping.c	(revision 5147ff124d29e1b9d3e60be5848187fd214f2924)
+++ uspace/app/ping/ping.c	(revision b6bbc74b63bc4fbd88824dc1c87c59ea24fcff28)
@@ -37,6 +37,6 @@
 #include <errno.h>
 #include <fibril_synch.h>
-#include <inet/dnsr.h>
 #include <inet/addr.h>
+#include <inet/host.h>
 #include <inet/inetping.h>
 #include <io/console.h>
@@ -214,8 +214,9 @@
 int main(int argc, char *argv[])
 {
-	dnsr_hostinfo_t *hinfo = NULL;
 	char *asrc = NULL;
 	char *adest = NULL;
 	char *sdest = NULL;
+	char *host;
+	const char *errmsg;
 	ip_ver_t ip_ver = ip_any;
 	
@@ -260,15 +261,11 @@
 	}
 	
-	/* Parse destination address */
-	rc = inet_addr_parse(argv[optind], &dest_addr);
-	if (rc != EOK) {
-		/* Try interpreting as a host name */
-		rc = dnsr_name2host(argv[optind], &hinfo, ip_ver);
-		if (rc != EOK) {
-			printf("Error resolving host '%s'.\n", argv[optind]);
-			goto error;
-		}
-		
-		dest_addr = hinfo->addr;
+	host = argv[optind];
+	
+	/* Look up host */
+	rc = inet_host_plookup_one(host, ip_ver, &dest_addr, NULL, &errmsg);
+	if (rc != EOK) {
+		printf("Error resolving host '%s' (%s).\n", host, errmsg);
+		goto error;
 	}
 	
@@ -292,13 +289,8 @@
 	}
 	
-	if (hinfo != NULL) {
-		rc = asprintf(&sdest, "%s (%s)", hinfo->cname, adest);
-		if (rc < 0) {
-			printf("Out of memory.\n");
-			goto error;
-		}
-	} else {
-		sdest = adest;
-		adest = NULL;
+	rc = asprintf(&sdest, "%s (%s)", host, adest);
+	if (rc < 0) {
+		printf("Out of memory.\n");
+		goto error;
 	}
 	
@@ -330,5 +322,4 @@
 	free(adest);
 	free(sdest);
-	dnsr_hostinfo_destroy(hinfo);
 	return 0;
 	
@@ -337,5 +328,4 @@
 	free(adest);
 	free(sdest);
-	dnsr_hostinfo_destroy(hinfo);
 	return 1;
 }
