diff --git a/ampel-firmware/co2_sensor.cpp b/ampel-firmware/co2_sensor.cpp
index e2805bbaab4660bef7e162cac16692d3b96dc6f8..1fe9297cd104f1ac46bc8dcb0136387275767c2c 100644
--- a/ampel-firmware/co2_sensor.cpp
+++ b/ampel-firmware/co2_sensor.cpp
@@ -188,6 +188,21 @@ namespace sensor {
     }
   }
 
+  void showState() {
+    switch(current_state) {
+      case BOOTUP: led_effects::showWaitingLED(color::blue); break;
+      // No special signaling, we want to show the CO2 value
+      case READY: break;
+      case NEEDSCALIBRATION: led_effects::showWaitingLED(color::magenta); break;
+      case PREPARECALIBRATION: led_effects::showWaitingLED(waiting_color); break;
+      // No special signaling here, too.
+      case CALIBRATION: break;
+      // This should not happen.
+      default:
+        Serial.println(F("Encountered unknown sensor state"));
+    }
+  }
+
   /** Gets fresh data if available, checks calibration status, displays CO2 levels.
    * Returns true if fresh data is available, for further processing (e.g. MQTT, CSV or LoRa)
    */
@@ -200,44 +215,34 @@ namespace sensor {
       co2 = scd30.getCO2();
       temperature = scd30.getTemperature();
       humidity = scd30.getHumidity();
-    }
 
-    //NOTE: Data is available, but it's sometimes erroneous: the sensor outputs zero ppm but non-zero temperature and non-zero humidity.
-    if (co2 <= 0) {
-      // No measurement yet. Waiting.
-      switchState(BOOTUP);
-      led_effects::showWaitingLED(color::blue);
-      return false;
-    } else if (current_state != PREPARECALIBRATION) {
-      switchState(READY);
-    }
-
-    /**
-     * Fresh data. Log it and send it if needed.
-     */
-    if (freshData) {
-      if (should_calibrate) {
+      //NOTE: Data is available, but it's sometimes erroneous: the sensor outputs zero ppm but non-zero temperature and non-zero humidity.
+      if (co2 <= 0) {
+        // No measurement yet. Waiting.
+        switchState(BOOTUP);
+      } else if (co2 < 250) {
+        // Sensor should be calibrated.
+        switchState(NEEDSCALIBRATION);
+      } else if (should_calibrate) {
         countStableMeasurements();
+        if (stable_measurements == config::enough_stable_measurements) {
+          calibrateAndRestart();
+        }
+      } else {
+        switchState(READY);
       }
-      logToSerial();
-    }
 
-    if (should_calibrate) {
-      if (stable_measurements == config::enough_stable_measurements) {
-        calibrateAndRestart();
-      }
-      led_effects::showWaitingLED(waiting_color);
-      return false;
+      // Log every time fresh data is available.
+      logToSerial();
     }
 
-    if (co2 < 250) {
-      // Sensor should be calibrated.
-      led_effects::showWaitingLED(color::magenta);
-      switchState(NEEDSCALIBRATION);
-      return false;
+    // We need to show LED effects for "old" data, too, as long as we get new data.
+    if (current_state == READY) {
+      displayCO2OnLedRing();
+    } else {
+      showState();
     }
 
-    displayCO2OnLedRing();
     return freshData;
   }