diff --git a/CMakeLists.txt b/CMakeLists.txt
index fca00820a9ad62ec03fe638f01a811c975532f85..a0d44e12397fdd003c956a136510700308f9887a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -133,6 +133,7 @@ set(lektor_base_SOURCES
     src/base/uri.c
     src/base/commands.c
     src/base/os.c
+    src/base/stb.c
 )
 
 set(lektor_net_SOURCES
diff --git a/inc/lektor/stb/ds.h b/inc/lektor/stb/ds.h
index 4c59bcc60b05302bd395f82b360541223daf5d9d..2a0c631e7e1561e4a01954fa4a49a11ff0086c5d 100644
--- a/inc/lektor/stb/ds.h
+++ b/inc/lektor/stb/ds.h
@@ -535,7 +535,7 @@ extern void *stbds_shmode_func(size_t elemsize, int mode);
 
 #define STBDS_OFFSETOF(var, field) ((char *)&(var)->field - (char *)(var))
 
-#define stbds_header(t)   ((stbds_array_header *)(t)-1)
+#define stbds_header(t)   (((stbds_array_header *)(t)) - 1)
 #define stbds_temp(t)     stbds_header(t)->temp
 #define stbds_temp_key(t) (*(char **)stbds_header(t)->hash_table)
 
diff --git a/src/base/stb.c b/src/base/stb.c
new file mode 100644
index 0000000000000000000000000000000000000000..28eae51fc125706ac494a8f4f7857471201f6728
--- /dev/null
+++ b/src/base/stb.c
@@ -0,0 +1,5 @@
+/* Include all implementations here to not compile the things or have multiple
+ * defines in multiple places of the same symbols. */
+
+#define STB_DS_IMPLEMENTATION
+#include <lektor/stb/ds.h>