diff --git a/examples/access_point/access_point.c b/examples/access_point/access_point.c
index 4adfca2..20e9d88 100644
--- a/examples/access_point/access_point.c
+++ b/examples/access_point/access_point.c
@@ -50,7 +50,7 @@ static void telnetTask(void *pvParameters)
 {
     ip_addr_t first_client_ip;
     IP4_ADDR(&first_client_ip, 172, 16, 0, 2);
-    dhcpserver_start(sdk_system_get_netif(SOFTAP_IF), &first_client_ip, 4);
+    dhcpserver_start(&first_client_ip, 4);
 
     struct netconn *nc = netconn_new(NETCONN_TCP);
     if (!nc)
diff --git a/examples/tcp_non_blocking/tcp_non_blocking.c b/examples/tcp_non_blocking/tcp_non_blocking.c
index 6fe4e99..4e35aa2 100644
--- a/examples/tcp_non_blocking/tcp_non_blocking.c
+++ b/examples/tcp_non_blocking/tcp_non_blocking.c
@@ -193,7 +193,7 @@ void user_init(void)
 
     ip_addr_t first_client_ip;
     IP4_ADDR(&first_client_ip, 172, 16, 0, 2);
-    dhcpserver_start(sdk_system_get_netif(SOFTAP_IF), &first_client_ip, 4);
+    dhcpserver_start(&first_client_ip, 4);
     printf("DHCP started\n");
 
     //Create a queue to store events on netconns
diff --git a/extras/dhcpserver/dhcpserver.c b/extras/dhcpserver/dhcpserver.c
index 12acd2c..6b9655c 100644
--- a/extras/dhcpserver/dhcpserver.c
+++ b/extras/dhcpserver/dhcpserver.c
@@ -3,7 +3,11 @@
  * Based on RFC2131 http://www.ietf.org/rfc/rfc2131.txt
  * ... although not fully RFC compliant yet.
  *
- * Probably allocates more memory than it should, it should be possible to reuse netbufs in most cases.
+ * TODO
+ * * Allow binding on a single interface only (for mixed AP/client mode), lwip seems to make it hard to
+ *   listen for or send broadcasts on a specific interface only.
+ *
+ * * Probably allocates more memory than it should, it should be possible to reuse netbufs in most cases.
  *
  * Part of esp-open-rtos
  * Copyright (C) 2015 Superhouse Automation Pty Ltd
@@ -88,12 +92,8 @@ inline static void sprintf_ipaddr(const ip4_addr_t *addr, char *dest)
                 ip4_addr2(addr), ip4_addr3(addr), ip4_addr4(addr));
 }
 
-void dhcpserver_start(struct netif *server_if, const ip_addr_t *first_client_addr, uint8_t max_leases)
+void dhcpserver_start(const ip4_addr_t *first_client_addr, uint8_t max_leases)
 {
-    if(!server_if){
-        printf("DHCP Server Error: server_if is NULL.\r\n");
-        return;
-    }
     /* Stop any existing running dhcpserver */
     if (dhcpserver_task_handle)
         dhcpserver_stop();
@@ -109,7 +109,7 @@ void dhcpserver_start(struct netif *server_if, const ip_addr_t *first_client_add
     ip4_addr_set_zero(&state->router);
     ip4_addr_set_zero(&state->dns);
 
-    xTaskCreate(dhcpserver_task, "DHCPServer", 768, server_if, 8, &dhcpserver_task_handle);
+    xTaskCreate(dhcpserver_task, "DHCP Server", 448, NULL, 2, &dhcpserver_task_handle);
 }
 
 void dhcpserver_stop(void)
@@ -134,7 +134,7 @@ void dhcpserver_set_dns(const ip4_addr_t *dns)
 static void dhcpserver_task(void *pxParameter)
 {
     /* netif_list isn't assigned until after user_init completes, which is why we do it inside the task */
-    state->server_if = pxParameter;
+    state->server_if = netif_list; /* TODO: Make this configurable */
 
     state->nc = netconn_new (NETCONN_UDP);
     if(!state->nc) {
@@ -143,7 +143,7 @@ static void dhcpserver_task(void *pxParameter)
     }
 
     netconn_bind(state->nc, IP4_ADDR_ANY, LWIP_IANA_PORT_DHCP_SERVER);
-    netconn_bind_if(state->nc, netif_get_index(state->server_if));
+    netconn_bind_if (state->nc, netif_get_index(state->server_if));
 
     while(1)
     {
diff --git a/extras/dhcpserver/include/dhcpserver.h b/extras/dhcpserver/include/dhcpserver.h
index a6ac608..62fa0ac 100644
--- a/extras/dhcpserver/include/dhcpserver.h
+++ b/extras/dhcpserver/include/dhcpserver.h
@@ -25,10 +25,8 @@ extern "C" {
    first_client_addr is the IP address of the first lease to be handed
    to a client.  Subsequent lease addresses are calculated by
    incrementing the final octet of the IPv4 address, up to max_leases.
-
-   The server will wait for requests on server_if interface.
 */
-void dhcpserver_start(struct netif *server_if, const ip_addr_t *first_client_addr, uint8_t max_leases);
+void dhcpserver_start(const ip4_addr_t *first_client_addr, uint8_t max_leases);
 
 void dhcpserver_get_lease(const ip4_addr_t *first_client_addr, uint8_t max_leases);
 
diff --git a/extras/wificfg/wificfg.c b/extras/wificfg/wificfg.c
index 605e31f..708af29 100644
--- a/extras/wificfg/wificfg.c
+++ b/extras/wificfg/wificfg.c
@@ -1995,7 +1995,7 @@ void wificfg_init(uint32_t port, const wificfg_dispatch *dispatch)
                 if (wifi_ap_dns < 0 || wifi_ap_dns > 1)
                     wifi_ap_dns = 1;
 
-                dhcpserver_start(sdk_system_get_netif(SOFTAP_IF), &first_client_ip, wifi_ap_dhcp_leases);
+                dhcpserver_start(&first_client_ip, wifi_ap_dhcp_leases);
                 dhcpserver_set_router(&ap_ip.ip);
                 if (wifi_ap_dns) {
                     dhcpserver_set_dns(&ap_ip.ip);
diff --git a/tests/cases/04_wifi_basic.c b/tests/cases/04_wifi_basic.c
index 9fa8be2..8deef3e 100644
--- a/tests/cases/04_wifi_basic.c
+++ b/tests/cases/04_wifi_basic.c
@@ -43,7 +43,7 @@ static void server_task(void *pvParameters)
 
     ip_addr_t first_client_ip;
     IP4_ADDR(&first_client_ip, 172, 16, 0, 2);
-    dhcpserver_start(sdk_system_get_netif(SOFTAP_IF), &first_client_ip, 4);
+    dhcpserver_start(&first_client_ip, 4);
 
     char buf[BUF_SIZE];
     struct netconn *nc = netconn_new(NETCONN_TCP);