diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml
index 5ca9b3962..1e89150bc 100644
--- a/.github/workflows/compile-examples.yml
+++ b/.github/workflows/compile-examples.yml
@@ -106,6 +106,7 @@ jobs:
               # Install ESP8266 platform via Boards Manager
               - name: esp8266:esp8266
                 source-url: https://arduino.esp8266.com/stable/package_esp8266com_index.json
+                version: 2.5.0
             libraries:
             sketch-paths: '"examples/utility/WiFi_Cloud_Blink_with_security_credentials"'
 
diff --git a/src/ArduinoIoTCloudTCP.cpp b/src/ArduinoIoTCloudTCP.cpp
index 4b350366f..800c1c3d2 100644
--- a/src/ArduinoIoTCloudTCP.cpp
+++ b/src/ArduinoIoTCloudTCP.cpp
@@ -102,17 +102,21 @@ ArduinoIoTCloudTCP::ArduinoIoTCloudTCP()
 
 int ArduinoIoTCloudTCP::begin(ConnectionHandler & connection, String brokerAddress, uint16_t brokerPort)
 {
-  _connection = &connection;
   _brokerAddress = brokerAddress;
-  _brokerPort = brokerPort;
-  time_service.begin(&connection);
-  return begin(_brokerAddress, _brokerPort);
+  _brokerIp = INADDR_NONE;
+  return begin(connection, brokerPort);
 }
 
-int ArduinoIoTCloudTCP::begin(String brokerAddress, uint16_t brokerPort)
+int ArduinoIoTCloudTCP::begin(ConnectionHandler & connection, IPAddress const brokerIp, uint16_t const brokerPort)
 {
+  _brokerAddress = "";
+  _brokerIp = brokerIp;
+  return begin(connection, brokerPort);
+}
 
-  _brokerAddress = brokerAddress;
+int ArduinoIoTCloudTCP::begin(ConnectionHandler & connection, uint16_t brokerPort)
+{
+  _connection = &connection;
   _brokerPort = brokerPort;
 
   #ifdef BOARD_HAS_ECCX08
@@ -242,7 +246,11 @@ int ArduinoIoTCloudTCP::reconnect()
 
 int ArduinoIoTCloudTCP::connect()
 {
-  if (!_mqttClient.connect(_brokerAddress.c_str(), _brokerPort)) return CONNECT_FAILURE;
+  if (_brokerIp == INADDR_NONE) {
+    if (!_mqttClient.connect(_brokerAddress.c_str(), _brokerPort)) return CONNECT_FAILURE;
+  } else {
+    if (!_mqttClient.connect(_brokerIp, _brokerPort))              return CONNECT_FAILURE;
+  }  
   if (_mqttClient.subscribe(_stdinTopic) == 0)                   return CONNECT_FAILURE_SUBSCRIBE;
   if (_mqttClient.subscribe(_dataTopicIn) == 0)                  return CONNECT_FAILURE_SUBSCRIBE;
   if (_mqttClient.subscribe(_ota_topic_in) == 0)                 return CONNECT_FAILURE_SUBSCRIBE;
diff --git a/src/ArduinoIoTCloudTCP.h b/src/ArduinoIoTCloudTCP.h
index 5c82c82d3..c0475cf07 100644
--- a/src/ArduinoIoTCloudTCP.h
+++ b/src/ArduinoIoTCloudTCP.h
@@ -49,6 +49,9 @@ static uint16_t const DEFAULT_BROKER_PORT_SECURE_AUTH = 8883;
 static char const DEFAULT_BROKER_ADDRESS_USER_PASS_AUTH[] = "mqtts-up.iot.arduino.cc";
 static uint16_t const DEFAULT_BROKER_PORT_USER_PASS_AUTH = 8884;
 
+static IPAddress const DEFAULT_BROKER_SECURE_AUTH_IP_1(34,206,248,111);
+static IPAddress const DEFAULT_BROKER_SECURE_AUTH_IP_2(3,209,5,114);
+
 /******************************************************************************
  * CLASS DECLARATION
  ******************************************************************************/
@@ -70,7 +73,9 @@ class ArduinoIoTCloudTCP: public ArduinoIoTCloudClass
     #else
     int begin(ConnectionHandler & connection, String brokerAddress = DEFAULT_BROKER_ADDRESS_USER_PASS_AUTH, uint16_t brokerPort = DEFAULT_BROKER_PORT_USER_PASS_AUTH);
     #endif
-    int begin(String brokerAddress = DEFAULT_BROKER_ADDRESS_SECURE_AUTH, uint16_t brokerPort = DEFAULT_BROKER_PORT_SECURE_AUTH);
+    int begin(ConnectionHandler & connection, IPAddress const brokerIp, uint16_t const brokerPort = DEFAULT_BROKER_PORT_SECURE_AUTH);
+    int begin(ConnectionHandler & connection, uint16_t brokerPort);
+
 
     #ifdef BOARD_ESP
     inline void setBoardId        (String const device_id) { setDeviceId(device_id); }
@@ -101,6 +106,7 @@ class ArduinoIoTCloudTCP: public ArduinoIoTCloudClass
 
     int _lastSyncRequestTickTime;
     String _brokerAddress;
+    IPAddress _brokerIp;
     uint16_t _brokerPort;
     uint8_t _mqtt_data_buf[MQTT_TRANSMIT_BUFFER_SIZE];
     int _mqtt_data_len;
diff --git a/src/utility/time/NTPUtils.cpp b/src/utility/time/NTPUtils.cpp
index 64d93ace0..9d31d78aa 100644
--- a/src/utility/time/NTPUtils.cpp
+++ b/src/utility/time/NTPUtils.cpp
@@ -77,8 +77,12 @@ void NTPUtils::sendNTPpacket(UDP & udp)
   ntp_packet_buf[13] = 0x4E;
   ntp_packet_buf[14] = 49;
   ntp_packet_buf[15] = 52;
-  
+
+#ifdef ARDUINO_SAMD_MKRNB1500
+  udp.beginPacket(NTP_TIME_SERVER_IP_1, NTP_TIME_SERVER_PORT);
+#else
   udp.beginPacket(NTP_TIME_SERVER, NTP_TIME_SERVER_PORT);
+#endif
   udp.write(ntp_packet_buf, NTP_PACKET_SIZE);
   udp.endPacket();
 }
diff --git a/src/utility/time/NTPUtils.h b/src/utility/time/NTPUtils.h
index 96ff49785..107baafd0 100644
--- a/src/utility/time/NTPUtils.h
+++ b/src/utility/time/NTPUtils.h
@@ -32,6 +32,13 @@
 
 #include <Udp.h>
 
+/**************************************************************************************
+ * CONSTANTS
+ **************************************************************************************/
+
+static IPAddress const NTP_TIME_SERVER_IP_1(35,204,74,237);
+static IPAddress const NTP_TIME_SERVER_IP_2(34,73,181,129);
+
 /**************************************************************************************
  * CLASS DECLARATION
  **************************************************************************************/