diff --git a/COMPILING.md b/COMPILING.md
new file mode 100644
index 00000000..5683667c
--- /dev/null
+++ b/COMPILING.md
@@ -0,0 +1,37 @@
+### Windows
+
+#### *Standalone*
+
+1) Open the solution in VS2017
+2) Compile as Release/x64 or Release/x86
+3) Run
+
+#### *Libretro*
+
+1) Open the solution in VS2017
+2) Compile as Libretro/x64 or Libretro/x86
+3) Use the "mesen_libretro.dll" file in bin/(x64 or x86)/Libretro/mesen_libretro.dll
+
+### Linux
+
+#### *Standalone*
+
+To compile Mesen under Linux you will need a recent version of clang/gcc. This is because Mesen requires a C++14 compiler, along with support for the filesystem API (C++17). Additionally, Mesen has the following dependencies:
+
+* Mono 5.18+ (package: mono-devel)
+* SDL2 (package: libsdl2-dev)
+
+**Note:** **Mono 5.18 or higher is recommended**, some older versions of Mono (e.g 4.2.2) have some stability and performance issues which can cause crashes and slow down the UI.
+The default Mono version in Ubuntu 18.04 is 4.6.2 (which also causes some layout issues in Mesen). To install the latest version of Mono, follow the instructions here: https://www.mono-project.com/download/stable/#download-lin
+
+The makefile contains some more information at the top. Running "make" will build the x64 version by default, and then "make run" should start the emulator.
+LTO is supported under clang, which gives a large performance boost (25-30%+), so turning it on is highly recommended (see makefile for details).
+
+#### *Libretro*
+
+To compile the libretro core you will need a recent version of clang/gcc. This is because Mesen requires a C++14 compiler, along with support for the filesystem API (C++17).
+
+Running "make libretro" will build the core and put it in "bin/mesen_libretro.(x64 or x86).so".
+LTO is supported under clang, which gives a large performance boost (25-30%+), so turning it on is highly recommended (see makefile for details).
+
+**Note:** There is also another makefile in the Libretro folder - this is used by the RetroArch's buildbot to build the core. You can also try using this makefile if you are having issues with the one in the root folder.
diff --git a/GUI.NET/GUI.NET.csproj b/GUI.NET/GUI.NET.csproj
index 49730a79..ba24f96d 100644
--- a/GUI.NET/GUI.NET.csproj
+++ b/GUI.NET/GUI.NET.csproj
@@ -1254,6 +1254,7 @@
+
diff --git a/GUI.NET/MonoToolStripHelper.cs b/GUI.NET/MonoToolStripHelper.cs
new file mode 100644
index 00000000..7e7cd1b1
--- /dev/null
+++ b/GUI.NET/MonoToolStripHelper.cs
@@ -0,0 +1,76 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace Mesen.GUI
+{
+ //Everything in here is a workaround for issues with dropdown menus in the latest version of Mono (5.18)
+ //Bug report:
+ //https://github.com/mono/mono/issues/12644
+ static class MonoToolStripHelper
+ {
+ private static HashSet _openedDropdowns = new HashSet();
+
+ public static void DropdownOpening(object sender, EventArgs e)
+ {
+ ToolStripDropDownItem ddItem = (ToolStripDropDownItem)sender;
+ if(!ddItem.GetCurrentParent().Visible) {
+ ddItem.DropDown.Close();
+ return;
+ }
+
+ HashSet