diff --git a/libraries/WiFi/src/WiFiScan.cpp b/libraries/WiFi/src/WiFiScan.cpp
index 27d9edcc70c..086b875fcb2 100644
--- a/libraries/WiFi/src/WiFiScan.cpp
+++ b/libraries/WiFi/src/WiFiScan.cpp
@@ -92,9 +92,6 @@ int16_t
   }
   if (esp_wifi_scan_start(&config, false) == ESP_OK) {
     _scanStarted = millis();
-    if (!_scanStarted) {  //Prevent 0 from millis overflow
-      ++_scanStarted;
-    }
 
     WiFiGenericClass::clearStatusBits(WIFI_SCAN_DONE_BIT);
     WiFiGenericClass::setStatusBits(WIFI_SCANNING_BIT);
@@ -118,21 +115,20 @@ int16_t
 void WiFiScanClass::_scanDone() {
   esp_wifi_scan_get_ap_num(&(WiFiScanClass::_scanCount));
   if (WiFiScanClass::_scanResult) {
-    delete[] reinterpret_cast<wifi_ap_record_t *>(WiFiScanClass::_scanResult);
-    WiFiScanClass::_scanResult = nullptr;
+    free(WiFiScanClass::_scanResult);
+    WiFiScanClass::_scanResult = NULL;
   }
 
   if (WiFiScanClass::_scanCount) {
-    WiFiScanClass::_scanResult = new (std::nothrow) wifi_ap_record_t[WiFiScanClass::_scanCount];
+    WiFiScanClass::_scanResult = calloc(WiFiScanClass::_scanCount, sizeof(wifi_ap_record_t));
     if (!WiFiScanClass::_scanResult) {
       WiFiScanClass::_scanCount = 0;
     } else if (esp_wifi_scan_get_ap_records(&(WiFiScanClass::_scanCount), (wifi_ap_record_t *)_scanResult) != ESP_OK) {
-      delete[] reinterpret_cast<wifi_ap_record_t *>(WiFiScanClass::_scanResult);
-      WiFiScanClass::_scanResult = nullptr;
+      free(WiFiScanClass::_scanResult);
+      WiFiScanClass::_scanResult = NULL;
       WiFiScanClass::_scanCount = 0;
     }
   }
-  WiFiScanClass::_scanStarted = 0;  //Reset after a scan is completed for normal behavior
   WiFiGenericClass::setStatusBits(WIFI_SCAN_DONE_BIT);
   WiFiGenericClass::clearStatusBits(WIFI_SCANNING_BIT);
 }
@@ -161,15 +157,13 @@ int16_t WiFiScanClass::scanComplete() {
   }
 
   if (WiFiGenericClass::getStatusBits() & WIFI_SCANNING_BIT) {
+    // Check if the delay expired, return WIFI_SCAN_FAILED in this case
+    if ((millis() - WiFiScanClass::_scanStarted) > WiFiScanClass::_scanTimeout) {
+      WiFiGenericClass::clearStatusBits(WIFI_SCANNING_BIT);
+      return WIFI_SCAN_FAILED;
+    }
     return WIFI_SCAN_RUNNING;
   }
-  // last one to avoid time affecting Async mode
-  if (WiFiScanClass::_scanStarted
-      && (millis() - WiFiScanClass::_scanStarted)
-           > WiFiScanClass::_scanTimeout) {  //Check is scan was started and if the delay expired, return WIFI_SCAN_FAILED in this case
-    WiFiGenericClass::clearStatusBits(WIFI_SCANNING_BIT);
-    return WIFI_SCAN_FAILED;
-  }
 
   return WIFI_SCAN_FAILED;
 }
@@ -179,11 +173,12 @@ int16_t WiFiScanClass::scanComplete() {
  */
 void WiFiScanClass::scanDelete() {
   WiFiGenericClass::clearStatusBits(WIFI_SCAN_DONE_BIT);
+  WiFiGenericClass::clearStatusBits(WIFI_SCANNING_BIT);
   if (WiFiScanClass::_scanResult) {
-    delete[] reinterpret_cast<wifi_ap_record_t *>(WiFiScanClass::_scanResult);
-    WiFiScanClass::_scanResult = nullptr;
-    WiFiScanClass::_scanCount = 0;
+    free(WiFiScanClass::_scanResult);
+    WiFiScanClass::_scanResult = NULL;
   }
+  WiFiScanClass::_scanCount = 0;
 }
 
 /**