diff --git a/.gitignore b/.gitignore
index 763ce7966ed3498bca17415bc2e0d95130572d31..5a041d8be2abb31eb1ecc950e1f28d5ba243f31e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,4 +14,4 @@ sdkconfig.old
 # This directory contains user-specific environment configurations
 /environments/*
 # Ignore symlink to current environment
-/qthing/include/environment.h
+/generated/environment.h
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 177652e42fd05cf94557b1cb62dcbe17f5a7366f..56d642b8616d73a8006899387401f2fdee3f3b39 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,4 +4,5 @@ cmake_minimum_required(VERSION 3.5)
 
 include($ENV{IDF_PATH}/tools/cmake/project.cmake)
 idf_build_component(qthing)
+idf_build_component(generated)
 project(qthing)
diff --git a/bin/set-environment b/bin/set-environment
index d9446697ab13dac55b24725230e2872ec0ac2127..6b6ecb0368412ba3147596bdfe51e13b88c78ca0 100755
--- a/bin/set-environment
+++ b/bin/set-environment
@@ -12,9 +12,9 @@ function list_known_environments {
 }
 
 function link_environment {
-    echo "Linking qthing/include/environment.h to $1"
-    ln -snf "$1" "${QTHING_PATH:-.}/qthing/include/environment.h"
-    touch --no-create "${QTHING_PATH:-.}/qthing/include/environment.h"
+    echo "Linking generated/environment.h to $1"
+    ln -snf "$1" "${QTHING_PATH:-.}/generated/environment.h"
+    touch --no-create "${QTHING_PATH:-.}/generated/environment.h"
 }
 
 if [[ -z "$1" ]]; then
@@ -23,7 +23,7 @@ if [[ -z "$1" ]]; then
 elif [[ -f "$1" && "$1" == *.h ]]; then
     link_environment "$1"
 elif [[ -f "${QTHING_PATH:-.}/environments/$1.h" ]]; then
-    link_environment "../../environments/$1.h"
+    link_environment "../environments/$1.h"
 else
     echo "Cannot find environment config in the following locations:"
     echo "$1"
diff --git a/generated/CMakeLists.txt b/generated/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ee7be01ecd6d7d8b94d42c518defbfc013c1bcee
--- /dev/null
+++ b/generated/CMakeLists.txt
@@ -0,0 +1,4 @@
+idf_component_register(
+  INCLUDE_DIRS
+  "."
+)
diff --git a/qthing/CMakeLists.txt b/qthing/CMakeLists.txt
index 21a3d2c434ecb2bb951a38183d5094d9d7666b0a..427d35fd7f626aa3d7b6d7020500107e1dcb16e0 100644
--- a/qthing/CMakeLists.txt
+++ b/qthing/CMakeLists.txt
@@ -7,15 +7,19 @@ idf_component_register(
 
   INCLUDE_DIRS
   "include"
+  "magic-include"
 
   REQUIRES
   ESP32-Digital-RGB-LED-Drivers
   LiquidCrystal
   app_update
   arduino-esp32
+  generated
   main
   mqtt
   nvs_flash
   rc-switch
 )
 component_compile_options(-std=c++17)
+component_compile_options(-fdiagnostics-color=always)
+component_compile_options(-Wall)
diff --git a/qthing/color.cpp b/qthing/color.cpp
index 35bd34e47ecc2837d887f69440f8da5e02fd77e3..43a46839e34de57b062ac75ce5d64083988525b0 100644
--- a/qthing/color.cpp
+++ b/qthing/color.cpp
@@ -1,6 +1,6 @@
 #include <cmath>
 
-#include "qthing_legacy.hpp"
+#include "qthing/qthing_legacy.hpp"
 
 namespace qthing {
 // TODO: should return RGB once that can be casted to RGBW
diff --git a/qthing/error.cpp b/qthing/error.cpp
index 828a49deb96edea66abfa617348f7c6bfbec287c..8e231fe420653dc9479498a605a490cc082cd9f5 100644
--- a/qthing/error.cpp
+++ b/qthing/error.cpp
@@ -1,4 +1,4 @@
-#include "error.hpp"
+#include "qthing/error.hpp"
 
 void qthing::errorCodeToException(esp_err_t errorNumber) {
   if (errorNumber != ESP_OK) {
diff --git a/qthing/event.cpp b/qthing/event.cpp
index 46616d646eda59861f436ffeb3fcef1940941d81..44928f9b5964478b728c6eaa1f1b6368958bf7e9 100644
--- a/qthing/event.cpp
+++ b/qthing/event.cpp
@@ -1,6 +1,6 @@
-#include "event.hpp"
+#include "qthing/event.hpp"
 
-#include "qthing_legacy.hpp"
+#include "qthing/qthing_legacy.hpp"
 
 namespace qthing {
 
diff --git a/qthing/include/qthing.hpp b/qthing/include/qthing.hpp
index 7708b3b444e71051ce7d78f1cbc170c4f89c2270..8da6c22d7dd758298009f529ea94729f648a9d1c 100644
--- a/qthing/include/qthing.hpp
+++ b/qthing/include/qthing.hpp
@@ -2,11 +2,11 @@
 
 #define QTHING_HIDE_PRIVATE_API
 
-#include "error.hpp"
-#include "network.hpp"
-#include "power.hpp"
-#include "qthing_legacy.hpp"
-#include "time.hpp"
-#include "util.hpp"
+#include "qthing/error.hpp"
+#include "qthing/network.hpp"
+#include "qthing/power.hpp"
+#include "qthing/qthing_legacy.hpp"
+#include "qthing/time.hpp"
+#include "qthing/util.hpp"
 
 #undef QTHING_HIDE_PRIVATE_API
diff --git a/qthing/include/device.hpp b/qthing/include/qthing/device.hpp
similarity index 100%
rename from qthing/include/device.hpp
rename to qthing/include/qthing/device.hpp
diff --git a/qthing/include/error.hpp b/qthing/include/qthing/error.hpp
similarity index 100%
rename from qthing/include/error.hpp
rename to qthing/include/qthing/error.hpp
diff --git a/qthing/include/event.hpp b/qthing/include/qthing/event.hpp
similarity index 100%
rename from qthing/include/event.hpp
rename to qthing/include/qthing/event.hpp
diff --git a/qthing/include/io.hpp b/qthing/include/qthing/io.hpp
similarity index 100%
rename from qthing/include/io.hpp
rename to qthing/include/qthing/io.hpp
diff --git a/qthing/include/led_strip.hpp b/qthing/include/qthing/led_strip.hpp
similarity index 100%
rename from qthing/include/led_strip.hpp
rename to qthing/include/qthing/led_strip.hpp
diff --git a/qthing/include/measured.hpp b/qthing/include/qthing/measured.hpp
similarity index 100%
rename from qthing/include/measured.hpp
rename to qthing/include/qthing/measured.hpp
diff --git a/qthing/include/mqtt.hpp b/qthing/include/qthing/mqtt.hpp
similarity index 100%
rename from qthing/include/mqtt.hpp
rename to qthing/include/qthing/mqtt.hpp
diff --git a/qthing/include/mqtt_c.h b/qthing/include/qthing/mqtt_c.h
similarity index 100%
rename from qthing/include/mqtt_c.h
rename to qthing/include/qthing/mqtt_c.h
diff --git a/qthing/include/mqtt_common.h b/qthing/include/qthing/mqtt_common.h
similarity index 100%
rename from qthing/include/mqtt_common.h
rename to qthing/include/qthing/mqtt_common.h
diff --git a/qthing/include/mqtt_ota.hpp b/qthing/include/qthing/mqtt_ota.hpp
similarity index 100%
rename from qthing/include/mqtt_ota.hpp
rename to qthing/include/qthing/mqtt_ota.hpp
diff --git a/qthing/include/network.hpp b/qthing/include/qthing/network.hpp
similarity index 100%
rename from qthing/include/network.hpp
rename to qthing/include/qthing/network.hpp
diff --git a/qthing/include/oled_symbols.hpp b/qthing/include/qthing/oled_symbols.hpp
similarity index 100%
rename from qthing/include/oled_symbols.hpp
rename to qthing/include/qthing/oled_symbols.hpp
diff --git a/qthing/include/polyfill.hpp b/qthing/include/qthing/polyfill.hpp
similarity index 100%
rename from qthing/include/polyfill.hpp
rename to qthing/include/qthing/polyfill.hpp
diff --git a/qthing/include/power.hpp b/qthing/include/qthing/power.hpp
similarity index 100%
rename from qthing/include/power.hpp
rename to qthing/include/qthing/power.hpp
diff --git a/qthing/include/qthing_legacy.hpp b/qthing/include/qthing/qthing_legacy.hpp
similarity index 99%
rename from qthing/include/qthing_legacy.hpp
rename to qthing/include/qthing/qthing_legacy.hpp
index 4f4fbf8da6635590c4200ac7573fd24b4355073c..76bb806758c0f2e0b737a071c13b630d66b7cb6c 100644
--- a/qthing/include/qthing_legacy.hpp
+++ b/qthing/include/qthing/qthing_legacy.hpp
@@ -238,6 +238,7 @@ uint32_t get_key_activation_time(uint8_t x, uint8_t y);
 
 // utility
 std::string to_string(float value, int precision = 2);
+std::string to_string(double value, int precision = 2);
 std::string to_string(uint32_t value);
 std::string to_string(struct sockaddr_in6 sourceAddr);
 
diff --git a/qthing/include/rc_433.hpp b/qthing/include/qthing/rc_433.hpp
similarity index 100%
rename from qthing/include/rc_433.hpp
rename to qthing/include/qthing/rc_433.hpp
diff --git a/qthing/include/sensor.hpp b/qthing/include/qthing/sensor.hpp
similarity index 100%
rename from qthing/include/sensor.hpp
rename to qthing/include/qthing/sensor.hpp
diff --git a/qthing/include/time.hpp b/qthing/include/qthing/time.hpp
similarity index 100%
rename from qthing/include/time.hpp
rename to qthing/include/qthing/time.hpp
diff --git a/qthing/include/udp.hpp b/qthing/include/qthing/udp.hpp
similarity index 100%
rename from qthing/include/udp.hpp
rename to qthing/include/qthing/udp.hpp
diff --git a/qthing/include/util.hpp b/qthing/include/qthing/util.hpp
similarity index 100%
rename from qthing/include/util.hpp
rename to qthing/include/qthing/util.hpp
diff --git a/qthing/io.cpp b/qthing/io.cpp
index 82a1ef2cbe42fa7e10aa0bc9f95a7ccac8709fbe..037e029df452b38a855cf474d5c1c5df38e2db1e 100644
--- a/qthing/io.cpp
+++ b/qthing/io.cpp
@@ -1,4 +1,4 @@
-#include "io.hpp"
+#include "qthing/io.hpp"
 
 #include <algorithm>
 
@@ -7,9 +7,9 @@
 #include "freertos/FreeRTOS.h"
 #include "freertos/queue.h"
 #include "freertos/task.h"
-#include "mqtt.hpp"
-#include "qthing_legacy.hpp"
-#include "util.hpp"
+#include "qthing/mqtt.hpp"
+#include "qthing/qthing_legacy.hpp"
+#include "qthing/util.hpp"
 
 #define TAG "IO"
 
diff --git a/qthing/lcd.cpp b/qthing/lcd.cpp
index 7aa692eb585485ef8bcbeb18eb3939718b7dd889..8d7e2086b2b059b7b73bedb703cdd5d6d271236f 100644
--- a/qthing/lcd.cpp
+++ b/qthing/lcd.cpp
@@ -4,9 +4,9 @@
 
 #include "Arduino.h"
 #include "LiquidCrystal.h"
-#include "mqtt.hpp"
-#include "network.hpp"
-#include "qthing_legacy.hpp"
+#include "qthing/mqtt.hpp"
+#include "qthing/network.hpp"
+#include "qthing/qthing_legacy.hpp"
 
 namespace qthing {
 
diff --git a/qthing/include/qthing b/qthing/magic-include/qthing
similarity index 100%
rename from qthing/include/qthing
rename to qthing/magic-include/qthing
diff --git a/qthing/main.cpp b/qthing/main.cpp
index 1cf4cd4931899da628b86d0949bce1bee10eacca..4fcb4b35d817f1ddb9283a18f685938dd50f25e0 100644
--- a/qthing/main.cpp
+++ b/qthing/main.cpp
@@ -1,3 +1,3 @@
-#include "device.hpp"
+#include "qthing/device.hpp"
 
 extern "C" void app_main() { device_main(); }
diff --git a/qthing/measured.cpp b/qthing/measured.cpp
index 989a241da116eedb4e54cc654e71c3077c92ecf4..c87d396964b4e5faee6a45ae3e479551ac35c57d 100644
--- a/qthing/measured.cpp
+++ b/qthing/measured.cpp
@@ -1,4 +1,4 @@
-#include "measured.hpp"
+#include "qthing/measured.hpp"
 
 #include <string>
 #include <vector>
@@ -6,8 +6,8 @@
 #include "esp_log.h"
 #include "freertos/FreeRTOS.h"
 #include "freertos/task.h"
-#include "mqtt_common.h"
-#include "qthing_legacy.hpp"
+#include "qthing/mqtt_common.h"
+#include "qthing/qthing_legacy.hpp"
 
 typedef struct {
   std::string name;
diff --git a/qthing/mqtt.cpp b/qthing/mqtt.cpp
index cbf12839198d025b2775ea47b6a9d6e03a9cf141..ffe68eb44d688a2dc7eb7288a01391c5e417a909 100644
--- a/qthing/mqtt.cpp
+++ b/qthing/mqtt.cpp
@@ -1,4 +1,4 @@
-#include "mqtt.hpp"
+#include "qthing/mqtt.hpp"
 
 #include <stddef.h>
 #include <stdint.h>
@@ -12,22 +12,22 @@
 #include "esp_event_loop.h"
 #include "esp_log.h"
 #include "esp_system.h"
-#include "event.hpp"
 #include "freertos/FreeRTOS.h"
 #include "freertos/event_groups.h"
 #include "freertos/queue.h"
 #include "freertos/semphr.h"
 #include "freertos/task.h"
-#include "io.hpp"
 #include "lwip/dns.h"
 #include "lwip/netdb.h"
 #include "lwip/sockets.h"
-#include "mqtt_common.h"
-#include "mqtt_ota.hpp"
+#include "qthing/mqtt_common.h"
+#include "qthing/mqtt_ota.hpp"
+#include "qthing/event.hpp"
+#include "qthing/io.hpp"
 
 extern "C" {
-#include "mqtt_c.h"
 #include "mqtt_client.h"
+#include "qthing/mqtt_c.h"
 }
 
 #define TAG "MQTT"
diff --git a/qthing/mqtt_c.c b/qthing/mqtt_c.c
index d43f0202a66cc4860ea710d6fe20d99065eb464a..938da9ca5ad1ea0861b468498ea067ecd4dd1bb9 100644
--- a/qthing/mqtt_c.c
+++ b/qthing/mqtt_c.c
@@ -1,7 +1,7 @@
-#include "mqtt_c.h"
+#include "qthing/mqtt_c.h"
 
 #include "environment.h"
-#include "mqtt_common.h"
+#include "qthing/mqtt_common.h"
 
 esp_mqtt_client_handle_t mqtt_client_start_c(mqtt_event_callback_t mqtt_event_handler) {
   const esp_mqtt_client_config_t mqtt_cfg = {
diff --git a/qthing/mqtt_ota.cpp b/qthing/mqtt_ota.cpp
index 30a7f0c02ab9087ff409eacaa044db9ed492d3d5..f7cdf56c62b6493b1b5c065363e977699b3b168d 100644
--- a/qthing/mqtt_ota.cpp
+++ b/qthing/mqtt_ota.cpp
@@ -1,11 +1,11 @@
-#include "mqtt_ota.hpp"
+#include "qthing/mqtt_ota.hpp"
 
 #include "esp_err.h"
 #include "esp_log.h"
 #include "esp_ota_ops.h"
 #include "esp_system.h"
-#include "mqtt_common.h"
-#include "qthing_legacy.hpp"
+#include "qthing/mqtt_common.h"
+#include "qthing/qthing_legacy.hpp"
 
 #define TAG "MQTT_OTA"
 
diff --git a/qthing/network/ethernet_lan8720.cpp b/qthing/network/ethernet_lan8720.cpp
index 25f3b233d53c0f345a0dc91f3062a8e6f01333ea..0f11ce387b6fc4cd6254ab9d7e21ae02f01318e5 100644
--- a/qthing/network/ethernet_lan8720.cpp
+++ b/qthing/network/ethernet_lan8720.cpp
@@ -4,13 +4,13 @@
 #include "device_config.h"
 #include "driver/gpio.h"
 #include "environment.h"
-#include "error.hpp"
+#include "qthing/error.hpp"
 #include "esp_eth.h"
 #include "esp_event.h"
 #include "esp_log.h"
 #include "freertos/FreeRTOS.h"
 #include "freertos/task.h"
-#include "network.hpp"
+#include "qthing/network.hpp"
 #include "tcpip_adapter.h"
 
 static const char* TAG = "ethernet";
diff --git a/qthing/network/network.cpp b/qthing/network/network.cpp
index f4aa6cee1ad4472cd177db9da4a348fbeb6cd01f..fc945f0b3a6989b3083ac3318c82c0e0d430ce93 100644
--- a/qthing/network/network.cpp
+++ b/qthing/network/network.cpp
@@ -5,16 +5,16 @@
 #include "esp_event_loop.h"
 #include "esp_log.h"
 #include "esp_wifi.h"
-#include "event.hpp"
+#include "qthing/event.hpp"
 #include "freertos/FreeRTOS.h"
 #include "freertos/event_groups.h"
 #include "freertos/task.h"
-#include "io.hpp"
-#include "mqtt.hpp"
+#include "qthing/io.hpp"
+#include "qthing/mqtt.hpp"
 #include "nvs_flash.h"
-#include "qthing_legacy.hpp"
+#include "qthing/qthing_legacy.hpp"
 #include "string.h"
-#include "udp.hpp"
+#include "qthing/udp.hpp"
 
 #define TAG "network"
 
diff --git a/qthing/network/network_animation.cpp b/qthing/network/network_animation.cpp
index 0c17f0dd8ae5ebceafc1c0e81f06e9202f4dcb37..de91dbc98796717f54565f045c4be3003344d4dc 100644
--- a/qthing/network/network_animation.cpp
+++ b/qthing/network/network_animation.cpp
@@ -1,8 +1,8 @@
-#import <algorithm>
-#import <vector>
+#include <algorithm>
+#include <vector>
 
-#import "led_strip.hpp"
-#import "qthing_legacy.hpp"
+#include "qthing/led_strip.hpp"
+#include "qthing/qthing_legacy.hpp"
 
 // void addUDPPacketCallback(std::string magicString, udpPacketCallback
 // callback);
diff --git a/qthing/network/udp.cpp b/qthing/network/udp.cpp
index 6c8a1df7dc5da3c7df4c7b464ab39d65a2ad50b7..0c9a2276202e5f1404ae5fee6b936b3b4ce416b2 100644
--- a/qthing/network/udp.cpp
+++ b/qthing/network/udp.cpp
@@ -6,7 +6,7 @@
 #include "lwip/err.h"
 #include "lwip/sockets.h"
 #include "lwip/sys.h"
-#include "qthing_legacy.hpp"
+#include "qthing/qthing_legacy.hpp"
 
 static const char* TAG = "udp-server";
 
diff --git a/qthing/network/wifi.cpp b/qthing/network/wifi.cpp
index 36a6a0699c9ffefa63543a9a645e2f3d424236d7..bccfc64b6b1e6a9352e53571f7b1d7f040eb96e6 100644
--- a/qthing/network/wifi.cpp
+++ b/qthing/network/wifi.cpp
@@ -5,15 +5,15 @@
 #include "esp_event_loop.h"
 #include "esp_log.h"
 #include "esp_wifi.h"
-#include "event.hpp"
+#include "qthing/event.hpp"
 #include "freertos/FreeRTOS.h"
 #include "freertos/event_groups.h"
 #include "freertos/task.h"
-#include "io.hpp"
-#include "mqtt.hpp"
-#include "network.hpp"
+#include "qthing/io.hpp"
+#include "qthing/mqtt.hpp"
+#include "qthing/network.hpp"
 #include "nvs_flash.h"
-#include "qthing_legacy.hpp"
+#include "qthing/qthing_legacy.hpp"
 #include "string.h"
 
 namespace qthing {
diff --git a/qthing/ntp.cpp b/qthing/ntp.cpp
index 5fe9ae684a1dfc57c723ec73449c18945723cd2e..917c29429f8a535bfa11d6047d8afb272f1ef4e0 100644
--- a/qthing/ntp.cpp
+++ b/qthing/ntp.cpp
@@ -8,7 +8,7 @@
 #include "apps/sntp/sntp.h"
 #include "esp_log.h"
 #include "freertos/task.h"
-#include "qthing_legacy.hpp"
+#include "qthing/qthing_legacy.hpp"
 
 #define TAG "NTP"
 
diff --git a/qthing/oled.cpp b/qthing/oled.cpp
index e1b09221d1107dc089ff51f0f1f434eaeee41b2a..4ba182c1205cf0038525c3cea5488103b5611df6 100644
--- a/qthing/oled.cpp
+++ b/qthing/oled.cpp
@@ -2,10 +2,10 @@
 
 #include "Arduino.h"
 #include "SSD1306Wire.h"
-#include "event.hpp"
-#include "network.hpp"
-#include "oled_symbols.hpp"
-#include "qthing_legacy.hpp"
+#include "qthing/event.hpp"
+#include "qthing/network.hpp"
+#include "qthing/oled_symbols.hpp"
+#include "qthing/qthing_legacy.hpp"
 
 namespace qthing {
 
diff --git a/qthing/peripherals/button_panel_5x5.cpp b/qthing/peripherals/button_panel_5x5.cpp
index c8d902cfbdcbce5a73eaa3db4a05186d2ea40837..003a23ccc2fc20785b5faed3f1adb7869f41b292 100644
--- a/qthing/peripherals/button_panel_5x5.cpp
+++ b/qthing/peripherals/button_panel_5x5.cpp
@@ -6,8 +6,8 @@
 #include <array>
 #include <functional>
 
-#include "io.hpp"
-#include "qthing_legacy.hpp"
+#include "qthing/io.hpp"
+#include "qthing/qthing_legacy.hpp"
 
 #define TAG "button_panel"
 
diff --git a/qthing/peripherals/led_strip.cpp b/qthing/peripherals/led_strip.cpp
index 5e35ada8a9d0e158c09c4ba5a8f41a3b87eddcf7..bf85149c28d6f624afc708153f4230f9db9a969d 100644
--- a/qthing/peripherals/led_strip.cpp
+++ b/qthing/peripherals/led_strip.cpp
@@ -1,9 +1,9 @@
-#include "led_strip.hpp"
+#include "qthing/led_strip.hpp"
 
 #include <algorithm>
 
-#include "power.hpp"
-#include "qthing_legacy.hpp"
+#include "qthing/power.hpp"
+#include "qthing/qthing_legacy.hpp"
 
 using namespace qthing;
 
diff --git a/qthing/rc_433.cpp b/qthing/rc_433.cpp
index 769b07fd43b04096533e0ec74ce685fba71d98ec..1aabff1a4a45b9c8bca658429a9e5391108355e2 100644
--- a/qthing/rc_433.cpp
+++ b/qthing/rc_433.cpp
@@ -1,4 +1,4 @@
-#include "rc_433.hpp"
+#include "qthing/rc_433.hpp"
 
 #include <RCSwitch.h>
 
@@ -6,7 +6,7 @@
 
 #include "Arduino.h"
 #include "esp_log.h"
-#include "mqtt.hpp"
+#include "qthing/mqtt.hpp"
 
 #define RC_TAG "RC_433"
 
diff --git a/qthing/sensor.cpp b/qthing/sensor.cpp
index ed1cd7d97a9ae15ffb0fb11230b877763537f424..47207dd9add7c169e2d60476aa0cd981c854abb7 100644
--- a/qthing/sensor.cpp
+++ b/qthing/sensor.cpp
@@ -5,9 +5,9 @@
 #include "esp_log.h"
 #include "freertos/FreeRTOS.h"
 #include "freertos/task.h"
-#include "mqtt.hpp"
-#include "polyfill.hpp"
-#include "qthing_legacy.hpp"
+#include "qthing/mqtt.hpp"
+#include "qthing/polyfill.hpp"
+#include "qthing/qthing_legacy.hpp"
 
 #define SLEEP_PERIOD 60 * 1000 / portTICK_PERIOD_MS
 
diff --git a/qthing/status.cpp b/qthing/status.cpp
index aa1febf69293ef8b9cba2322f178b6c05e6611eb..67a05bd9612d11ad8736b6c3663e92d7b4eac85f 100644
--- a/qthing/status.cpp
+++ b/qthing/status.cpp
@@ -2,9 +2,9 @@
 #include "esp_log.h"
 #include "freertos/FreeRTOS.h"
 #include "freertos/task.h"
-#include "io.hpp"
-#include "network.hpp"
-#include "qthing_legacy.hpp"
+#include "qthing/io.hpp"
+#include "qthing/network.hpp"
+#include "qthing/qthing_legacy.hpp"
 
 namespace qthing {
 
diff --git a/qthing/system/power.cpp b/qthing/system/power.cpp
index 17a0a5c49e48b731f254eb7df5105f12bf06ae77..5f14ee7f0c18de92677e01b0200633ea0f2948e9 100644
--- a/qthing/system/power.cpp
+++ b/qthing/system/power.cpp
@@ -1,9 +1,9 @@
-#include "power.hpp"
+#include "qthing/power.hpp"
 
 #include "esp_pm.h"
 #include "freertos/FreeRTOS.h"
 #include "freertos/task.h"
-#include "qthing_legacy.hpp"
+#include "qthing/qthing_legacy.hpp"
 
 // Power state guard
 static bool max_power = false;
diff --git a/qthing/system/time.cpp b/qthing/system/time.cpp
index 1d84af8c0173c71876a0f6ba4920b85dd85c1e6c..6584cd0fd9a3224de0e5dcee9fdadd1ab1a45a3f 100644
--- a/qthing/system/time.cpp
+++ b/qthing/system/time.cpp
@@ -1,4 +1,4 @@
-#include "time.hpp"
+#include "qthing/time.hpp"
 
 bool qthing::get_localtime(tm& result) {
   time_t now = time(NULL);
diff --git a/qthing/util.cpp b/qthing/util.cpp
index 10e1cdb6ad744918e9e47033c3cc0506de686775..f791d358479d29b642586669fc27609a924bf6a1 100644
--- a/qthing/util.cpp
+++ b/qthing/util.cpp
@@ -1,11 +1,11 @@
-#include "util.hpp"
+#include "qthing/util.hpp"
 
 #include <sstream>
 
 #include "freertos/FreeRTOS.h"
 #include "freertos/task.h"
 #include "lwip/sockets.h"
-#include "qthing_legacy.hpp"
+#include "qthing/qthing_legacy.hpp"
 
 unsigned long IRAM_ATTR qthing::millis() { return xTaskGetTickCount() * portTICK_PERIOD_MS; }