diff --git a/ampel-firmware/co2_sensor.cpp b/ampel-firmware/co2_sensor.cpp
index 9bfa371eb6cbd557962975560adc32a8b4177ee3..48761a4307087c60a44f904cbde6ef0ab6994ccb 100644
--- a/ampel-firmware/co2_sensor.cpp
+++ b/ampel-firmware/co2_sensor.cpp
@@ -113,7 +113,7 @@ namespace sensor {
     scd30.setForcedRecalibrationFactor(config::co2_calibration_level);
     Serial.println(F(" Done!"));
     Serial.println(F("Sensor calibrated."));
-    resetAmpel();
+    ESP.restart(); // softer than ESP.reset
   }
 
   void logToSerial() {
diff --git a/ampel-firmware/csv_writer.h b/ampel-firmware/csv_writer.h
index c6b71a1ed980fbd5ceca472056000af72b50ae8c..e0e0d5314ae9060ca8c39315737da2a73beb5d99 100644
--- a/ampel-firmware/csv_writer.h
+++ b/ampel-firmware/csv_writer.h
@@ -11,8 +11,10 @@
 #  error Board should be either ESP8266 or ESP832
 #endif
 
-#include "led_effects.h"
 #include "config.h"
+#include "util.h"
+#include "led_effects.h"
+
 namespace config {
   extern uint16_t csv_interval; // [s]
 }
diff --git a/ampel-firmware/led_effects.cpp b/ampel-firmware/led_effects.cpp
index 3af6a06ac5189ee964993a66fafc01fb36263325..ebe8beef0565a89bec811d64b9aedc870c6ff3b2 100644
--- a/ampel-firmware/led_effects.cpp
+++ b/ampel-firmware/led_effects.cpp
@@ -139,14 +139,14 @@ namespace led_effects {
     pixels.show();
   }
 
-  void showRainbowWheel(int duration_s, uint16_t hue_increment) {
+  void showRainbowWheel(int duration_ms, uint16_t hue_increment) {
     if (config::night_mode) {
       return;
     }
     static uint16_t wheel_offset = 0;
-    unsigned long t0 = seconds();
+    unsigned long t0 = millis();
     pixels.setBrightness(config::max_brightness);
-    while (seconds() < t0 + duration_s) {
+    while (millis() < t0 + duration_ms) {
       for (int i = 0; i < NUMPIXELS; i++) {
         pixels.setPixelColor(i, pixels.ColorHSV(i * 65535 / NUMPIXELS + wheel_offset));
         wheel_offset += hue_increment;
diff --git a/ampel-firmware/led_effects.h b/ampel-firmware/led_effects.h
index da5757dc3d2393ced9d5cd954469670128af4d63..03aee3dc24a02dc403b0e20105c3013f678488e5 100644
--- a/ampel-firmware/led_effects.h
+++ b/ampel-firmware/led_effects.h
@@ -1,7 +1,6 @@
 #ifndef LED_EFFECTS_H_INCLUDED
 #define LED_EFFECTS_H_INCLUDED
 #include <Arduino.h>
-#include "util.h"
 #include "config.h"
 
 // Adafruit NeoPixel (Arduino library for controlling single-wire-based LED pixels and strip)
@@ -30,7 +29,7 @@ namespace led_effects {
   int countdownToZero();
   void showWaitingLED(uint32_t color);
   void showKITTWheel(uint32_t color, uint16_t duration_s = 2);
-  void showRainbowWheel(int duration_s = 1, uint16_t hue_increment = 50);
+  void showRainbowWheel(int duration_ms = 1000, uint16_t hue_increment = 50);
   void displayCO2color(uint16_t co2);
 }
 #endif
diff --git a/ampel-firmware/mqtt.cpp b/ampel-firmware/mqtt.cpp
index 7f54c383422733cf7922832ea53c81d858557805..29f609fdf0751bbcebcc0b501c08e12d7212b6a6 100644
--- a/ampel-firmware/mqtt.cpp
+++ b/ampel-firmware/mqtt.cpp
@@ -167,7 +167,7 @@ namespace mqtt {
     } else if (messageString == "local_ip") {
       sendInfoAboutLocalNetwork();
     } else if (messageString == "reset") {
-      resetAmpel();
+      ESP.restart(); // softer than ESP.reset()
     } else {
       led_effects::showKITTWheel(color::red, 1);
       Serial.println(F("Message not supported. Doing nothing."));
diff --git a/ampel-firmware/util.cpp b/ampel-firmware/util.cpp
index 43ead3a706e13cd95cd07f31bb8c1e29cd93d4eb..31df19dd856e5c3f17b5eb929979660eb27db715 100644
--- a/ampel-firmware/util.cpp
+++ b/ampel-firmware/util.cpp
@@ -38,16 +38,6 @@ namespace ntp {
   }
 }
 
-void resetAmpel() {
-  Serial.print(F("Resetting"));
-#ifdef AMPEL_CSV
-  FS_LIB.end();
-#endif
-  led_effects::LEDsOff();
-  delay(1000);
-  ESP.restart();
-}
-
 uint32_t max_loop_duration = 0;
 
 //FIXME: Remove every instance of Strings, to avoid heap fragmentation problems. (Start:  "Free heap space : 17104 bytes")
diff --git a/ampel-firmware/util.h b/ampel-firmware/util.h
index 4bd28109b1979ab97cd743f0867f370853b46f57..0ffe5eb4d35d2243512035c07e09c1d44464fea8 100644
--- a/ampel-firmware/util.h
+++ b/ampel-firmware/util.h
@@ -2,20 +2,17 @@
 #define AMPEL_UTIL_H_INCLUDED
 #include <Arduino.h>
 #include "config.h"
-#ifdef AMPEL_CSV
-#  include "csv_writer.h" // To close filesystem before reset
-#endif
 
-#include <WiFiUdp.h> //required for NTP
+#include <WiFiUdp.h> // required for NTP
 #include "src/lib/NTPClient-master/NTPClient.h" // NTP
 
 #if defined(ESP8266)
 #  define BOARD "ESP8266"
-#  include <ESP8266WiFi.h>
+#  include <ESP8266WiFi.h> // required to get MAC address
 #  define get_free_heap_size() system_get_free_heap_size()
 #elif defined(ESP32)
 #  define BOARD "ESP32"
-#  include <WiFi.h>
+#  include <WiFi.h> // required to get MAC address
 #  define get_free_heap_size() esp_get_free_heap_size()
 #else
 #  define BOARD "Unknown"
@@ -43,6 +40,4 @@ namespace util {
 extern uint32_t max_loop_duration;
 const extern String SENSOR_ID;
 
-void resetAmpel();
-
 #endif
diff --git a/ampel-firmware/wifi_util.h b/ampel-firmware/wifi_util.h
index 3fb47131c03959f706898793f9dc545dbb5ee85b..7520ed78e070cf552500441f4828bb7d339392b8 100644
--- a/ampel-firmware/wifi_util.h
+++ b/ampel-firmware/wifi_util.h
@@ -1,8 +1,10 @@
 #ifndef WIFI_UTIL_H_INCLUDED
 #define WIFI_UTIL_H_INCLUDED
 
-#include "led_effects.h"
 #include "config.h"
+#include "util.h"
+#include "led_effects.h"
+
 void WiFiConnect(const String &hostname);
 
 #endif