diff --git a/ampel-firmware/ampel-firmware.ino b/ampel-firmware/ampel-firmware.ino
index 39f6b0c3b9ede61f313a190e4c292eb6c9bde408..b4de502e1e3fc5b6496218a2f8467296579c10f8 100644
--- a/ampel-firmware/ampel-firmware.ino
+++ b/ampel-firmware/ampel-firmware.ino
@@ -84,29 +84,14 @@ void setup() {
 #endif
 
 #ifdef AMPEL_WIFI
-  wifi::connect(ampel.sensorId);
+//  wifi::connect(ampel.sensorId);
 
-  Serial.print(F("WiFi - Status: "));
-  Serial.println(WiFi.status());
+//  Serial.print(F("WiFi - Status: "));
+//  Serial.println(WiFi.status());
 
-  if (WiFi.status() == WL_CONNECTED) {
 #  ifdef AMPEL_HTTP
-    web_server::initialize();
+  web_server::initialize();
 #  endif
-
-    ntp::initialize();
-
-    if (MDNS.begin(ampel.sensorId)) { // Start the mDNS responder for SENSOR_ID.local
-      MDNS.addService("http", "tcp", 80);
-      Serial.println(F("mDNS responder started"));
-    } else {
-      Serial.println(F("Error setting up MDNS responder!"));
-    }
-
-#  ifdef AMPEL_MQTT
-    mqtt::initialize(ampel.sensorId);
-#  endif
-  }
 #endif
 
 #if defined(AMPEL_LORAWAN) && defined(ESP32)
@@ -199,19 +184,8 @@ void checkFlashButton() {
 
 void keepServicesAlive() {
 #ifdef AMPEL_WIFI
-  if (WiFi.status() == WL_CONNECTED) {
-#  if defined(ESP8266)
-    //NOTE: Sadly, there seems to be a bug in the current MDNS implementation.
-    // It stops working after 2 minutes. And forcing a restart leads to a memory leak.
-    MDNS.update();
-#  endif
-    ntp::update(); // NTP client has its own timer. It will connect to NTP server every 60s.
 #  ifdef AMPEL_HTTP
-    web_server::update();
+  web_server::update();
 #  endif
-#  ifdef AMPEL_MQTT
-    mqtt::keepConnection(); // MQTT client has its own timer. It will keep alive every 15s.
-#  endif
-  }
 #endif
 }
diff --git a/ampel-firmware/web_server.cpp b/ampel-firmware/web_server.cpp
index b17e666d08ca932290d15f56061fd1d65ac4f8ea..92e54dc94074d2f9cf8a8ce5b68daeb81273cffd 100644
--- a/ampel-firmware/web_server.cpp
+++ b/ampel-firmware/web_server.cpp
@@ -35,8 +35,11 @@ namespace web_server {
   WebServer http(80);
 #endif
 
+  AutoConnect PORTAL(http);
+
   void update() {
-    http.handleClient(); // Listen for HTTP requests from clients
+    PORTAL.handleClient();
+    // http.handleClient(); // Listen for HTTP requests from clients
   }
 
   void initialize() {
@@ -183,7 +186,8 @@ namespace web_server {
     http.on("/delete_csv", HTTP_POST, handleDeleteCSV);
 #endif
     http.onNotFound(handlePageNotFound);
-    http.begin();
+//    http.begin();
+    PORTAL.begin();
 
     Serial.print(F("You can access this sensor via http://"));
     Serial.print(ampel.sensorId);
diff --git a/ampel-firmware/web_server.h b/ampel-firmware/web_server.h
index bc2c0101fca661d1d7cd0db5ff922851b0224e58..3fa17035796901c3afcf7cd686e1be80288076a0 100644
--- a/ampel-firmware/web_server.h
+++ b/ampel-firmware/web_server.h
@@ -7,6 +7,7 @@
 #  include <WebServer.h>
 #endif
 
+#include "src/lib/AutoConnect/AutoConnect.h"
 #include "config.h"
 #include "util.h"
 #include "wifi_util.h"