diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index a0ff3d5f4..eceb4e251 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -30,6 +30,7 @@ add_library(common
gl/texture.h
hash_combine.h
heap_array.h
+ heterogeneous_containers.h
layered_settings_interface.cpp
layered_settings_interface.h
log.cpp
@@ -37,6 +38,8 @@ add_library(common
make_array.h
md5_digest.cpp
md5_digest.h
+ memory_settings_interface.cpp
+ memory_settings_interface.h
minizip_helpers.cpp
minizip_helpers.h
path.h
diff --git a/src/common/common.vcxproj b/src/common/common.vcxproj
index 8623a9b67..e9e5935ff 100644
--- a/src/common/common.vcxproj
+++ b/src/common/common.vcxproj
@@ -49,6 +49,7 @@
+
@@ -58,6 +59,7 @@
+
true
@@ -120,6 +122,7 @@
+
diff --git a/src/common/common.vcxproj.filters b/src/common/common.vcxproj.filters
index 85eb5dc60..22d0cf5a2 100644
--- a/src/common/common.vcxproj.filters
+++ b/src/common/common.vcxproj.filters
@@ -135,6 +135,8 @@
+
+
@@ -247,6 +249,7 @@
vulkan
+
diff --git a/src/common/heterogeneous_containers.h b/src/common/heterogeneous_containers.h
new file mode 100644
index 000000000..c6637786d
--- /dev/null
+++ b/src/common/heterogeneous_containers.h
@@ -0,0 +1,97 @@
+/**
+ * Provides a map template which doesn't require heap allocations for lookups.
+ */
+
+#pragma once
+
+#include "types.h"
+#include