diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs
index 465f346a80..4a73f6bd4b 100644
--- a/BizHawk.Client.EmuHawk/MainForm.cs
+++ b/BizHawk.Client.EmuHawk/MainForm.cs
@@ -601,51 +601,6 @@ namespace BizHawk.Client.EmuHawk
 			}
 		}
 
-		// TODO: SystemInfo should be able to do this
-		// Because we don't have enough places where we list SystemID's
-		public Dictionary<string, string> SupportedPlatforms
-		{
-			get
-			{
-				var released = new Dictionary<string, string>
-				{
-					{ "A26", "Atari 2600" },
-					{ "A78", "Atari 7800" },
-					{ "Lynx", "Atari Lynx" },
-
-					{ "NES", "Nintendo Entertainment System/Famicom" },
-					{ "SNES", "Super Nintendo" },
-					{ "N64", "Nintendo 64" },
-
-					{ "GB", "Game Boy" },
-					{ "GBC", "Game Boy Color" },
-					{ "GBA", "Gameboy Advance" },
-
-					{ "PSX", "Playstation" },
-
-					{ "SMS", "Sega Master System" },
-					{ "GG", "Sega Game Gear" },
-					{ "SG", "SG-1000" },
-					{ "GEN", "Sega Genesis/Megadrive" },
-					{ "SAT", "Sega Saturn" },
-
-					{ "PCE", "PC Engine/TurboGrafx 16" },
-
-					{ "Coleco", "Colecovision" },
-					{ "TI83", "TI-83 Calculator" },
-
-					{ "WSWAN", "WonderSwan" },
-				};
-
-				if (VersionInfo.DeveloperBuild)
-				{
-					released.Add("C64", "Commodore 64");
-				}
-
-				return released;
-			}
-		}
-
 		#endregion
 
 		#region Public Methods
diff --git a/BizHawk.Client.EmuHawk/PlatformChooser.cs b/BizHawk.Client.EmuHawk/PlatformChooser.cs
index c24ac3de7e..f3ca9402b5 100644
--- a/BizHawk.Client.EmuHawk/PlatformChooser.cs
+++ b/BizHawk.Client.EmuHawk/PlatformChooser.cs
@@ -7,6 +7,7 @@ using System.Linq;
 using System.Text;
 using System.Windows.Forms;
 
+using BizHawk.Emulation.Common;
 using BizHawk.Client.Common;
 
 namespace BizHawk.Client.EmuHawk
@@ -27,8 +28,11 @@ namespace BizHawk.Client.EmuHawk
 		public PlatformChooser()
 		{
 			InitializeComponent();
+			AvailableSystems = new SystemLookup().AllSystems.ToList();
 		}
 
+		private readonly List<SystemLookup.SystemInfo> AvailableSystems;
+
 		private void PlatformChooser_Load(object sender, EventArgs e)
 		{
 			if (RomGame.RomData.Length > 10 * 1024 * 1024) // If 10mb, show in megabytes
@@ -44,11 +48,11 @@ namespace BizHawk.Client.EmuHawk
 			HashBox.Text = RomGame.GameInfo.Hash;
 			int count = 0;
 			int spacing = 25;
-			foreach (var platform in GlobalWin.MainForm.SupportedPlatforms)
+			foreach (var platform in AvailableSystems)
 			{
 				var radio = new RadioButton
 				{
-					Text = platform.Value,
+					Text = platform.FullName,
 					Location = UIHelper.Scale(new Point(15, 15 + (count * spacing))),
 					Size = UIHelper.Scale(new Size(200, 23))
 				};
@@ -71,7 +75,7 @@ namespace BizHawk.Client.EmuHawk
 		private void OkBtn_Click(object sender, EventArgs e)
 		{
 			var selectedValue = SelectedRadio != null ? SelectedRadio.Text : string.Empty;
-			PlatformChoice = GlobalWin.MainForm.SupportedPlatforms.FirstOrDefault(x => x.Value == selectedValue).Key;
+			PlatformChoice = AvailableSystems.FirstOrDefault(x => x.FullName == selectedValue).SystemId;
 
 			if (AlwaysCheckbox.Checked)
 			{
diff --git a/BizHawk.Client.EmuHawk/config/FileExtensionPreferencesPicker.cs b/BizHawk.Client.EmuHawk/config/FileExtensionPreferencesPicker.cs
index 9570f75650..c82a7f8c8a 100644
--- a/BizHawk.Client.EmuHawk/config/FileExtensionPreferencesPicker.cs
+++ b/BizHawk.Client.EmuHawk/config/FileExtensionPreferencesPicker.cs
@@ -7,6 +7,7 @@ using System.Linq;
 using System.Text;
 using System.Windows.Forms;
 
+using BizHawk.Emulation.Common;
 using BizHawk.Client.Common;
 
 namespace BizHawk.Client.EmuHawk
@@ -16,8 +17,11 @@ namespace BizHawk.Client.EmuHawk
 		public FileExtensionPreferencesPicker()
 		{
 			InitializeComponent();
+			AvailableSystems = new SystemLookup().AllSystems.ToList();
 		}
 
+		private readonly List<SystemLookup.SystemInfo> AvailableSystems;
+
 		public string FileExtension { get; set; }
 		public string OriginalPreference { get; set; }
 
@@ -27,8 +31,8 @@ namespace BizHawk.Client.EmuHawk
 			{
 				if (PlatformDropdown.SelectedIndex > 0)
 				{
-					return GlobalWin.MainForm.SupportedPlatforms
-						.FirstOrDefault(x => x.Value == PlatformDropdown.SelectedItem.ToString()).Key;
+					return AvailableSystems
+						.FirstOrDefault(x => x.SystemId == PlatformDropdown.SelectedItem.ToString()).FullName;
 				}
 
 				return string.Empty;
@@ -38,9 +42,9 @@ namespace BizHawk.Client.EmuHawk
 		private void PopulatePlatforms()
 		{
 			PlatformDropdown.Items.Add("Ask me on load");
-			foreach (var platform in GlobalWin.MainForm.SupportedPlatforms)
+			foreach (var platform in AvailableSystems)
 			{
-				PlatformDropdown.Items.Add(platform.Value);
+				PlatformDropdown.Items.Add(platform.FullName);
 			}
 		}
 
@@ -52,7 +56,7 @@ namespace BizHawk.Client.EmuHawk
 
 				foreach (var val in dispVals)
 				{
-					yield return GlobalWin.MainForm.SupportedPlatforms.FirstOrDefault(x => x.Value == val).Key ?? string.Empty;
+					yield return AvailableSystems.FirstOrDefault(x => x.FullName == val).SystemId ?? string.Empty;
 				}
 			}
 		}
@@ -64,11 +68,11 @@ namespace BizHawk.Client.EmuHawk
 			var selectedSystemId = Global.Config.PreferredPlatformsForExtensions[FileExtension];
 			if (!string.IsNullOrEmpty(selectedSystemId))
 			{
-				var selectedDispString = GlobalWin.MainForm.SupportedPlatforms[selectedSystemId];
+				var selectedSystem = AvailableSystems.FirstOrDefault(s => s.SystemId == selectedSystemId);
 
 				var selectedItem = PlatformDropdown.Items
 					.OfType<string>()
-					.FirstOrDefault(item => item == selectedDispString);
+					.FirstOrDefault(item => item == (selectedSystem != null ? selectedSystem.FullName : string.Empty));
 
 				if (selectedItem != null)
 				{
diff --git a/BizHawk.Emulation.Common/BizHawk.Emulation.Common.csproj b/BizHawk.Emulation.Common/BizHawk.Emulation.Common.csproj
index 5f761178ec..d06c9d4414 100644
--- a/BizHawk.Emulation.Common/BizHawk.Emulation.Common.csproj
+++ b/BizHawk.Emulation.Common/BizHawk.Emulation.Common.csproj
@@ -109,6 +109,7 @@
     <Compile Include="Sound\VRC6Alt.cs" />
     <Compile Include="Sound\YM2413.cs" />
     <Compile Include="Sound\YM2612.cs" />
+    <Compile Include="SystemLookup.cs" />
     <Compile Include="TextState.cs" />
   </ItemGroup>
   <ItemGroup>
diff --git a/BizHawk.Emulation.Common/SystemLookup.cs b/BizHawk.Emulation.Common/SystemLookup.cs
new file mode 100644
index 0000000000..a079f690f6
--- /dev/null
+++ b/BizHawk.Emulation.Common/SystemLookup.cs
@@ -0,0 +1,73 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+
+namespace BizHawk.Emulation.Common
+{
+	// TODO: This should build itself from the Cores assembly, we don't want to maintain this
+	public class SystemLookup
+	{
+		private readonly List<SystemInfo> Systems = new List<SystemInfo>
+		{
+			new SystemInfo { SystemId = "A26", FullName = "Atari 2600" },
+			new SystemInfo { SystemId = "A78", FullName = "Atari 7800" },
+			new SystemInfo { SystemId = "Lynx", FullName = "Atari Lynx" },
+
+			new SystemInfo { SystemId = "NES", FullName = "NES" },
+			new SystemInfo { SystemId = "SNES", FullName = "Super NES" },
+			new SystemInfo { SystemId = "N64", FullName = "Nintendo 64" },
+
+			new SystemInfo { SystemId = "GB", FullName = "Gameboy" },
+			new SystemInfo { SystemId = "GBA", FullName = "Gameboy Advance" },
+
+			new SystemInfo { SystemId = "PSX", FullName = "Playstation" },
+
+			new SystemInfo { SystemId = "SMS", FullName = "Sega Master System" },
+			new SystemInfo { SystemId = "GEN", FullName = "Sega Genesis/Megadrive" },
+			new SystemInfo { SystemId = "SAT", FullName = "Sega Saturn" },
+
+			new SystemInfo { SystemId = "PCE", FullName = "PC Engine/TurboGrafx 16" },
+			new SystemInfo { SystemId = "Coleco", FullName = "Colecovision" },
+			new SystemInfo { SystemId = "TI83", FullName = "TI-83 Calculator" },
+			new SystemInfo { SystemId = "WSWAN", FullName = "WonderSwan" },
+
+			new SystemInfo { SystemId = "C64", FullName = "Commodore 64" }
+		};
+
+		public SystemInfo this[string systemId]
+		{
+			get
+			{
+				var system = Systems.FirstOrDefault(s => s.SystemId == systemId);
+
+				if (system != null)
+				{
+					return system;
+				}
+
+				return new SystemInfo { SystemId = "Unknown", FullName = "Unknown" };
+			}
+		}
+
+		public IEnumerable<SystemInfo> AllSystems
+		{
+			get
+			{
+				if (VersionInfo.DeveloperBuild)
+				{
+					return Systems;
+				}
+
+				return Systems.Where(s => s.SystemId != "C64");
+			}
+		}
+
+		public class SystemInfo
+		{
+			public string SystemId { get; set; }
+			public string FullName { get; set; }
+		}
+	}
+}