Index: uspace/srv/inet/addrobj.c
===================================================================
--- uspace/srv/inet/addrobj.c	(revision 291c79201b01e9fc4b6b6d67dd411a2556b9655a)
+++ uspace/srv/inet/addrobj.c	(revision fa101c4ef128bcbc266ee366dd9b3fcfe2bcf4ab)
@@ -41,4 +41,5 @@
 #include <ipc/loc.h>
 #include <stdlib.h>
+#include <str.h>
 
 #include "addrobj.h"
@@ -119,5 +120,5 @@
 			fibril_mutex_unlock(&addr_list_lock);
 			log_msg(LVL_DEBUG, "inet_addrobj_find: found %p",
-			    addr);
+			    naddr);
 			return naddr;
 		}
@@ -125,4 +126,35 @@
 
 	log_msg(LVL_DEBUG, "inet_addrobj_find: Not found");
+	fibril_mutex_unlock(&addr_list_lock);
+
+	return NULL;
+}
+
+/** Find address object on a link, with a specific name.
+ *
+ * @param name	Address object name
+ * @param ilink	Inet link
+ * @return	Address object
+ */
+inet_addrobj_t *inet_addrobj_find_by_name(const char *name, inet_link_t *ilink)
+{
+	log_msg(LVL_DEBUG, "inet_addrobj_find_by_name('%s', '%s')",
+	    name, ilink->svc_name);
+
+	fibril_mutex_lock(&addr_list_lock);
+
+	list_foreach(addr_list, link) {
+		inet_addrobj_t *naddr = list_get_instance(link,
+		    inet_addrobj_t, addr_list);
+
+		if (naddr->ilink == ilink && str_cmp(naddr->name, name) == 0) {
+			fibril_mutex_unlock(&addr_list_lock);
+			log_msg(LVL_DEBUG, "inet_addrobj_find_by_name: found %p",
+			    naddr);
+			return naddr;
+		}
+	}
+
+	log_msg(LVL_DEBUG, "inet_addrobj_find_by_name: Not found");
 	fibril_mutex_unlock(&addr_list_lock);
 
Index: uspace/srv/inet/addrobj.h
===================================================================
--- uspace/srv/inet/addrobj.h	(revision 291c79201b01e9fc4b6b6d67dd411a2556b9655a)
+++ uspace/srv/inet/addrobj.h	(revision fa101c4ef128bcbc266ee366dd9b3fcfe2bcf4ab)
@@ -53,4 +53,5 @@
 extern void inet_addrobj_remove(inet_addrobj_t *);
 extern inet_addrobj_t *inet_addrobj_find(inet_addr_t *, inet_addrobj_find_t);
+extern inet_addrobj_t *inet_addrobj_find_by_name(const char *, inet_link_t *);
 extern inet_addrobj_t *inet_addrobj_get_by_id(sysarg_t);
 extern int inet_addrobj_send_dgram(inet_addrobj_t *, inet_dgram_t *,
Index: uspace/srv/inet/inetcfg.c
===================================================================
--- uspace/srv/inet/inetcfg.c	(revision 291c79201b01e9fc4b6b6d67dd411a2556b9655a)
+++ uspace/srv/inet/inetcfg.c	(revision fa101c4ef128bcbc266ee366dd9b3fcfe2bcf4ab)
@@ -85,5 +85,14 @@
 static int inetcfg_addr_delete(sysarg_t addr_id)
 {
-	return ENOTSUP;
+	inet_addrobj_t *addr;
+
+	addr = inet_addrobj_get_by_id(addr_id);
+	if (addr == NULL)
+		return ENOENT;
+
+	inet_addrobj_remove(addr);
+	inet_addrobj_delete(addr);
+
+	return EOK;
 }
 
@@ -100,4 +109,25 @@
 	ainfo->name = str_dup(addr->name);
 
+	return EOK;
+}
+
+static int inetcfg_addr_get_id(char *name, sysarg_t link_id, sysarg_t *addr_id)
+{
+	inet_link_t *ilink;
+	inet_addrobj_t *addr;
+
+	ilink = inet_link_get_by_id(link_id);
+	if (ilink == NULL) {
+		log_msg(LVL_DEBUG, "Link %zu not found.", (size_t) link_id);
+		return ENOENT;
+	}
+
+	addr = inet_addrobj_find_by_name(name, ilink);
+	if (addr == NULL) {
+		log_msg(LVL_DEBUG, "Address '%s' not found.", name);
+		return ENOENT;
+	}
+
+	*addr_id = addr->id;
 	return EOK;
 }
@@ -202,4 +232,28 @@
 	async_answer_3(callid, retval, ainfo.naddr.ipv4, ainfo.naddr.bits,
 	    ainfo.ilink);
+}
+
+static void inetcfg_addr_get_id_srv(ipc_callid_t callid, ipc_call_t *call)
+{
+	char *name;
+	sysarg_t link_id;
+	sysarg_t addr_id;
+	int rc;
+
+	log_msg(LVL_DEBUG, "inetcfg_addr_get_id_srv()");
+
+	link_id = IPC_GET_ARG1(*call);
+
+	rc = async_data_write_accept((void **) &name, true, 0, LOC_NAME_MAXLEN,
+	    0, NULL);
+	if (rc != EOK) {
+		async_answer_0(callid, rc);
+		return;
+	}
+
+	addr_id = 0;
+	rc = inetcfg_addr_get_id(name, link_id, &addr_id);
+	free(name);
+	async_answer_1(callid, rc, addr_id);
 }
 
@@ -333,4 +387,7 @@
 			inetcfg_addr_get_srv(callid, &call);
 			break;
+		case INETCFG_ADDR_GET_ID:
+			inetcfg_addr_get_id_srv(callid, &call);
+			break;
 		case INETCFG_GET_ADDR_LIST:
 			inetcfg_get_addr_list_srv(callid, &call);
