diff --git a/ampel-firmware/co2_sensor.cpp b/ampel-firmware/co2_sensor.cpp
index ab58ebf344711c335ecfd70e47857e3975ebfd55..81ed0bfbc52de21b455b155b15aee51ca6d4f24c 100644
--- a/ampel-firmware/co2_sensor.cpp
+++ b/ampel-firmware/co2_sensor.cpp
@@ -1,6 +1,6 @@
 #include "co2_sensor.h"
 
-#include "config.h"
+#include "web_config.h"
 #include "ntp.h"
 #include "led_effects.h"
 #include "sensor_console.h"
@@ -11,25 +11,12 @@
 #include "src/lib/SparkFun_SCD30_Arduino_Library/src/SparkFun_SCD30_Arduino_Library.h"  // From: http://librarymanager/All#SparkFun_SCD30
 
 namespace config {
-  // UPPERCASE values should be defined in config.h
-  uint16_t measurement_timestep = MEASUREMENT_TIMESTEP; // [s] Value between 2 and 1800 (range for SCD30 sensor).
-  const uint16_t altitude_above_sea_level = ALTITUDE_ABOVE_SEA_LEVEL; // [m]
-  uint16_t co2_calibration_level = ATMOSPHERIC_CO2_CONCENTRATION; // [ppm]
   const uint16_t measurement_timestep_bootup = 5; // [s] Measurement timestep during acclimatization.
   const uint8_t max_deviation_during_bootup = 20; // [%]
   const int8_t max_deviation_during_calibration = 30; // [ppm]
   const int16_t timestep_during_calibration = 10; // [s] WARNING: Measurements can be unreliable for timesteps shorter than 10s.
   const int8_t stable_measurements_before_calibration = 120 / timestep_during_calibration; // [-] Stable measurements during at least 2 minutes.
   const uint16_t co2_alert_threshold = 2000; // [ppm] Display a flashing led ring, if concentration exceeds this value
-
-#ifdef TEMPERATURE_OFFSET
-  // Residual heat from CO2 sensor seems to be high enough to change the temperature reading. How much should it be offset?
-  // NOTE: Sign isn't relevant. The returned temperature will always be shifted down.
-  const float temperature_offset = TEMPERATURE_OFFSET; // [K]
-#else
-  const float temperature_offset = -3.0;  // [K] Temperature measured by sensor is usually at least 3K too high.
-#endif
-  bool auto_calibrate_sensor = AUTO_CALIBRATE_SENSOR; // [true / false]
   const bool debug_sensor_states = false; // If true, log state transitions over serial console
 }
 
