diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64SyncSettings.Controller.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64SyncSettings.Controller.cs
new file mode 100644
index 0000000000..ec5f0e4fdb
--- /dev/null
+++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64SyncSettings.Controller.cs
@@ -0,0 +1,74 @@
+using System.ComponentModel;
+using Newtonsoft.Json;
+
+namespace BizHawk.Emulation.Cores.Nintendo.N64
+{
+	public partial class N64SyncSettings
+	{
+		public class N64ControllerSettings
+		{
+			/// <summary>
+			/// Enumeration defining the different N64 controller pak types
+			/// </summary>
+			public enum N64ControllerPakType
+			{
+				[Description("None")]
+				NO_PAK = 1,
+
+				[Description("Memory Card")]
+				MEMORY_CARD = 2,
+
+				[Description("Rumble Pak")]
+				RUMBLE_PAK = 3,
+
+				[Description("Transfer Pak")]
+				TRANSFER_PAK = 4
+			}
+
+			[JsonIgnore]
+			private N64ControllerPakType _type = N64ControllerPakType.NO_PAK;
+
+			/// <summary>
+			/// Type of the pak inserted in the controller
+			/// Currently only NO_PAK and MEMORY_CARD are
+			/// supported. Other values may be set and
+			/// are recognized but they have no function
+			/// yet. e.g. TRANSFER_PAK makes the N64
+			/// recognize a transfer pak inserted in
+			/// the controller but there is no
+			/// communication to the transfer pak.
+			/// </summary>
+			public N64ControllerPakType PakType
+			{
+				get { return _type; }
+				set { _type = value; }
+			}
+
+			[JsonIgnore]
+			private bool _isConnected = true;
+
+			/// <summary>
+			/// Connection status of the controller i.e.:
+			/// Is the controller plugged into the N64?
+			/// </summary>
+			public bool IsConnected
+			{
+				get { return _isConnected; }
+				set { _isConnected = value; }
+			}
+
+			/// <summary>
+			/// Clones this object
+			/// </summary>
+			/// <returns>New object with the same values</returns>
+			public N64ControllerSettings Clone()
+			{
+				return new N64ControllerSettings
+				{
+					PakType = PakType,
+					IsConnected = IsConnected
+				};
+			}
+		}
+	}
+}
diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64SyncSettings.Jabo.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64SyncSettings.Jabo.cs
index 4f6b5b30e6..dc6cf9a5a4 100644
--- a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64SyncSettings.Jabo.cs
+++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64SyncSettings.Jabo.cs
@@ -13,7 +13,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64
 		{
 			public N64JaboPluginSettings()
 			{
-				anisotropic_level = ANISOTROPIC_FILTERING_LEVEL.four_times;
+				anisotropic_level = ANISOTROPIC_FILTERING_LEVEL.FourTimes;
 				brightness = 100;
 				super2xsal = false;
 				texture_filter = false;
@@ -26,7 +26,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64
 				copy_framebuffer = false;
 				resolution_width = -1;
 				resolution_height = -1;
-				clear_mode = DIRECT3D_CLEAR_MODE.def;
+				clear_mode = Direct3DClearMode.Default;
 			}
 
 			public PluginType GetPluginType()
@@ -56,104 +56,105 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64
 				return dictionary;
 			}
 
-			public enum ANISOTROPIC_FILTERING_LEVEL
-			{
-				[Description("Off")]
-				off = 0,
-
-				[Description("2X")]
-				two_times = 1,
-
-				[Description("4X")]
-				four_times = 2,
-
-				[Description("8X")]
-				eight_times = 3,
-
-				[Description("16X")]
-				sixteen_times = 4
-			}
-
-			[DefaultValue(ANISOTROPIC_FILTERING_LEVEL.four_times)]
+			[DefaultValue(ANISOTROPIC_FILTERING_LEVEL.FourTimes)]
+			[DisplayName("Anisotropic filtering")]
 			[Description("Anisotropic filtering level")]
-			//[DisplayName("Anisotropic filtering")]
 			public ANISOTROPIC_FILTERING_LEVEL anisotropic_level { get; set; }
 
 			[DefaultValue(100)]
+			[DisplayName("Brightness")]
 			[Description("Brightness level, 100%-190%")]
-			//[DisplayName("Brightness")]
 			public int brightness { get; set; }
 
 			[DefaultValue(false)]
+			[DisplayName("Super2xSal textures")]
 			[Description("Enables Super2xSal textures")]
-			//[DisplayName("Super2xSal textures")]
 			public bool super2xsal { get; set; }
 
 			[DefaultValue(false)]
+			[DisplayName("Always use texture filter")]
 			[Description("Always use texture filter")]
-			//[DisplayName("Always use texture filter")]
 			public bool texture_filter { get; set; }
 
 			[DefaultValue(false)]
+			[DisplayName("Adjust game aspect ratio to match yours")]
 			[Description("Adjust game aspect ratio to match yours")]
-			//[DisplayName("Adjust game aspect ratio to match yours")]
 			public bool adjust_aspect_ratio { get; set; }
 
 			[DefaultValue(false)]
+			[DisplayName("Use legacy pixel pipeline")]
 			[Description("Use legacy pixel pipeline")]
-			//[DisplayName("Use legacy pixel pipeline")]
 			public bool legacy_pixel_pipeline { get; set; }
 
 			[DefaultValue(false)]
+			[DisplayName("Force alpha blending")]
 			[Description("Force alpha blending")]
-			//[DisplayName("Force alpha blending")]
 			public bool alpha_blending { get; set; }
 
 			[DefaultValue(false)]
+			[DisplayName("Wireframe rendering")]
 			[Description("Wireframe rendering")]
-			//[DisplayName("Wireframe rendering")]
 			public bool wireframe { get; set; }
 
 			[DefaultValue(false)]
+			[DisplayName("Use Direct3D trans pipeline")]
 			[Description("Use Direct3D transformation pipeline")]
-			//[DisplayName("Use Direct3D transformation pipeline")]
 			public bool direct3d_transformation_pipeline { get; set; }
 
 			[DefaultValue(false)]
+			[DisplayName("Force Z Compare")]
 			[Description("Force Z Compare")]
-			//[DisplayName("Force Z Compare")]
 			public bool z_compare { get; set; }
 
 			[DefaultValue(false)]
+			[DisplayName("Copy framebuffer")]
 			[Description("Copy framebuffer to RDRAM")]
-			//[DisplayName("Copy framebuffer to RDRAM")]
 			public bool copy_framebuffer { get; set; }
 
 			[DefaultValue(-1)]
+			[DisplayName("Emulated Width")]
 			[Description("Emulated Width")]
-			//[DisplayName("Emulated Width")]
 			public int resolution_width { get; set; }
 
 			[DefaultValue(-1)]
+			[DisplayName("Emulated Height")]
 			[Description("Emulated Height")]
-			//[DisplayName("Emulated Height")]
 			public int resolution_height { get; set; }
 
-			public enum DIRECT3D_CLEAR_MODE
+			[DefaultValue(Direct3DClearMode.Default)]
+			[DisplayName("Direct3D Clear Mode")]
+			[Description("Direct3D Clear Mode")]
+			public Direct3DClearMode clear_mode { get; set; }
+
+			public enum ANISOTROPIC_FILTERING_LEVEL
+			{
+				[Description("Off")]
+				Off = 0,
+
+				[Description("2X")]
+				TwoTimes = 1,
+
+				[Description("4X")]
+				FourTimes = 2,
+
+				[Description("8X")]
+				EightTimes = 3,
+
+				[Description("16X")]
+				SixteenTimes = 4
+			}
+
+			public enum Direct3DClearMode
 			{
 				[Description("Default")]
-				def = 0,
+				Default = 0,
 
 				[Description("Only Per Frame")]
-				per_frame = 1,
+				PerFrame = 1,
 
 				[Description("Always")]
-				always = 2
+				Always = 2
 			}
-			[DefaultValue(DIRECT3D_CLEAR_MODE.def)]
-			[Description("Direct3D Clear Mode")]
-			//[DisplayName("Direct3D Clear Mode")]
-			public DIRECT3D_CLEAR_MODE clear_mode { get; set; }
 
 			public N64JaboPluginSettings Clone()
 			{