diff --git a/src/common/common.vcxproj b/src/common/common.vcxproj
index 32d735a092..202d00d18e 100644
--- a/src/common/common.vcxproj
+++ b/src/common/common.vcxproj
@@ -186,6 +186,7 @@
+
@@ -205,6 +206,7 @@
+
diff --git a/src/common/common.vcxproj.filters b/src/common/common.vcxproj.filters
index 3bdaa973f2..bd4d27b581 100644
--- a/src/common/common.vcxproj.filters
+++ b/src/common/common.vcxproj.filters
@@ -37,6 +37,7 @@
+
@@ -56,6 +57,7 @@
+
diff --git a/src/common/symbols.cpp b/src/common/symbols.cpp
new file mode 100644
index 0000000000..dcc9eeac5b
--- /dev/null
+++ b/src/common/symbols.cpp
@@ -0,0 +1,57 @@
+// Copyright 2014 Citra Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#include "common/symbols.h"
+
+TSymbolsMap g_symbols;
+
+namespace Symbols
+{
+ bool HasSymbol(u32 _address)
+ {
+ return g_symbols.find(_address) != g_symbols.end();
+ }
+
+ void Add(u32 _address, const std::string& _name, u32 _size, u32 _type)
+ {
+ if (!HasSymbol(_address))
+ {
+ TSymbol symbol;
+ symbol.address = _address;
+ symbol.name = _name;
+ symbol.size = _size;
+ symbol.type = _type;
+
+ g_symbols.insert(TSymbolsPair(_address, symbol));
+ }
+ }
+
+ TSymbol GetSymbol(u32 _address)
+ {
+ TSymbolsMap::iterator foundSymbolItr;
+ TSymbol symbol;
+
+ foundSymbolItr = g_symbols.find(_address);
+ if (foundSymbolItr != g_symbols.end())
+ {
+ symbol = (*foundSymbolItr).second;
+ }
+
+ return symbol;
+ }
+ const std::string& GetName(u32 _address)
+ {
+ return GetSymbol(_address).name;
+ }
+
+ void Remove(u32 _address)
+ {
+ g_symbols.erase(_address);
+ }
+
+ void Clear()
+ {
+ g_symbols.clear();
+ }
+}
\ No newline at end of file
diff --git a/src/common/symbols.h b/src/common/symbols.h
new file mode 100644
index 0000000000..b767496547
--- /dev/null
+++ b/src/common/symbols.h
@@ -0,0 +1,39 @@
+// Copyright 2014 Citra Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include