@@ -96,9 +83,9 @@ namespace sensor {
     scd30.reset();
 
     Serial.print(F("Setting temperature offset to -"));
-    Serial.print(abs(config::temperature_offset));
+    Serial.print(abs(*config::temperature_offset));
     Serial.println(F(" K."));
-    scd30.setTemperatureOffset(abs(config::temperature_offset)); // setTemperatureOffset only accepts positive numbers, but shifts the temperature down.
+    scd30.setTemperatureOffset(abs(*config::temperature_offset)); // setTemperatureOffset only accepts positive numbers, but shifts the temperature down.
     delay(100);
 
     Serial.print(F("Temperature offset is : -"));
@@ -106,7 +93,7 @@ namespace sensor {
     Serial.println(F(" K"));
 
     Serial.print(F("Auto-calibration is "));
-    Serial.println(config::auto_calibrate_sensor ? "ON." : "OFF.");
+    Serial.println(*config::auto_calibrate_sensor ? "ON." : "OFF.");
 
     // SCD30 has its own timer.
     //NOTE: The timer seems to be inaccurate, though, possibly depending on voltage. Should it be offset?
@@ -170,8 +157,8 @@ namespace sensor {
 
   void calibrate() {
     Serial.print(F("Calibrating SCD30 now..."));
-    scd30.setAltitudeCompensation(config::altitude_above_sea_level);
-    scd30.setForcedRecalibrationFactor(config::co2_calibration_level);
+    scd30.setAltitudeCompensation(*config::altitude_above_sea_level);
+    scd30.setForcedRecalibrationFactor(*config::co2_calibration_level);
     Serial.println(F(" Done!"));
     Serial.println(F("Sensor calibrated."));
     switchState(BOOTUP); // In order to stop the calibration and select the desired timestep.
@@ -210,12 +197,12 @@ namespace sensor {
       switchState(READY);
       Serial.println(F("Sensor acclimatization finished."));
       Serial.print(F("Setting SCD30 timestep to "));
-      Serial.print(config::measurement_timestep);
+      Serial.print(*config::measurement_timestep);
       Serial.println(F(" s."));
-      if (config::measurement_timestep < 10) {
+      if (*config::measurement_timestep < 10) {
         Serial.println(F("WARNING: Timesteps shorter than 10s can lead to unreliable measurements!"));
       }
-      scd30.setMeasurementInterval(config::measurement_timestep); // [s]
+      scd30.setMeasurementInterval(*config::measurement_timestep); // [s]
     }
 
     // Check for pre-calibration states first, because we do not want to
@@ -305,7 +292,7 @@ namespace sensor {
   }
 
   void setAutoCalibration(int32_t autoCalibration) {
-    config::auto_calibrate_sensor = autoCalibration;
+    *config::auto_calibrate_sensor = autoCalibration;
     scd30.setAutoSelfCalibration(autoCalibration);
     Serial.print(F("Setting auto-calibration to : "));
     Serial.println(autoCalibration ? F("On.") : F("Off."));
@@ -317,7 +304,7 @@ namespace sensor {
       Serial.print(timestep);
       Serial.println(F("s (change will only be applied after next measurement)."));
       scd30.setMeasurementInterval(timestep);
-      config::measurement_timestep = timestep;
+      *config::measurement_timestep = timestep;
       led_effects::showKITTWheel(color::green, 1);
     }
   }
@@ -325,8 +312,8 @@ namespace sensor {
   void calibrateSensorToSpecificPPM(int32_t calibrationLevel) {
     if (calibrationLevel >= 400 && calibrationLevel <= 2000) {
       Serial.print(F("Force calibration, at "));
-      config::co2_calibration_level = calibrationLevel;
-      Serial.print(config::co2_calibration_level);
+      *config::co2_calibration_level = calibrationLevel;
+      Serial.print(*config::co2_calibration_level);
       Serial.println(F(" ppm."));
       startCalibrationProcess();
     }
@@ -335,8 +322,8 @@ namespace sensor {
   void calibrateSensorRightNow(int32_t calibrationLevel) {
     if (calibrationLevel >= 400 && calibrationLevel <= 2000) {
       Serial.print(F("Force calibration, right now, at "));
-      config::co2_calibration_level = calibrationLevel;
-      Serial.print(config::co2_calibration_level);
+      *config::co2_calibration_level = calibrationLevel;
+      Serial.print(*config::co2_calibration_level);
       Serial.println(F(" ppm."));
       calibrate();
     }
diff --git a/ampel-firmware/co2_sensor.h b/ampel-firmware/co2_sensor.h
index 2aea223bdebe2eb9e12254efc741afb331af7f51..00b81d09846a53b8fa4d6cfcff5cb70a720807f0 100644
--- a/ampel-firmware/co2_sensor.h
+++ b/ampel-firmware/co2_sensor.h
@@ -3,13 +3,6 @@
 
 #include <stdint.h> // For uint16_t
 
-namespace config {
-  extern uint16_t measurement_timestep; // [s] Value between 2 and 1800 (range for SCD30 sensor)
-  extern bool auto_calibrate_sensor; // [true / false]
-  extern uint16_t co2_calibration_level; // [ppm]
-  extern const float temperature_offset; // [K] Sign isn't relevant.
-}
-
 namespace sensor {
   extern uint16_t co2;
   extern float temperature;
diff --git a/ampel-firmware/csv_writer.cpp b/ampel-firmware/csv_writer.cpp
index 412d9fd7854218028a6775fae5276324e0cd0dab..f13acecb3edc1071d0738619c260120e49df7a71 100644
--- a/ampel-firmware/csv_writer.cpp
+++ b/ampel-firmware/csv_writer.cpp
@@ -1,6 +1,5 @@
 #include "csv_writer.h"
 
-#include "config.h"
 #include "web_config.h"
 #include "ntp.h"
 #include "led_effects.h"
diff --git a/ampel-firmware/web_config.cpp b/ampel-firmware/web_config.cpp
index 16583ce32ee8e95d0ebf68c1c8860e3d32c1b416..dd848bdecf4ff7f43f8cb4ae9f65d1fb539a84f7 100644
--- a/ampel-firmware/web_config.cpp
+++ b/ampel-firmware/web_config.cpp
@@ -9,6 +9,8 @@
 #include "config.h"
 #include "util.h"
 #include "sensor_console.h"
+
+#include <IotWebConfTParameter.h>
 #include <IotWebConf.h>
 #include <IotWebConfOptionalGroup.h>
 
@@ -264,6 +266,17 @@ namespace web_config {
   }
 }
 
+/***
+ * Define all the corresponding config values as reference, so that they can be updated.
+ */
 namespace config {
+  // CSV
   uint16_t *csv_interval = &web_config::csvTimestepParam.value();
+  
+  // Sensor
+  uint16_t *measurement_timestep = &web_config::timestepParam.value(); // [s] Value between 2 and 1800 (range for SCD30 sensor).
+  uint16_t *altitude_above_sea_level = &web_config::altitudeParam.value(); // [m]
+  uint16_t *co2_calibration_level = &web_config::atmosphericCO2Param.value(); // [ppm]
+  bool *auto_calibrate_sensor = &web_config::autoCalibrateParam.value(); // [true / false]
+  float *temperature_offset = &web_config::temperatureOffsetParam.value(); // [K] Sign isn't relevant.
 }
\ No newline at end of file
diff --git a/ampel-firmware/web_config.h b/ampel-firmware/web_config.h
index 22f1b1fdc52acfae7fc740e515f3ce222de787c2..b74488658e271ea893e9df2d429789a5f5cef6f3 100644
--- a/ampel-firmware/web_config.h
+++ b/ampel-firmware/web_config.h
@@ -9,10 +9,15 @@
 #  include <WebServer.h>
 #endif
 
-#include <IotWebConfTParameter.h>
-
 namespace config {
   extern uint16_t *csv_interval; // [s]
+
+  // Sensor
+  extern uint16_t *measurement_timestep; // [s] Value between 2 and 1800 (range for SCD30 sensor).
+  extern uint16_t *altitude_above_sea_level; // [m]
+  extern uint16_t *co2_calibration_level; // [ppm]
+  extern bool *auto_calibrate_sensor; // [true / false]
+  extern float *temperature_offset; // [K] Sign isn't relevant.
 }
 
 namespace web_config {
@@ -20,6 +25,7 @@ namespace web_config {
   void setWifiConnectionCallback(void (*function)());
   void setWifiConnectionFailedCallback(void (*function)());
   void update();
+  //TODO: Add saveConfig(), for e.g. after custom setters. Or simply reset after each configchange?
 
 #if defined(ESP8266)
   extern ESP8266WebServer http;
diff --git a/ampel-firmware/web_server.cpp b/ampel-firmware/web_server.cpp
index 695d2a72dd6bd106590627478053aaf1889c09e5..441d1b3e4c5b52968181988d82bcdc35395e4316 100644
--- a/ampel-firmware/web_server.cpp
+++ b/ampel-firmware/web_server.cpp
@@ -245,7 +245,7 @@ namespace web_server {
 
     // Body
     snprintf_P(content, sizeof(content), body_template, ampel.sensorId, sensor::co2, sensor::temperature,
-        sensor::humidity, sensor::timestamp, config::measurement_timestep,
+        sensor::humidity, sensor::timestamp, *config::measurement_timestep,
 #ifdef AMPEL_CSV
         csv_writer::last_successful_write, *config::csv_interval, csv_writer::getAvailableSpace() / 1024,
 #endif
@@ -256,7 +256,7 @@ namespace web_server {
         lorawan::connected ? "Yes" : "No", config::lorawan_frequency_plan, lorawan::last_transmission,
         config::lorawan_sending_interval,
 #endif
-        config::temperature_offset, config::auto_calibrate_sensor ? "Yes" : "No", ampel.sensorId, ampel.sensorId,
+        *config::temperature_offset, *config::auto_calibrate_sensor ? "Yes" : "No", ampel.sensorId, ampel.sensorId,
         wifi::local_ip, wifi::local_ip, ampel.macAddress, ESP.getFreeHeap(), esp_get_max_free_block_size(), esp_get_heap_fragmentation(),
         ampel.max_loop_duration, ampel.board, ampel.version, dd, hh, mm, ss);