diff --git a/libraries/SocketWrapper/src/SocketHelpers.cpp b/libraries/SocketWrapper/src/SocketHelpers.cpp
index 691f7cbfa..67aae7890 100644
--- a/libraries/SocketWrapper/src/SocketHelpers.cpp
+++ b/libraries/SocketWrapper/src/SocketHelpers.cpp
@@ -62,8 +62,9 @@ arduino::IPAddress arduino::MbedSocketClass::dnsIP(int n) {
 }
 
 void arduino::MbedSocketClass::config(arduino::IPAddress local_ip) {
-  nsapi_addr_t convertedIP = { NSAPI_IPv4, { local_ip[0], local_ip[1], local_ip[2], local_ip[3] } };
-  _ip = SocketAddress(convertedIP);
+  IPAddress dns = local_ip;
+  dns[3] = 1;
+  config(local_ip, dns);
 }
 
 void arduino::MbedSocketClass::config(const char* local_ip) {
@@ -71,20 +72,27 @@ void arduino::MbedSocketClass::config(const char* local_ip) {
 }
 
 void arduino::MbedSocketClass::config(IPAddress local_ip, IPAddress dns_server) {
-  config(local_ip);
-  setDNS(dns_server);
+  IPAddress gw = local_ip;
+  gw[3] = 1;
+  config(local_ip, dns_server, gw);
 }
 
 void arduino::MbedSocketClass::config(IPAddress local_ip, IPAddress dns_server, IPAddress gateway) {
-  config(local_ip, dns_server);
-  nsapi_addr_t convertedGatewayIP = { NSAPI_IPv4, { gateway[0], gateway[1], gateway[2], gateway[3] } };
-  _gateway = SocketAddress(convertedGatewayIP);
+  IPAddress nm(255, 255, 255, 0);
+  config(local_ip, dns_server, gateway, nm);
 }
 
 void arduino::MbedSocketClass::config(IPAddress local_ip, IPAddress dns_server, IPAddress gateway, IPAddress subnet) {
-  config(local_ip, dns_server, gateway);
+  _useStaticIP = (local_ip != INADDR_NONE);
+  if (!_useStaticIP)
+    return;
+  nsapi_addr_t convertedIP = { NSAPI_IPv4, { local_ip[0], local_ip[1], local_ip[2], local_ip[3] } };
+  _ip = SocketAddress(convertedIP);
+  nsapi_addr_t convertedGatewayIP = { NSAPI_IPv4, { gateway[0], gateway[1], gateway[2], gateway[3] } };
+  _gateway = SocketAddress(convertedGatewayIP);
   nsapi_addr_t convertedSubnetMask = { NSAPI_IPv4, { subnet[0], subnet[1], subnet[2], subnet[3] } };
   _netmask = SocketAddress(convertedSubnetMask);
+  setDNS(dns_server);
 }
 
 void arduino::MbedSocketClass::setDNS(IPAddress dns_server1) {
diff --git a/libraries/SocketWrapper/src/SocketHelpers.h b/libraries/SocketWrapper/src/SocketHelpers.h
index 5ab408267..52b2ff777 100644
--- a/libraries/SocketWrapper/src/SocketHelpers.h
+++ b/libraries/SocketWrapper/src/SocketHelpers.h
@@ -144,6 +144,7 @@ class MbedSocketClass {
   SocketAddress _netmask = nullptr;
   SocketAddress _dnsServer1 = nullptr;
   SocketAddress _dnsServer2 = nullptr;
+  bool _useStaticIP = false;
 
   voidFuncPtr _feed_watchdog_func = nullptr;
 
diff --git a/libraries/WiFi/src/WiFi.cpp b/libraries/WiFi/src/WiFi.cpp
index 6f017972b..c2f3c90d5 100644
--- a/libraries/WiFi/src/WiFi.cpp
+++ b/libraries/WiFi/src/WiFi.cpp
@@ -27,6 +27,15 @@ int arduino::WiFiClass::begin(const char* ssid, const char* passphrase) {
     return _currentNetworkStatus;
   }
 
+  wifi_if->set_dhcp(!_useStaticIP);
+  if (_useStaticIP) {
+    wifi_if->set_network(_ip, _netmask, _gateway);
+    char if_name[5];
+    wifi_if->get_interface_name(if_name);
+    wifi_if->add_dns_server(_dnsServer2, if_name);
+    wifi_if->add_dns_server(_dnsServer1, if_name); // pushes dnsServer2 at index 1
+  }
+
   nsapi_error_t result = wifi_if->connect(ssid, passphrase, ap_list[connected_ap].get_security());
 
   if(result == NSAPI_ERROR_IS_CONNECTED) {
@@ -39,8 +48,7 @@ int arduino::WiFiClass::begin(const char* ssid, const char* passphrase) {
 
 //Config Wifi to set Static IP && Disable DHCP
 void arduino::WiFiClass::config(const char* localip, const char* netmask, const char* gateway){
-  wifi_if->set_network(localip, netmask, gateway);
-  wifi_if->set_dhcp(false);
+  SocketHelpers::config(IPAddress(localip), dnsIP(0), IPAddress(gateway), IPAddress(netmask));
 }
 
 int arduino::WiFiClass::beginAP(const char* ssid, const char* passphrase, uint8_t channel) {