diff --git a/src/Arduino_ConnectionHandler.h b/src/Arduino_ConnectionHandler.h
index 6496b931..8099e79e 100644
--- a/src/Arduino_ConnectionHandler.h
+++ b/src/Arduino_ConnectionHandler.h
@@ -217,12 +217,13 @@ class ConnectionHandler {
     virtual NetworkConnectionState update_handleConnected    () = 0;
     virtual NetworkConnectionState update_handleDisconnecting() = 0;
     virtual NetworkConnectionState update_handleDisconnected () = 0;
-
+    unsigned long _lastConnectionTickTime;
+    NetworkConnectionState _current_net_connection_state;
 
   private:
 
-    unsigned long _lastConnectionTickTime;
-    NetworkConnectionState _current_net_connection_state;
+    
+    
     OnNetworkEventCallback  _on_connect_event_callback = NULL,
                             _on_disconnect_event_callback = NULL,
                             _on_error_event_callback = NULL;
@@ -230,6 +231,7 @@ class ConnectionHandler {
 
 #if defined(BOARD_HAS_WIFI)
   #include "Arduino_WiFiConnectionHandler.h"
+  #include "Arduino_WiFiConnectionHandlerDynamic.h"
 #elif defined(BOARD_HAS_GSM)
   #include "Arduino_GSMConnectionHandler.h"
 #elif defined(BOARD_HAS_NB)
diff --git a/src/Arduino_WiFiConnectionHandler.cpp b/src/Arduino_WiFiConnectionHandler.cpp
index e1a1f12d..4c1c8a64 100644
--- a/src/Arduino_WiFiConnectionHandler.cpp
+++ b/src/Arduino_WiFiConnectionHandler.cpp
@@ -85,7 +85,7 @@ NetworkConnectionState WiFiConnectionHandler::update_handleInit()
   Debug.print(DBG_ERROR, F("WiFi status ESP: %d"), WiFi.status());
   WiFi.disconnect();
   delay(300);
-  WiFi.begin(_ssid, _pass);
+  WiFi.begin(_ssid.c_str(), _pass.c_str());
   delay(1000);
 #endif /* #if !defined(BOARD_ESP8266) && !defined(ESP32) */
 
@@ -97,14 +97,14 @@ NetworkConnectionState WiFiConnectionHandler::update_handleConnecting()
 #if !defined(BOARD_ESP8266) && !defined(ESP32)
   if (WiFi.status() != WL_CONNECTED)
   {
-    WiFi.begin(_ssid, _pass);
+    WiFi.begin(_ssid.c_str(), _pass.c_str());
   }
 #endif /* ifndef BOARD_ESP8266 */
 
   if (WiFi.status() != NETWORK_CONNECTED)
   {
 #if !defined(__AVR__)
-    Debug.print(DBG_ERROR, F("Connection to \"%s\" failed"), _ssid);
+    Debug.print(DBG_ERROR, F("Connection to \"%s\" failed"), _ssid.c_str());
     Debug.print(DBG_INFO, F("Retrying in  \"%d\" milliseconds"), CHECK_INTERVAL_TABLE[static_cast<unsigned int>(NetworkConnectionState::CONNECTING)]);
 #endif
     return NetworkConnectionState::CONNECTING;
@@ -112,7 +112,7 @@ NetworkConnectionState WiFiConnectionHandler::update_handleConnecting()
   else
   {
 #if !defined(__AVR__)
-    Debug.print(DBG_INFO, F("Connected to \"%s\""), _ssid);
+    Debug.print(DBG_INFO, F("Connected to \"%s\""), _ssid.c_str());
 #endif
 #if defined(BOARD_ESP8266) || defined(ESP32)
   configTime(0, 0, "time.arduino.cc", "pool.ntp.org", "time.nist.gov");
@@ -127,7 +127,7 @@ NetworkConnectionState WiFiConnectionHandler::update_handleConnected()
   {
 #if !defined(__AVR__)
     Debug.print(DBG_VERBOSE, F("WiFi.status(): %d"), WiFi.status());
-    Debug.print(DBG_ERROR, F("Connection to \"%s\" lost."), _ssid);
+    Debug.print(DBG_ERROR, F("Connection to \"%s\" lost."), _ssid.c_str());
 #endif
     if (_keep_alive)
     {
diff --git a/src/Arduino_WiFiConnectionHandler.h b/src/Arduino_WiFiConnectionHandler.h
index 56670793..986376a9 100644
--- a/src/Arduino_WiFiConnectionHandler.h
+++ b/src/Arduino_WiFiConnectionHandler.h
@@ -50,10 +50,10 @@ class WiFiConnectionHandler : public ConnectionHandler
     virtual NetworkConnectionState update_handleDisconnecting() override;
     virtual NetworkConnectionState update_handleDisconnected () override;
 
-  private:
+    String _ssid;
+    String _pass;
 
-    char const * _ssid;
-    char const * _pass;
+  private:
 
     WiFiUDP _wifi_udp;
     WiFiClient _wifi_client;
diff --git a/src/Arduino_WiFiConnectionHandlerDynamic.cpp b/src/Arduino_WiFiConnectionHandlerDynamic.cpp
new file mode 100644
index 00000000..a9e96098
--- /dev/null
+++ b/src/Arduino_WiFiConnectionHandlerDynamic.cpp
@@ -0,0 +1,46 @@
+/*
+   This file is part of ArduinoIoTCloud.
+
+   Copyright 2019 ARDUINO SA (http://www.arduino.cc/)
+
+   This software is released under the GNU General Public License version 3,
+   which covers the main part of arduino-cli.
+   The terms of this license can be found at:
+   https://www.gnu.org/licenses/gpl-3.0.en.html
+
+   You can be released from the requirements of the above licenses by purchasing
+   a commercial license. Buying such a license is mandatory if you want to modify or
+   otherwise use the software for commercial activities involving the Arduino
+   software without disclosing the source code of your own applications. To purchase
+   a commercial license, send an email to license@arduino.cc.
+*/
+
+/******************************************************************************
+   INCLUDE
+ ******************************************************************************/
+
+#include "Arduino_WiFiConnectionHandlerDynamic.h"
+
+#ifdef BOARD_HAS_WIFI /* Only compile if the board has WiFi */
+
+/******************************************************************************
+   CTOR/DTOR
+ ******************************************************************************/
+
+WiFiConnectionHandlerDynamic::WiFiConnectionHandlerDynamic(bool const keep_alive) : WiFiConnectionHandler{nullptr, nullptr, keep_alive}
+{
+
+}
+
+/******************************************************************************
+   PUBLIC MEMBER FUNCTIONS
+ ******************************************************************************/
+
+void WiFiConnectionHandlerDynamic::setWiFiCredentials(String ssid, String pass)
+{
+  _ssid = ssid;
+  _pass = pass;
+  _current_net_connection_state = NetworkConnectionState::INIT;
+}
+
+#endif /* #ifdef BOARD_HAS_WIFI */
diff --git a/src/Arduino_WiFiConnectionHandlerDynamic.h b/src/Arduino_WiFiConnectionHandlerDynamic.h
new file mode 100644
index 00000000..a778f144
--- /dev/null
+++ b/src/Arduino_WiFiConnectionHandlerDynamic.h
@@ -0,0 +1,45 @@
+/*
+   This file is part of ArduinoIoTCloud.
+
+   Copyright 2019 ARDUINO SA (http://www.arduino.cc/)
+
+   This software is released under the GNU General Public License version 3,
+   which covers the main part of arduino-cli.
+   The terms of this license can be found at:
+   https://www.gnu.org/licenses/gpl-3.0.en.html
+
+   You can be released from the requirements of the above licenses by purchasing
+   a commercial license. Buying such a license is mandatory if you want to modify or
+   otherwise use the software for commercial activities involving the Arduino
+   software without disclosing the source code of your own applications. To purchase
+   a commercial license, send an email to license@arduino.cc.
+*/
+
+#ifndef ARDUINO_WIFI_CONNECTION_HANDLER_DYNAMIC_H_
+#define ARDUINO_WIFI_CONNECTION_HANDLER_DYNAMIC_H_
+
+/******************************************************************************
+   INCLUDE
+ ******************************************************************************/
+
+#include "Arduino_WiFiConnectionHandler.h"
+
+#ifdef BOARD_HAS_WIFI /* Only compile if the board has WiFi */
+
+/******************************************************************************
+   CLASS DECLARATION
+ ******************************************************************************/
+
+class WiFiConnectionHandlerDynamic : public WiFiConnectionHandler
+{
+  public:
+
+    WiFiConnectionHandlerDynamic(bool const keep_alive = true);
+
+    void setWiFiCredentials(String ssid, String pass);
+
+};
+
+#endif /* #ifdef BOARD_HAS_WIFI */
+
+#endif /* ARDUINO_WIFI_CONNECTION_HANDLER_DYNAMIC_H_ */