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 @@
     <ClInclude Include="std_thread.h" />
     <ClInclude Include="string_util.h" />
     <ClInclude Include="swap.h" />
+    <ClInclude Include="symbols.h" />
     <ClInclude Include="thread.h" />
     <ClInclude Include="thunk.h" />
     <ClInclude Include="timer.h" />
@@ -205,6 +206,7 @@
     <ClCompile Include="misc.cpp" />
     <ClCompile Include="msg_handler.cpp" />
     <ClCompile Include="string_util.cpp" />
+    <ClCompile Include="symbols.cpp" />
     <ClCompile Include="thread.cpp" />
     <ClCompile Include="timer.cpp" />
     <ClCompile Include="utf8.cpp" />
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 @@
     <ClInclude Include="thunk.h" />
     <ClInclude Include="timer.h" />
     <ClInclude Include="utf8.h" />
+    <ClInclude Include="symbols.h" />
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="break_points.cpp" />
@@ -56,6 +57,7 @@
     <ClCompile Include="timer.cpp" />
     <ClCompile Include="utf8.cpp" />
     <ClCompile Include="version.cpp" />
+    <ClCompile Include="symbols.cpp" />
   </ItemGroup>
   <ItemGroup>
     <Text Include="CMakeLists.txt" />
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 <map>
+
+#include "common/common.h"
+
+class DebugInterface;
+
+struct TSymbol
+{
+    TSymbol() :
+        address(0),
+        size(0),
+        type(0)
+    {}
+    u32     address;
+    std::string name;
+    u32     size;
+    u32     type;
+};
+
+typedef std::map<u32, TSymbol> TSymbolsMap;
+typedef std::pair<u32, TSymbol> TSymbolsPair;
+
+namespace Symbols
+{
+    bool HasSymbol(u32 _address);
+
+    void Add(u32 _address, const std::string& _name, u32 _size, u32 _type);
+    TSymbol GetSymbol(u32 _address);
+    const std::string& GetName(u32 _address);
+    void Remove(u32 _address);
+    void Clear();
+};
+