Index: uspace/srv/bd/sata_bd/sata_bd.c
===================================================================
--- uspace/srv/bd/sata_bd/sata_bd.c	(revision c3f7d37086023df6580ccd4691db2d699c80ccf6)
+++ uspace/srv/bd/sata_bd/sata_bd.c	(revision 048cd69e69ce8a5ca8bbf5d8a5b5451745dca93a)
@@ -147,5 +147,5 @@
  *
  */
-static int get_sata_disks()
+static int get_sata_disks(void)
 {
 	devman_handle_t root_fun;
Index: uspace/srv/klog/klog.c
===================================================================
--- uspace/srv/klog/klog.c	(revision c3f7d37086023df6580ccd4691db2d699c80ccf6)
+++ uspace/srv/klog/klog.c	(revision 048cd69e69ce8a5ca8bbf5d8a5b5451745dca93a)
@@ -51,5 +51,5 @@
 #include <io/logctl.h>
 
-#define NAME       "klog"
+#define NAME  "klog"
 
 typedef size_t __attribute__ ((aligned(1))) unaligned_size_t;
@@ -98,5 +98,5 @@
  *
  */
-static void producer()
+static void producer(void)
 {
 	int read = klog_read(buffer, BUFFER_SIZE);
Index: uspace/srv/locsrv/locsrv.c
===================================================================
--- uspace/srv/locsrv/locsrv.c	(revision c3f7d37086023df6580ccd4691db2d699c80ccf6)
+++ uspace/srv/locsrv/locsrv.c	(revision 048cd69e69ce8a5ca8bbf5d8a5b5451745dca93a)
@@ -1357,4 +1357,7 @@
 	cat = category_new("nic");
 	categ_dir_add_cat(&cdir, cat);
+	
+	cat = category_new("ieee80211");
+	categ_dir_add_cat(&cdir, cat);
 
 	cat = category_new("visualizer");
Index: uspace/srv/net/dhcp/dhcp.c
===================================================================
--- uspace/srv/net/dhcp/dhcp.c	(revision c3f7d37086023df6580ccd4691db2d699c80ccf6)
+++ uspace/srv/net/dhcp/dhcp.c	(revision 048cd69e69ce8a5ca8bbf5d8a5b5451745dca93a)
@@ -419,4 +419,22 @@
 }
 
+static int dhcp_discover_proc(dhcp_link_t *dlink)
+{
+	dlink->state = ds_selecting;
+
+	int rc = dhcp_send_discover(dlink);
+	if (rc != EOK)
+		return EIO;
+
+	dlink->retries_left = dhcp_discover_retries;
+	
+	if ((dlink->timeout->state == fts_not_set) ||
+	    (dlink->timeout->state == fts_fired))
+		fibril_timer_set(dlink->timeout, dhcp_discover_timeout_val,
+		    dhcpsrv_discover_timeout, dlink);
+	
+	return rc;
+}
+
 int dhcpsrv_link_add(service_id_t link_id)
 {
@@ -460,8 +478,6 @@
 	}
 
-	dlink->state = ds_selecting;
-
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "Send DHCPDISCOVER");
-	rc = dhcp_send_discover(dlink);
+	rc = dhcp_discover_proc(dlink);
 	if (rc != EOK) {
 		log_msg(LOG_DEFAULT, LVL_ERROR, "Error sending DHCPDISCOVER.");
@@ -470,8 +486,4 @@
 		goto error;
 	}
-
-	dlink->retries_left = dhcp_discover_retries;
-	fibril_timer_set(dlink->timeout, dhcp_discover_timeout_val,
-	    dhcpsrv_discover_timeout, dlink);
 
 	list_append(&dlink->links, &dhcp_links);
@@ -490,4 +502,19 @@
 }
 
+int dhcpsrv_discover(service_id_t link_id)
+{
+	log_msg(LOG_DEFAULT, LVL_DEBUG, "dhcpsrv_link_add(%zu)", link_id);
+	
+	dhcp_link_t *dlink = dhcpsrv_link_find(link_id);
+	
+	if (dlink == NULL) {
+		log_msg(LOG_DEFAULT, LVL_NOTE, "Link %zu doesn't exist",
+		    link_id);
+		return EINVAL;
+	}
+	
+	return dhcp_discover_proc(dlink);
+}
+
 static void dhcpsrv_recv_offer(dhcp_link_t *dlink, dhcp_offer_t *offer)
 {
@@ -535,4 +562,7 @@
 		return;
 	}
+
+	/* XXX Work around multiple simultaneous sessions issue */
+	dhcp_transport_fini(&dlink->dt);
 
 	log_msg(LOG_DEFAULT, LVL_NOTE, "%s: Successfully configured.",
Index: uspace/srv/net/dhcp/dhcp.h
===================================================================
--- uspace/srv/net/dhcp/dhcp.h	(revision c3f7d37086023df6580ccd4691db2d699c80ccf6)
+++ uspace/srv/net/dhcp/dhcp.h	(revision 048cd69e69ce8a5ca8bbf5d8a5b5451745dca93a)
@@ -43,4 +43,5 @@
 extern int dhcpsrv_link_add(service_id_t);
 extern int dhcpsrv_link_remove(service_id_t);
+extern int dhcpsrv_discover(service_id_t);
 
 #endif
Index: uspace/srv/net/dhcp/main.c
===================================================================
--- uspace/srv/net/dhcp/main.c	(revision c3f7d37086023df6580ccd4691db2d699c80ccf6)
+++ uspace/srv/net/dhcp/main.c	(revision 048cd69e69ce8a5ca8bbf5d8a5b5451745dca93a)
@@ -109,4 +109,17 @@
 }
 
+static void dhcp_discover_srv(ipc_callid_t callid, ipc_call_t *call)
+{
+	sysarg_t link_id;
+	int rc;
+
+	log_msg(LOG_DEFAULT, LVL_DEBUG, "dhcp_discover_srv()");
+
+	link_id = IPC_GET_ARG1(*call);
+
+	rc = dhcpsrv_discover(link_id);
+	async_answer_0(callid, rc);
+}
+
 static void dhcp_client_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
@@ -133,4 +146,7 @@
 		case DHCP_LINK_REMOVE:
 			dhcp_link_remove_srv(callid, &call);
+			break;
+		case DHCP_DISCOVER:
+			dhcp_discover_srv(callid, &call);
 			break;
 		default:
