Index: uspace/app/inet/inet.c
===================================================================
--- uspace/app/inet/inet.c	(revision f8dbc124c9b120b592ec947e16511affb3ae24e7)
+++ uspace/app/inet/inet.c	(revision bf9e6fca42015e5e14c445e502030671d36612e0)
@@ -187,6 +187,6 @@
 	rc = inetcfg_addr_create_static(aobj_name, &naddr, link_id, &addr_id);
 	if (rc != EOK) {
-		printf(NAME ": Failed creating static address '%s' (%d)\n",
-		    aobj_name, rc);
+		printf(NAME ": Failed creating static address '%s' (%s)\n",
+		    aobj_name, str_error(rc));
 		return EIO;
 	}
Index: uspace/srv/net/inetsrv/addrobj.c
===================================================================
--- uspace/srv/net/inetsrv/addrobj.c	(revision f8dbc124c9b120b592ec947e16511affb3ae24e7)
+++ uspace/srv/net/inetsrv/addrobj.c	(revision bf9e6fca42015e5e14c445e502030671d36612e0)
@@ -48,4 +48,6 @@
 #include "inet_util.h"
 
+static inet_addrobj_t *inet_addrobj_find_by_name_locked(const char *, inet_link_t *);
+
 static FIBRIL_MUTEX_INITIALIZE(addr_list_lock);
 static LIST_INITIALIZE(addr_list);
@@ -77,9 +79,20 @@
 }
 
-void inet_addrobj_add(inet_addrobj_t *addr)
-{
-	fibril_mutex_lock(&addr_list_lock);
+int inet_addrobj_add(inet_addrobj_t *addr)
+{
+	inet_addrobj_t *aobj;
+
+	fibril_mutex_lock(&addr_list_lock);
+	aobj = inet_addrobj_find_by_name_locked(addr->name, addr->ilink);
+	if (aobj != NULL) {
+		/* Duplicate address name */
+		fibril_mutex_unlock(&addr_list_lock);
+		return EEXISTS;
+	}
+
 	list_append(&addr->addr_list, &addr_list);
 	fibril_mutex_unlock(&addr_list_lock);
+
+	return EOK;
 }
 
@@ -130,11 +143,11 @@
  * @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')",
+static inet_addrobj_t *inet_addrobj_find_by_name_locked(const char *name, inet_link_t *ilink)
+{
+	assert(fibril_mutex_is_locked(&addr_list_lock));
+
+	log_msg(LVL_DEBUG, "inet_addrobj_find_by_name_locked('%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,
@@ -142,6 +155,5 @@
 
 		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",
+			log_msg(LVL_DEBUG, "inet_addrobj_find_by_name_locked: found %p",
 			    naddr);
 			return naddr;
@@ -149,8 +161,28 @@
 	}
 
-	log_msg(LVL_DEBUG, "inet_addrobj_find_by_name: Not found");
-	fibril_mutex_unlock(&addr_list_lock);
+	log_msg(LVL_DEBUG, "inet_addrobj_find_by_name_locked: Not found");
 
 	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)
+{
+	inet_addrobj_t *aobj;
+
+	log_msg(LVL_DEBUG, "inet_addrobj_find_by_name('%s', '%s')",
+	    name, ilink->svc_name);
+
+	fibril_mutex_lock(&addr_list_lock);
+	aobj = inet_addrobj_find_by_name_locked(name, ilink);
+	fibril_mutex_unlock(&addr_list_lock);
+
+	return aobj;
 }
 
Index: uspace/srv/net/inetsrv/addrobj.h
===================================================================
--- uspace/srv/net/inetsrv/addrobj.h	(revision f8dbc124c9b120b592ec947e16511affb3ae24e7)
+++ uspace/srv/net/inetsrv/addrobj.h	(revision bf9e6fca42015e5e14c445e502030671d36612e0)
@@ -50,5 +50,5 @@
 extern inet_addrobj_t *inet_addrobj_new(void);
 extern void inet_addrobj_delete(inet_addrobj_t *);
-extern void inet_addrobj_add(inet_addrobj_t *);
+extern int inet_addrobj_add(inet_addrobj_t *);
 extern void inet_addrobj_remove(inet_addrobj_t *);
 extern inet_addrobj_t *inet_addrobj_find(inet_addr_t *, inet_addrobj_find_t);
Index: uspace/srv/net/inetsrv/inet_link.c
===================================================================
--- uspace/srv/net/inetsrv/inet_link.c	(revision f8dbc124c9b120b592ec947e16511affb3ae24e7)
+++ uspace/srv/net/inetsrv/inet_link.c	(revision bf9e6fca42015e5e14c445e502030671d36612e0)
@@ -207,5 +207,11 @@
 	addr->ilink = ilink;
 	addr->name = str_dup("v4a");
-	inet_addrobj_add(addr);
+	rc = inet_addrobj_add(addr);
+	if (rc != EOK) {
+		log_msg(LVL_ERROR, "Failed setting IP address on internet link.");
+		inet_addrobj_delete(addr);
+		/* XXX Roll back */
+		return rc;
+	}
 
 	iaddr.ipv4 = addr->naddr.ipv4;
@@ -213,4 +219,6 @@
 	if (rc != EOK) {
 		log_msg(LVL_ERROR, "Failed setting IP address on internet link.");
+		inet_addrobj_remove(addr);
+		inet_addrobj_delete(addr);
 		/* XXX Roll back */
 		return rc;
Index: uspace/srv/net/inetsrv/inetcfg.c
===================================================================
--- uspace/srv/net/inetsrv/inetcfg.c	(revision f8dbc124c9b120b592ec947e16511affb3ae24e7)
+++ uspace/srv/net/inetsrv/inetcfg.c	(revision bf9e6fca42015e5e14c445e502030671d36612e0)
@@ -75,5 +75,10 @@
 	addr->ilink = ilink;
 	addr->name = str_dup(name);
-	inet_addrobj_add(addr);
+	rc = inet_addrobj_add(addr);
+	if (rc != EOK) {
+		log_msg(LVL_DEBUG, "Duplicate address name '%s'.", addr->name);
+		inet_addrobj_delete(addr);
+		return rc;
+	}
 
 	iaddr.ipv4 = addr->naddr.ipv4;
