diff --git a/Ryujinx/Ui/GLRenderer.cs b/Ryujinx/Ui/GLRenderer.cs
index fa41ca4c89..1105004a86 100644
--- a/Ryujinx/Ui/GLRenderer.cs
+++ b/Ryujinx/Ui/GLRenderer.cs
@@ -138,7 +138,10 @@ namespace Ryujinx.Ui
                     {
                         if (keyboard.IsKeyDown(OpenTK.Input.Key.Escape))
                         {
-                            Exit();
+                            if (GtkDialog.CreateExitDialog())
+                            {
+                                Exit();
+                            }
                         }
                         else
                         {
diff --git a/Ryujinx/Ui/GtkDialog.cs b/Ryujinx/Ui/GtkDialog.cs
index b4e9fa1caa..698b8b7e2e 100644
--- a/Ryujinx/Ui/GtkDialog.cs
+++ b/Ryujinx/Ui/GtkDialog.cs
@@ -5,6 +5,8 @@ namespace Ryujinx.Ui
 {
     internal class GtkDialog
     {
+        internal static bool _isExitDialogOpen = false;
+
         internal static void CreateDialog(string title, string text, string secondaryText)
         {
             MessageDialog errorDialog = new MessageDialog(null, DialogFlags.Modal, MessageType.Error, ButtonsType.Ok, null)
@@ -29,5 +31,36 @@ namespace Ryujinx.Ui
         {
             CreateDialog("Ryujinx - Error", "Ryujinx has encountered an error", errorMessage);
         }
+
+        internal static bool CreateExitDialog()
+        {
+            if (_isExitDialogOpen)
+            {
+                return false;
+            }
+
+            _isExitDialogOpen = true;
+
+            MessageDialog messageDialog = new MessageDialog(null, DialogFlags.Modal, MessageType.Question, ButtonsType.OkCancel, null)
+            {
+                Title = "Ryujinx - Exit",
+                Icon = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.assets.Icon.png"),
+                Text = "Are you sure you want to stop emulation?",
+                SecondaryText = "All unsaved data will be lost",
+                WindowPosition = WindowPosition.Center
+            };
+
+            messageDialog.SetSizeRequest(100, 20);
+            ResponseType res = (ResponseType)messageDialog.Run();
+            messageDialog.Dispose();
+            _isExitDialogOpen = false;
+            
+            if (res == ResponseType.Ok)
+            {
+                return true;
+            } 
+            
+            return false;
+        }
     }
 }