diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
index 9c6450a751..4765931909 100644
--- a/common/CMakeLists.txt
+++ b/common/CMakeLists.txt
@@ -21,6 +21,7 @@ target_sources(common PRIVATE
FileSystem.cpp
Image.cpp
HTTPDownloader.cpp
+ MemorySettingsInterface.cpp
Misc.cpp
MD5Digest.cpp
PrecompiledHeader.cpp
@@ -72,10 +73,12 @@ target_sources(common PRIVATE
FileSystem.h
General.h
HashCombine.h
+ HeterogeneousContainers.h
Image.h
LRUCache.h
HTTPDownloader.h
MemcpyFast.h
+ MemorySettingsInterface.h
MemsetFast.inl
MD5Digest.h
MRCHelpers.h
diff --git a/common/HeterogeneousContainers.h b/common/HeterogeneousContainers.h
new file mode 100644
index 0000000000..f19ec80360
--- /dev/null
+++ b/common/HeterogeneousContainers.h
@@ -0,0 +1,78 @@
+/* PCSX2 - PS2 Emulator for PCs
+ * Copyright (C) 2002-2010 PCSX2 Dev Team
+ *
+ * PCSX2 is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU Lesser General Public License as published by the Free Software Found-
+ * ation, either version 3 of the License, or (at your option) any later version.
+ *
+ * PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with PCSX2.
+ * If not, see .
+ */
+
+/**
+ * Provides a map template which doesn't require heap allocations for lookups.
+ */
+
+#pragma once
+
+#include