diff --git a/Browser/Handling/ContextMenuBase.cs b/Browser/Handling/ContextMenuBase.cs
index 5f720a7d..9cc4c84e 100644
--- a/Browser/Handling/ContextMenuBase.cs
+++ b/Browser/Handling/ContextMenuBase.cs
@@ -221,7 +221,7 @@ protected static void InsertSelectionSearchItem(IMenuModel model, CefMenuCommand
 		}
 
 		protected static void AddDebugMenuItems(IMenuModel model) {
-			if (BrowserUtils.HasDevTools) {
+			if (Config.DevToolsInContextMenu) {
 				AddSeparator(model);
 				model.AddItem(MenuOpenDevTools, "Open dev tools");
 			}
diff --git a/Browser/Handling/General/LifeSpanHandler.cs b/Browser/Handling/General/CustomLifeSpanHandler.cs
similarity index 59%
rename from Browser/Handling/General/LifeSpanHandler.cs
rename to Browser/Handling/General/CustomLifeSpanHandler.cs
index 72ccf598..140e1e29 100644
--- a/Browser/Handling/General/LifeSpanHandler.cs
+++ b/Browser/Handling/General/CustomLifeSpanHandler.cs
@@ -1,9 +1,10 @@
 using CefSharp;
+using CefSharp.Handler;
 using TweetDuck.Controls;
 using TweetDuck.Utils;
 
 namespace TweetDuck.Browser.Handling.General {
-	sealed class LifeSpanHandler : ILifeSpanHandler {
+	sealed class CustomLifeSpanHandler : LifeSpanHandler {
 		private static bool IsPopupAllowed(string url) {
 			return url.StartsWith("https://twitter.com/teams/authorize?");
 		}
@@ -22,17 +23,13 @@ public static bool HandleLinkClick(IWebBrowser browserControl, WindowOpenDisposi
 			}
 		}
 
-		public bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures, IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser) {
+		protected override bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures, IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser) {
 			newBrowser = null;
 			return HandleLinkClick(browserControl, targetDisposition, targetUrl);
 		}
 
-		public void OnAfterCreated(IWebBrowser browserControl, IBrowser browser) {}
-
-		public bool DoClose(IWebBrowser browserControl, IBrowser browser) {
+		protected override bool DoClose(IWebBrowser browserControl, IBrowser browser) {
 			return false;
 		}
-
-		public void OnBeforeClose(IWebBrowser browserControl, IBrowser browser) {}
 	}
 }
diff --git a/Browser/Handling/KeyboardHandlerBase.cs b/Browser/Handling/KeyboardHandlerBase.cs
index 5cf5ae78..7ad390cb 100644
--- a/Browser/Handling/KeyboardHandlerBase.cs
+++ b/Browser/Handling/KeyboardHandlerBase.cs
@@ -1,31 +1,12 @@
 using System.Windows.Forms;
 using CefSharp;
-using TweetDuck.Controls;
-using TweetDuck.Dialogs;
 using TweetDuck.Utils;
 
 namespace TweetDuck.Browser.Handling {
 	class KeyboardHandlerBase : IKeyboardHandler {
 		protected virtual bool HandleRawKey(IWebBrowser browserControl, Keys key, CefEventFlags modifiers) {
 			if (modifiers == (CefEventFlags.ControlDown | CefEventFlags.ShiftDown) && key == Keys.I) {
-				if (BrowserUtils.HasDevTools) {
-					browserControl.OpenDevToolsCustom();
-				}
-				else {
-					browserControl.AsControl().InvokeSafe(() => {
-						string extraMessage;
-
-						if (Program.IsPortable) {
-							extraMessage = "Please download the portable installer, select the folder with your current installation of TweetDuck Portable, and tick 'Install dev tools' during the installation process.";
-						}
-						else {
-							extraMessage = "Please download the installer, and tick 'Install dev tools' during the installation process. The installer will automatically find and update your current installation of TweetDuck.";
-						}
-
-						FormMessage.Information("Dev Tools", "You do not have dev tools installed. " + extraMessage, FormMessage.OK);
-					});
-				}
-
+				browserControl.OpenDevToolsCustom();
 				return true;
 			}
 
diff --git a/Browser/Handling/RequestHandlerBase.cs b/Browser/Handling/RequestHandlerBase.cs
index 0ccca4c3..baf67beb 100644
--- a/Browser/Handling/RequestHandlerBase.cs
+++ b/Browser/Handling/RequestHandlerBase.cs
@@ -11,7 +11,7 @@ public RequestHandlerBase(bool autoReload) {
 		}
 
 		protected override bool OnOpenUrlFromTab(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture) {
-			return LifeSpanHandler.HandleLinkClick(browserControl, targetDisposition, targetUrl);
+			return CustomLifeSpanHandler.HandleLinkClick(browserControl, targetDisposition, targetUrl);
 		}
 
 		protected override void OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status) {
diff --git a/Browser/Handling/ResourceRequestHandlerBase.cs b/Browser/Handling/ResourceRequestHandlerBase.cs
index 03738252..0fa904a0 100644
--- a/Browser/Handling/ResourceRequestHandlerBase.cs
+++ b/Browser/Handling/ResourceRequestHandlerBase.cs
@@ -4,7 +4,6 @@
 using System.Linq;
 using System.Text.RegularExpressions;
 using CefSharp;
-using TweetDuck.Utils;
 using TweetLib.Core.Utils;
 
 namespace TweetDuck.Browser.Handling {
@@ -37,11 +36,9 @@ protected override CefReturnValue OnBeforeResourceLoad(IWebBrowser browserContro
 				return CefReturnValue.Cancel;
 			}
 
-			if (BrowserUtils.HasDevTools) {
-				NameValueCollection headers = request.Headers;
-				headers.Remove("x-devtools-emulate-network-conditions-client-id");
-				request.Headers = headers;
-			}
+			NameValueCollection headers = request.Headers;
+			headers.Remove("x-devtools-emulate-network-conditions-client-id");
+			request.Headers = headers;
 
 			return base.OnBeforeResourceLoad(browserControl, browser, frame, request, callback);
 		}
diff --git a/Browser/Notification/FormNotificationBase.cs b/Browser/Notification/FormNotificationBase.cs
index b8b2bb84..50d640d5 100644
--- a/Browser/Notification/FormNotificationBase.cs
+++ b/Browser/Notification/FormNotificationBase.cs
@@ -139,7 +139,7 @@ protected FormNotificationBase(FormBrowser owner, bool enableContextMenu) {
 			this.browser = new ChromiumWebBrowser(BlankURL) {
 				MenuHandler = new ContextMenuNotification(this, enableContextMenu),
 				JsDialogHandler = new JavaScriptDialogHandler(),
-				LifeSpanHandler = new LifeSpanHandler(),
+				LifeSpanHandler = new CustomLifeSpanHandler(),
 				RequestHandler = new RequestHandlerBase(false),
 				ResourceRequestHandlerFactory = resourceRequestHandler.SelfFactory
 			};
diff --git a/Browser/TweetDeckBrowser.cs b/Browser/TweetDeckBrowser.cs
index 8471e092..addd7223 100644
--- a/Browser/TweetDeckBrowser.cs
+++ b/Browser/TweetDeckBrowser.cs
@@ -64,7 +64,7 @@ public TweetDeckBrowser(FormBrowser owner, PluginManager plugins, TweetDeckBridg
 				MenuHandler = new ContextMenuBrowser(owner),
 				JsDialogHandler = new JavaScriptDialogHandler(),
 				KeyboardHandler = new KeyboardHandlerBrowser(owner),
-				LifeSpanHandler = new LifeSpanHandler(),
+				LifeSpanHandler = new CustomLifeSpanHandler(),
 				RequestHandler = requestHandler,
 				ResourceRequestHandlerFactory = resourceRequestHandler.SelfFactory
 			};
diff --git a/Configuration/UserConfig.cs b/Configuration/UserConfig.cs
index 4faf6590..b95daf0e 100644
--- a/Configuration/UserConfig.cs
+++ b/Configuration/UserConfig.cs
@@ -78,7 +78,8 @@ sealed class UserConfig : BaseConfig {
 		public string CustomBrowserCSS      { get; set; } = null;
 		public string CustomNotificationCSS { get; set; } = null;
 
-		public bool DevToolsWindowOnTop     { get; set; } = true;
+		public bool DevToolsInContextMenu { get; set; } = false;
+		public bool DevToolsWindowOnTop   { get; set; } = true;
 
 		// SPECIAL PROPERTIES
 
diff --git a/Dialogs/FormGuide.cs b/Dialogs/FormGuide.cs
index d07bd2b7..a87cd830 100644
--- a/Dialogs/FormGuide.cs
+++ b/Dialogs/FormGuide.cs
@@ -76,7 +76,7 @@ private FormGuide(string url, FormBrowser owner) {
 				MenuHandler = new ContextMenuGuide(owner),
 				JsDialogHandler = new JavaScriptDialogHandler(),
 				KeyboardHandler = new KeyboardHandlerBase(),
-				LifeSpanHandler = new LifeSpanHandler(),
+				LifeSpanHandler = new CustomLifeSpanHandler(),
 				RequestHandler = new RequestHandlerBase(true),
 				ResourceRequestHandlerFactory = resourceRequestHandler.SelfFactory
 			};
diff --git a/Dialogs/FormSettings.cs b/Dialogs/FormSettings.cs
index 69fb3e1c..7f3651e2 100644
--- a/Dialogs/FormSettings.cs
+++ b/Dialogs/FormSettings.cs
@@ -209,7 +209,7 @@ public SettingsTab(Button button, Func<BaseTab> constructor) {
 			}
 		}
 
-		internal abstract class BaseTab : UserControl {
+		internal class BaseTab : UserControl {
 			protected static UserConfig Config => Program.Config.User;
 			protected static SystemConfig SysConfig => Program.Config.System;
 
diff --git a/Dialogs/Settings/DialogSettingsCSS.cs b/Dialogs/Settings/DialogSettingsCSS.cs
index 67f5ea5c..2bf50f24 100644
--- a/Dialogs/Settings/DialogSettingsCSS.cs
+++ b/Dialogs/Settings/DialogSettingsCSS.cs
@@ -3,7 +3,6 @@
 using System.Text.RegularExpressions;
 using System.Windows.Forms;
 using TweetDuck.Controls;
-using TweetDuck.Utils;
 
 namespace TweetDuck.Dialogs.Settings {
 	sealed partial class DialogSettingsCSS : Form {
@@ -27,10 +26,6 @@ public DialogSettingsCSS(string browserCSS, string notificationCSS, Action<strin
 			textBoxNotificationCSS.EnableMultilineShortcuts();
 			textBoxNotificationCSS.Text = notificationCSS ?? "";
 
-			if (!BrowserUtils.HasDevTools) {
-				btnOpenDevTools.Enabled = false;
-			}
-
 			ActiveControl = textBoxBrowserCSS;
 			textBoxBrowserCSS.Select(textBoxBrowserCSS.TextLength, 0);
 		}
diff --git a/Dialogs/Settings/TabSettingsAdvanced.Designer.cs b/Dialogs/Settings/TabSettingsAdvanced.Designer.cs
index fcf5977b..93514752 100644
--- a/Dialogs/Settings/TabSettingsAdvanced.Designer.cs
+++ b/Dialogs/Settings/TabSettingsAdvanced.Designer.cs
@@ -1,11 +1,11 @@
 namespace TweetDuck.Dialogs.Settings {
     partial class TabSettingsAdvanced {
-        /// <summary> 
+        /// <summary>
         /// Required designer variable.
         /// </summary>
         private System.ComponentModel.IContainer components = null;
 
-        /// <summary> 
+        /// <summary>
         /// Clean up any resources being used.
         /// </summary>
         /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
@@ -18,8 +18,8 @@ protected override void Dispose(bool disposing) {
 
         #region Component Designer generated code
 
-        /// <summary> 
-        /// Required method for Designer support - do not modify 
+        /// <summary>
+        /// Required method for Designer support - do not modify
         /// the contents of this method with the code editor.
         /// </summary>
         private void InitializeComponent() {
@@ -42,16 +42,17 @@ private void InitializeComponent() {
             this.labelConfiguration = new System.Windows.Forms.Label();
             this.flowPanel = new System.Windows.Forms.FlowLayoutPanel();
             this.labelDevTools = new System.Windows.Forms.Label();
+            this.checkDevToolsInContextMenu = new System.Windows.Forms.CheckBox();
             this.checkDevToolsWindowOnTop = new System.Windows.Forms.CheckBox();
-            ((System.ComponentModel.ISupportInitialize)(this.numClearCacheThreshold)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize) (this.numClearCacheThreshold)).BeginInit();
             this.panelAppButtons.SuspendLayout();
             this.panelClearCacheAuto.SuspendLayout();
             this.panelConfiguration.SuspendLayout();
             this.flowPanel.SuspendLayout();
             this.SuspendLayout();
-            // 
+            //
             // btnClearCache
-            // 
+            //
             this.btnClearCache.Font = new System.Drawing.Font("Segoe UI", 9F);
             this.btnClearCache.Location = new System.Drawing.Point(5, 135);
             this.btnClearCache.Margin = new System.Windows.Forms.Padding(5, 3, 3, 3);
@@ -60,9 +61,9 @@ private void InitializeComponent() {
             this.btnClearCache.TabIndex = 3;
             this.btnClearCache.Text = "Clear Cache (...)";
             this.btnClearCache.UseVisualStyleBackColor = true;
-            // 
+            //
             // btnEditCefArgs
-            // 
+            //
             this.btnEditCefArgs.Font = new System.Drawing.Font("Segoe UI", 9F);
             this.btnEditCefArgs.Location = new System.Drawing.Point(5, 3);
             this.btnEditCefArgs.Margin = new System.Windows.Forms.Padding(5, 3, 3, 3);
@@ -71,9 +72,9 @@ private void InitializeComponent() {
             this.btnEditCefArgs.TabIndex = 0;
             this.btnEditCefArgs.Text = "Edit CEF Arguments";
             this.btnEditCefArgs.UseVisualStyleBackColor = true;
-            // 
+            //
             // btnEditCSS
-            // 
+            //
             this.btnEditCSS.Font = new System.Drawing.Font("Segoe UI", 9F);
             this.btnEditCSS.Location = new System.Drawing.Point(154, 3);
             this.btnEditCSS.Name = "btnEditCSS";
@@ -81,9 +82,9 @@ private void InitializeComponent() {
             this.btnEditCSS.TabIndex = 1;
             this.btnEditCSS.Text = "Edit CSS";
             this.btnEditCSS.UseVisualStyleBackColor = true;
-            // 
+            //
             // btnRestartArgs
-            // 
+            //
             this.btnRestartArgs.Font = new System.Drawing.Font("Segoe UI", 9F);
             this.btnRestartArgs.Location = new System.Drawing.Point(154, 32);
             this.btnRestartArgs.Name = "btnRestartArgs";
@@ -91,9 +92,9 @@ private void InitializeComponent() {
             this.btnRestartArgs.TabIndex = 3;
             this.btnRestartArgs.Text = "Restart with Arguments";
             this.btnRestartArgs.UseVisualStyleBackColor = true;
-            // 
+            //
             // btnRestart
-            // 
+            //
             this.btnRestart.Font = new System.Drawing.Font("Segoe UI", 9F);
             this.btnRestart.Location = new System.Drawing.Point(154, 3);
             this.btnRestart.Name = "btnRestart";
@@ -101,9 +102,9 @@ private void InitializeComponent() {
             this.btnRestart.TabIndex = 2;
             this.btnRestart.Text = "Restart the Program";
             this.btnRestart.UseVisualStyleBackColor = true;
-            // 
+            //
             // btnOpenAppFolder
-            // 
+            //
             this.btnOpenAppFolder.Font = new System.Drawing.Font("Segoe UI", 9F);
             this.btnOpenAppFolder.Location = new System.Drawing.Point(5, 3);
             this.btnOpenAppFolder.Margin = new System.Windows.Forms.Padding(5, 3, 3, 3);
@@ -112,9 +113,9 @@ private void InitializeComponent() {
             this.btnOpenAppFolder.TabIndex = 0;
             this.btnOpenAppFolder.Text = "Open Program Folder";
             this.btnOpenAppFolder.UseVisualStyleBackColor = true;
-            // 
+            //
             // btnOpenDataFolder
-            // 
+            //
             this.btnOpenDataFolder.Font = new System.Drawing.Font("Segoe UI", 9F);
             this.btnOpenDataFolder.Location = new System.Drawing.Point(5, 32);
             this.btnOpenDataFolder.Margin = new System.Windows.Forms.Padding(5, 3, 3, 3);
@@ -123,39 +124,23 @@ private void InitializeComponent() {
             this.btnOpenDataFolder.TabIndex = 1;
             this.btnOpenDataFolder.Text = "Open Data Folder";
             this.btnOpenDataFolder.UseVisualStyleBackColor = true;
-            // 
+            //
             // numClearCacheThreshold
-            // 
+            //
             this.numClearCacheThreshold.Font = new System.Drawing.Font("Segoe UI", 9F);
-            this.numClearCacheThreshold.Increment = new decimal(new int[] {
-            50,
-            0,
-            0,
-            0});
+            this.numClearCacheThreshold.Increment = new decimal(new int[] { 50, 0, 0, 0 });
             this.numClearCacheThreshold.Location = new System.Drawing.Point(210, 5);
-            this.numClearCacheThreshold.Maximum = new decimal(new int[] {
-            1000,
-            0,
-            0,
-            0});
-            this.numClearCacheThreshold.Minimum = new decimal(new int[] {
-            100,
-            0,
-            0,
-            0});
+            this.numClearCacheThreshold.Maximum = new decimal(new int[] { 1000, 0, 0, 0 });
+            this.numClearCacheThreshold.Minimum = new decimal(new int[] { 100, 0, 0, 0 });
             this.numClearCacheThreshold.Name = "numClearCacheThreshold";
             this.numClearCacheThreshold.Size = new System.Drawing.Size(89, 23);
             this.numClearCacheThreshold.TabIndex = 1;
             this.numClearCacheThreshold.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
             this.numClearCacheThreshold.TextSuffix = " MB";
-            this.numClearCacheThreshold.Value = new decimal(new int[] {
-            250,
-            0,
-            0,
-            0});
-            // 
+            this.numClearCacheThreshold.Value = new decimal(new int[] { 250, 0, 0, 0 });
+            //
             // checkClearCacheAuto
-            // 
+            //
             this.checkClearCacheAuto.AutoSize = true;
             this.checkClearCacheAuto.Font = new System.Drawing.Font("Segoe UI", 9F);
             this.checkClearCacheAuto.Location = new System.Drawing.Point(6, 6);
@@ -165,9 +150,9 @@ private void InitializeComponent() {
             this.checkClearCacheAuto.TabIndex = 0;
             this.checkClearCacheAuto.Text = "Clear Automatically When Above";
             this.checkClearCacheAuto.UseVisualStyleBackColor = true;
-            // 
+            //
             // labelApp
-            // 
+            //
             this.labelApp.AutoSize = true;
             this.labelApp.Font = new System.Drawing.Font("Segoe UI Semibold", 10.5F, System.Drawing.FontStyle.Bold);
             this.labelApp.Location = new System.Drawing.Point(0, 0);
@@ -176,9 +161,9 @@ private void InitializeComponent() {
             this.labelApp.Size = new System.Drawing.Size(97, 19);
             this.labelApp.TabIndex = 0;
             this.labelApp.Text = "APPLICATION";
-            // 
+            //
             // panelAppButtons
-            // 
+            //
             this.panelAppButtons.Controls.Add(this.btnOpenDataFolder);
             this.panelAppButtons.Controls.Add(this.btnOpenAppFolder);
             this.panelAppButtons.Controls.Add(this.btnRestart);
@@ -188,9 +173,9 @@ private void InitializeComponent() {
             this.panelAppButtons.Name = "panelAppButtons";
             this.panelAppButtons.Size = new System.Drawing.Size(300, 62);
             this.panelAppButtons.TabIndex = 1;
-            // 
+            //
             // labelCache
-            // 
+            //
             this.labelCache.AutoSize = true;
             this.labelCache.Font = new System.Drawing.Font("Segoe UI Semibold", 10.5F, System.Drawing.FontStyle.Bold);
             this.labelCache.Location = new System.Drawing.Point(0, 112);
@@ -199,9 +184,9 @@ private void InitializeComponent() {
             this.labelCache.Size = new System.Drawing.Size(123, 19);
             this.labelCache.TabIndex = 2;
             this.labelCache.Text = "BROWSER CACHE";
-            // 
+            //
             // panelClearCacheAuto
-            // 
+            //
             this.panelClearCacheAuto.Controls.Add(this.checkClearCacheAuto);
             this.panelClearCacheAuto.Controls.Add(this.numClearCacheThreshold);
             this.panelClearCacheAuto.Location = new System.Drawing.Point(0, 163);
@@ -209,9 +194,9 @@ private void InitializeComponent() {
             this.panelClearCacheAuto.Name = "panelClearCacheAuto";
             this.panelClearCacheAuto.Size = new System.Drawing.Size(300, 28);
             this.panelClearCacheAuto.TabIndex = 4;
-            // 
+            //
             // panelConfiguration
-            // 
+            //
             this.panelConfiguration.Controls.Add(this.btnEditCSS);
             this.panelConfiguration.Controls.Add(this.btnEditCefArgs);
             this.panelConfiguration.Location = new System.Drawing.Point(0, 241);
@@ -219,9 +204,9 @@ private void InitializeComponent() {
             this.panelConfiguration.Name = "panelConfiguration";
             this.panelConfiguration.Size = new System.Drawing.Size(300, 31);
             this.panelConfiguration.TabIndex = 6;
-            // 
+            //
             // labelConfiguration
-            // 
+            //
             this.labelConfiguration.AutoSize = true;
             this.labelConfiguration.Font = new System.Drawing.Font("Segoe UI Semibold", 10.5F, System.Drawing.FontStyle.Bold);
             this.labelConfiguration.Location = new System.Drawing.Point(0, 221);
@@ -230,11 +215,10 @@ private void InitializeComponent() {
             this.labelConfiguration.Size = new System.Drawing.Size(123, 19);
             this.labelConfiguration.TabIndex = 5;
             this.labelConfiguration.Text = "CONFIGURATION";
-            // 
+            //
             // flowPanel
-            // 
-            this.flowPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left)));
+            //
+            this.flowPanel.Anchor = ((System.Windows.Forms.AnchorStyles) (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left)));
             this.flowPanel.Controls.Add(this.labelApp);
             this.flowPanel.Controls.Add(this.panelAppButtons);
             this.flowPanel.Controls.Add(this.labelCache);
@@ -243,6 +227,7 @@ private void InitializeComponent() {
             this.flowPanel.Controls.Add(this.labelConfiguration);
             this.flowPanel.Controls.Add(this.panelConfiguration);
             this.flowPanel.Controls.Add(this.labelDevTools);
+            this.flowPanel.Controls.Add(this.checkDevToolsInContextMenu);
             this.flowPanel.Controls.Add(this.checkDevToolsWindowOnTop);
             this.flowPanel.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;
             this.flowPanel.Location = new System.Drawing.Point(9, 9);
@@ -250,9 +235,9 @@ private void InitializeComponent() {
             this.flowPanel.Size = new System.Drawing.Size(300, 462);
             this.flowPanel.TabIndex = 0;
             this.flowPanel.WrapContents = false;
-            // 
+            //
             // labelDevTools
-            // 
+            //
             this.labelDevTools.AutoSize = true;
             this.labelDevTools.Font = new System.Drawing.Font("Segoe UI Semibold", 10.5F, System.Drawing.FontStyle.Bold);
             this.labelDevTools.Location = new System.Drawing.Point(0, 302);
@@ -261,27 +246,39 @@ private void InitializeComponent() {
             this.labelDevTools.Size = new System.Drawing.Size(156, 19);
             this.labelDevTools.TabIndex = 7;
             this.labelDevTools.Text = "DEVELOPMENT TOOLS";
-            // 
+            //
+            // checkDevToolsInContextMenu
+            //
+            this.checkDevToolsInContextMenu.AutoSize = true;
+            this.checkDevToolsInContextMenu.Font = new System.Drawing.Font("Segoe UI", 9F);
+            this.checkDevToolsInContextMenu.Location = new System.Drawing.Point(6, 328);
+            this.checkDevToolsInContextMenu.Margin = new System.Windows.Forms.Padding(6, 6, 3, 2);
+            this.checkDevToolsInContextMenu.Name = "checkDevToolsInContextMenu";
+            this.checkDevToolsInContextMenu.Size = new System.Drawing.Size(201, 19);
+            this.checkDevToolsInContextMenu.TabIndex = 8;
+            this.checkDevToolsInContextMenu.Text = "Show Dev Tools in Context Menu";
+            this.checkDevToolsInContextMenu.UseVisualStyleBackColor = true;
+            //
             // checkDevToolsWindowOnTop
-            // 
+            //
             this.checkDevToolsWindowOnTop.AutoSize = true;
             this.checkDevToolsWindowOnTop.Font = new System.Drawing.Font("Segoe UI", 9F);
-            this.checkDevToolsWindowOnTop.Location = new System.Drawing.Point(6, 328);
-            this.checkDevToolsWindowOnTop.Margin = new System.Windows.Forms.Padding(6, 6, 0, 2);
+            this.checkDevToolsWindowOnTop.Location = new System.Drawing.Point(6, 352);
+            this.checkDevToolsWindowOnTop.Margin = new System.Windows.Forms.Padding(6, 3, 3, 2);
             this.checkDevToolsWindowOnTop.Name = "checkDevToolsWindowOnTop";
             this.checkDevToolsWindowOnTop.Size = new System.Drawing.Size(168, 19);
-            this.checkDevToolsWindowOnTop.TabIndex = 8;
+            this.checkDevToolsWindowOnTop.TabIndex = 9;
             this.checkDevToolsWindowOnTop.Text = "Dev Tools Window On Top";
             this.checkDevToolsWindowOnTop.UseVisualStyleBackColor = true;
-            // 
+            //
             // TabSettingsAdvanced
-            // 
+            //
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
             this.Controls.Add(this.flowPanel);
             this.Name = "TabSettingsAdvanced";
             this.Size = new System.Drawing.Size(631, 480);
-            ((System.ComponentModel.ISupportInitialize)(this.numClearCacheThreshold)).EndInit();
+            ((System.ComponentModel.ISupportInitialize) (this.numClearCacheThreshold)).EndInit();
             this.panelAppButtons.ResumeLayout(false);
             this.panelClearCacheAuto.ResumeLayout(false);
             this.panelClearCacheAuto.PerformLayout();
@@ -289,11 +286,8 @@ private void InitializeComponent() {
             this.flowPanel.ResumeLayout(false);
             this.flowPanel.PerformLayout();
             this.ResumeLayout(false);
-
         }
 
-        #endregion
-
         private System.Windows.Forms.Button btnClearCache;
         private System.Windows.Forms.ToolTip toolTip;
         private System.Windows.Forms.Button btnEditCefArgs;
@@ -312,6 +306,9 @@ private void InitializeComponent() {
         private System.Windows.Forms.CheckBox checkClearCacheAuto;
         private System.Windows.Forms.FlowLayoutPanel flowPanel;
         private System.Windows.Forms.Label labelDevTools;
+        private System.Windows.Forms.CheckBox checkDevToolsInContextMenu;
         private System.Windows.Forms.CheckBox checkDevToolsWindowOnTop;
+
+        #endregion
     }
 }
diff --git a/Dialogs/Settings/TabSettingsAdvanced.cs b/Dialogs/Settings/TabSettingsAdvanced.cs
index 993c476e..02c9b0a6 100644
--- a/Dialogs/Settings/TabSettingsAdvanced.cs
+++ b/Dialogs/Settings/TabSettingsAdvanced.cs
@@ -46,13 +46,11 @@ public TabSettingsAdvanced(Action<string> reinjectBrowserCSS, Action openDevTool
 
 			// development tools
 
+			toolTip.SetToolTip(checkDevToolsInContextMenu, "Sets whether all context menus include an option to open dev tools.");
 			toolTip.SetToolTip(checkDevToolsWindowOnTop, "Sets whether dev tool windows appears on top of other windows.");
 
+			checkDevToolsInContextMenu.Checked = Config.DevToolsInContextMenu;
 			checkDevToolsWindowOnTop.Checked = Config.DevToolsWindowOnTop;
-
-			if (!BrowserUtils.HasDevTools) {
-				checkDevToolsWindowOnTop.Enabled = false;
-			}
 		}
 
 		public override void OnReady() {
@@ -68,6 +66,7 @@ public override void OnReady() {
 			btnEditCSS.Click += btnEditCSS_Click;
 
 			checkDevToolsWindowOnTop.CheckedChanged += checkDevToolsWindowOnTop_CheckedChanged;
+			checkDevToolsInContextMenu.CheckedChanged += checkDevToolsInContextMenuOnCheckedChanged;
 		}
 
 		public override void OnClosing() {
@@ -165,6 +164,10 @@ private void RestoreParentForm() {
 
 		#region Development Tools
 
+		private void checkDevToolsInContextMenuOnCheckedChanged(object sender, EventArgs e) {
+			Config.DevToolsInContextMenu = checkDevToolsInContextMenu.Checked;
+		}
+
 		private void checkDevToolsWindowOnTop_CheckedChanged(object sender, EventArgs e) {
 			Config.DevToolsWindowOnTop = checkDevToolsWindowOnTop.Checked;
 		}
diff --git a/Management/Analytics/AnalyticsReportGenerator.cs b/Management/Analytics/AnalyticsReportGenerator.cs
index 043314e5..2f81320c 100644
--- a/Management/Analytics/AnalyticsReportGenerator.cs
+++ b/Management/Analytics/AnalyticsReportGenerator.cs
@@ -9,7 +9,6 @@
 using Microsoft.Win32;
 using TweetDuck.Browser;
 using TweetDuck.Configuration;
-using TweetDuck.Utils;
 using TweetLib.Core;
 using TweetLib.Core.Features.Notifications;
 using TweetLib.Core.Features.Plugins;
@@ -24,7 +23,7 @@ public static AnalyticsReport Create(AnalyticsFile file, ExternalInfo info, Plug
 			return new AnalyticsReport {
 				{ "App Version"   , Program.VersionTag },
 				{ "App Type"      , Program.IsPortable ? "portable" : "installed" },
-				{ "App Dev Tools" , Bool(BrowserUtils.HasDevTools) },
+				{ "App Dev Tools" , Bool(UserConfig.DevToolsInContextMenu) },
 				0,
 				{ "System Name"        , SystemName },
 				{ "System Edition"     , SystemEdition },
diff --git a/Program.cs b/Program.cs
index d9e2fa42..1ef31873 100644
--- a/Program.cs
+++ b/Program.cs
@@ -122,7 +122,6 @@ private static void Main() {
 			BrowserCache.RefreshTimer();
 
 			CefSharpSettings.WcfEnabled = false;
-			CefSharpSettings.LegacyJavascriptBindingEnabled = true;
 
 			CefSettings settings = new CefSettings {
 				UserAgent = BrowserUtils.UserAgentChrome,
diff --git a/Resources/PostCefUpdate.ps1 b/Resources/PostCefUpdate.ps1
index 2dd4f4e0..1ff4c67d 100644
--- a/Resources/PostCefUpdate.ps1
+++ b/Resources/PostCefUpdate.ps1
@@ -10,12 +10,6 @@ try{
   $sharpMatch = Select-String -Path $mainProj '<Import Project="packages\\CefSharp\.Common\.(.*?)\\'
   $sharpVersion = $sharpMatch.Matches[0].Groups[1].Value
   
-  $replaceWhenTag = "..\packages\CefSharp.Common.${sharpVersion}\build\CefSharp.Common.props",
-                    "..\packages\CefSharp.WinForms.${sharpVersion}\build\CefSharp.WinForms.props",
-                    "..\packages\CefSharp.WinForms.${sharpVersion}\build\CefSharp.WinForms.targets"
-  
-  $replaceItemGroupTag = "..\packages\CefSharp.Common.${sharpVersion}\build\CefSharp.Common.targets"
-  
   # Greetings
   
   $title = "CEF ${cefVersion}, CefSharp ${sharpVersion}"
@@ -26,10 +20,6 @@ try{
   
   # Perform update
   
-  Write-Host "Copying dev tools to repository..."
-  
-  Copy-Item "..\packages\cef.redist.x86.${cefVersion}\CEF\devtools_resources.pak" -Destination "..\bld\Resources\" -Force
-  
   Write-Host "Updating browser subprocess reference..."
   
   $contents = [IO.File]::ReadAllText($browserProj)
@@ -39,22 +29,6 @@ try{
   
   [IO.File]::WriteAllText($browserProj, $contents)
   
-  Write-Host "Removing x64 and AnyCPU from package files..."
-  
-  foreach($file in $replaceWhenTag){
-    $contents = [IO.File]::ReadAllText($file)
-    $contents = $contents -Replace '(?<=<When Condition=")(''\$\(Platform\)'' == ''(AnyCPU|x64)'')(?=">)', 'false'
-    
-    [IO.File]::WriteAllText($file, $contents)
-  }
-  
-  foreach($file in $replaceItemGroupTag){
-    $contents = [IO.File]::ReadAllText($file)
-    $contents = $contents -Replace '(?<=<ItemGroup Condition=")(''\$\(Platform\)'' == ''(AnyCPU|x64)'')(?=">)', 'false'
-    
-    [IO.File]::WriteAllText($file, $contents)
-  }
-  
   # Finished
   
   Write-Host ""
diff --git a/TweetDuck.csproj b/TweetDuck.csproj
index dad66e31..fb566339 100644
--- a/TweetDuck.csproj
+++ b/TweetDuck.csproj
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="packages\CefSharp.WinForms.86.0.241\build\CefSharp.WinForms.props" Condition="Exists('packages\CefSharp.WinForms.86.0.241\build\CefSharp.WinForms.props')" />
-  <Import Project="packages\CefSharp.Common.86.0.241\build\CefSharp.Common.props" Condition="Exists('packages\CefSharp.Common.86.0.241\build\CefSharp.Common.props')" />
-  <Import Project="packages\cef.redist.x86.86.0.24\build\cef.redist.x86.props" Condition="Exists('packages\cef.redist.x86.86.0.24\build\cef.redist.x86.props')" />
-  <Import Project="packages\cef.redist.x64.86.0.24\build\cef.redist.x64.props" Condition="Exists('packages\cef.redist.x64.86.0.24\build\cef.redist.x64.props')" />
+  <Import Project="packages\CefSharp.WinForms.92.0.260\build\CefSharp.WinForms.props" Condition="Exists('packages\CefSharp.WinForms.92.0.260\build\CefSharp.WinForms.props')" />
+  <Import Project="packages\CefSharp.Common.92.0.260\build\CefSharp.Common.props" Condition="Exists('packages\CefSharp.Common.92.0.260\build\CefSharp.Common.props')" />
+  <Import Project="packages\cef.redist.x86.92.0.26\build\cef.redist.x86.props" Condition="Exists('packages\cef.redist.x86.92.0.26\build\cef.redist.x86.props')" />
+  <Import Project="packages\cef.redist.x64.92.0.26\build\cef.redist.x64.props" Condition="Exists('packages\cef.redist.x64.92.0.26\build\cef.redist.x64.props')" />
   <Import Project="packages\Microsoft.Net.Compilers.3.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('packages\Microsoft.Net.Compilers.3.0.0\build\Microsoft.Net.Compilers.props')" />
   <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
   <PropertyGroup>
@@ -45,6 +45,15 @@
     <Prefer32Bit>false</Prefer32Bit>
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="CefSharp, Version=92.0.260.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138, processorArchitecture=MSIL">
+      <HintPath>packages\CefSharp.Common.92.0.260\lib\net452\CefSharp.dll</HintPath>
+    </Reference>
+    <Reference Include="CefSharp.Core, Version=92.0.260.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138, processorArchitecture=MSIL">
+      <HintPath>packages\CefSharp.Common.92.0.260\lib\net452\CefSharp.Core.dll</HintPath>
+    </Reference>
+    <Reference Include="CefSharp.WinForms, Version=92.0.260.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138, processorArchitecture=MSIL">
+      <HintPath>packages\CefSharp.WinForms.92.0.260\lib\net452\CefSharp.WinForms.dll</HintPath>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
     <Reference Include="System.Drawing" />
@@ -73,7 +82,7 @@
     <Compile Include="Browser\Handling\General\BrowserProcessHandler.cs" />
     <Compile Include="Browser\Handling\General\FileDialogHandler.cs" />
     <Compile Include="Browser\Handling\General\JavaScriptDialogHandler.cs" />
-    <Compile Include="Browser\Handling\General\LifeSpanHandler.cs" />
+    <Compile Include="Browser\Handling\General\CustomLifeSpanHandler.cs" />
     <Compile Include="Browser\Handling\KeyboardHandlerBase.cs" />
     <Compile Include="Browser\Handling\KeyboardHandlerBrowser.cs" />
     <Compile Include="Browser\Handling\KeyboardHandlerNotification.cs" />
@@ -427,13 +436,10 @@ IF EXIST "$(ProjectDir)bld\post_build.exe" (
       <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
     </PropertyGroup>
     <Error Condition="!Exists('packages\Microsoft.Net.Compilers.3.0.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\Microsoft.Net.Compilers.3.0.0\build\Microsoft.Net.Compilers.props'))" />
-    <Error Condition="!Exists('packages\cef.redist.x64.86.0.24\build\cef.redist.x64.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\cef.redist.x64.86.0.24\build\cef.redist.x64.props'))" />
-    <Error Condition="!Exists('packages\cef.redist.x86.86.0.24\build\cef.redist.x86.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\cef.redist.x86.86.0.24\build\cef.redist.x86.props'))" />
-    <Error Condition="!Exists('packages\CefSharp.Common.86.0.241\build\CefSharp.Common.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\CefSharp.Common.86.0.241\build\CefSharp.Common.props'))" />
-    <Error Condition="!Exists('packages\CefSharp.Common.86.0.241\build\CefSharp.Common.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\CefSharp.Common.86.0.241\build\CefSharp.Common.targets'))" />
-    <Error Condition="!Exists('packages\CefSharp.WinForms.86.0.241\build\CefSharp.WinForms.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\CefSharp.WinForms.86.0.241\build\CefSharp.WinForms.props'))" />
-    <Error Condition="!Exists('packages\CefSharp.WinForms.86.0.241\build\CefSharp.WinForms.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\CefSharp.WinForms.86.0.241\build\CefSharp.WinForms.targets'))" />
+    <Error Condition="!Exists('packages\cef.redist.x64.92.0.26\build\cef.redist.x64.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\cef.redist.x64.92.0.26\build\cef.redist.x64.props'))" />
+    <Error Condition="!Exists('packages\cef.redist.x86.92.0.26\build\cef.redist.x86.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\cef.redist.x86.92.0.26\build\cef.redist.x86.props'))" />
+    <Error Condition="!Exists('packages\CefSharp.Common.92.0.260\build\CefSharp.Common.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\CefSharp.Common.92.0.260\build\CefSharp.Common.props'))" />
+    <Error Condition="!Exists('packages\CefSharp.Common.92.0.260\build\CefSharp.Common.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\CefSharp.Common.92.0.260\build\CefSharp.Common.targets'))" />
   </Target>
-  <Import Project="packages\CefSharp.Common.86.0.241\build\CefSharp.Common.targets" Condition="Exists('packages\CefSharp.Common.86.0.241\build\CefSharp.Common.targets')" />
-  <Import Project="packages\CefSharp.WinForms.86.0.241\build\CefSharp.WinForms.targets" Condition="Exists('packages\CefSharp.WinForms.86.0.241\build\CefSharp.WinForms.targets')" />
+  <Import Project="packages\CefSharp.Common.92.0.260\build\CefSharp.Common.targets" Condition="Exists('packages\CefSharp.Common.92.0.260\build\CefSharp.Common.targets')" />
 </Project>
\ No newline at end of file
diff --git a/TweetDuck.sln.DotSettings b/TweetDuck.sln.DotSettings
index 6f53646c..286591ff 100644
--- a/TweetDuck.sln.DotSettings
+++ b/TweetDuck.sln.DotSettings
@@ -82,4 +82,8 @@
 	<s:String x:Key="/Default/Environment/Hierarchy/Build/SolBuilderDuo/UseMsbuildSolutionBuilder/@EntryValue">NewVersion</s:String>
 	<s:Boolean x:Key="/Default/Environment/Hierarchy/Build/SolutionBuilderNext/InvokeBeforeBuildAndAfterBuildTargetsForSkippedProjects/@EntryValue">True</s:Boolean>
 	<s:Boolean x:Key="/Default/Environment/Hierarchy/Build/SolutionBuilderNext/InvokePreAndPostBuildEventTargetsForSkippedProjects/@EntryValue">True</s:Boolean>
-	<s:Boolean x:Key="/Default/Environment/Hierarchy/Build/SolutionBuilderNext/PassVisualStudioParameters/@EntryValue">True</s:Boolean></wpf:ResourceDictionary>
+	<s:Boolean x:Key="/Default/Environment/Hierarchy/Build/SolutionBuilderNext/PassVisualStudioParameters/@EntryValue">True</s:Boolean>
+	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
+	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
+	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean>
+	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
diff --git a/Utils/BrowserUtils.cs b/Utils/BrowserUtils.cs
index 8b049268..aabbbe52 100644
--- a/Utils/BrowserUtils.cs
+++ b/Utils/BrowserUtils.cs
@@ -17,8 +17,6 @@ static class BrowserUtils {
 		public static string UserAgentVanilla => Program.BrandName + " " + System.Windows.Forms.Application.ProductVersion;
 		public static string UserAgentChrome => "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/" + Cef.ChromiumVersion + " Safari/537.36";
 
-		public static readonly bool HasDevTools = File.Exists(Path.Combine(Program.ProgramPath, "devtools_resources.pak"));
-
 		private static UserConfig Config => Program.Config.User;
 		private static SystemConfig SysConfig => Program.Config.System;
 
@@ -72,7 +70,7 @@ void UpdateZoomLevel(object sender, EventArgs args) {
 		}
 
 		public static void RegisterJsBridge(this IWebBrowser browserControl, string name, object bridge) {
-			CefSharpSettings.LegacyJavascriptBindingEnabled = true;
+			browserControl.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true;
 			browserControl.JavascriptObjectRepository.Register(name, bridge, isAsync: true, BindingOptions.DefaultBinder);
 		}
 
diff --git a/bld/gen_full.iss b/bld/gen_full.iss
index ea4a9143..10e67d5c 100644
--- a/bld/gen_full.iss
+++ b/bld/gen_full.iss
@@ -42,12 +42,10 @@ Name: "english"; MessagesFile: "compiler:Default.isl"
 
 [Tasks]
 Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalTasks}"; Flags: unchecked
-Name: "devtools"; Description: "{cm:TaskDevTools}"; GroupDescription: "{cm:AdditionalTasks}"; Flags: unchecked
 
 [Files]
 Source: "..\bin\x86\Release\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
-Source: "..\bin\x86\Release\devtools_resources.pak"; DestDir: "{app}"; Flags: ignoreversion; Tasks: devtools
-Source: "..\bin\x86\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "devtools_resources.pak"
+Source: "..\bin\x86\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
 
 [Icons]
 Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Check: TDIsUninstallable
@@ -65,7 +63,6 @@ Type: filesandordirs; Name: "{localappdata}\{#MyAppName}\GPUCache"
 
 [CustomMessages]
 AdditionalTasks=Additional shortcuts and components:
-TaskDevTools=Install dev tools
 
 [Code]
 var UpdatePath: String;
@@ -117,13 +114,12 @@ begin
   Result := (PageID = wpSelectDir) and (UpdatePath <> '')
 end;
 
-{ Check the desktop icon task if not updating, and dev tools task if already installed. }
+{ Check the desktop icon task if not updating. }
 procedure CurPageChanged(CurPageID: Integer);
 begin
   if (CurPageID = wpSelectTasks) and (not VisitedTasksPage) then
   begin
-    WizardForm.TasksList.Checked[WizardForm.TasksList.Items.Count-2] := (UpdatePath = '')
-    WizardForm.TasksList.Checked[WizardForm.TasksList.Items.Count-1] := FileExists(ExpandConstant('{app}\devtools_resources.pak'))
+    WizardForm.TasksList.Checked[WizardForm.TasksList.Items.Count-1] := (UpdatePath = '')
     VisitedTasksPage := True
   end;
 end;
diff --git a/bld/gen_port.iss b/bld/gen_port.iss
index 199750ad..7a0c2a82 100644
--- a/bld/gen_port.iss
+++ b/bld/gen_port.iss
@@ -40,25 +40,19 @@ MinVersion=0,6.1
 [Languages]
 Name: "english"; MessagesFile: "compiler:Default.isl"
 
-[Tasks]
-Name: "devtools"; Description: "{cm:TaskDevTools}"; GroupDescription: "{cm:AdditionalTasks}"; Flags: unchecked
-
 [Files]
 Source: "..\bin\x86\Release\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
-Source: "..\bin\x86\Release\devtools_resources.pak"; DestDir: "{app}"; Flags: ignoreversion; Tasks: devtools
-Source: "..\bin\x86\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "devtools_resources.pak"
+Source: "..\bin\x86\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
 
 [Run]
 Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall shellexec skipifsilent
 
 [CustomMessages]
 AdditionalTasks=Additional components:
-TaskDevTools=Install dev tools
 
 [Code]
 var UpdatePath: String;
 var ForceRedistPrompt: String;
-var VisitedTasksPage: Boolean;
 
 function TDGetNetFrameworkVersion: Cardinal; forward;
 function TDIsVCMissing: Boolean; forward;
@@ -69,7 +63,6 @@ function InitializeSetup: Boolean;
 begin
   UpdatePath := ExpandConstant('{param:UPDATEPATH}')
   ForceRedistPrompt := ExpandConstant('{param:PROMPTREDIST}')
-  VisitedTasksPage := False
   
   if (TDGetNetFrameworkVersion() < 461808) and (MsgBox('{#MyAppName} requires .NET Framework 4.7.2 or newer,'+#13+#10+'please visit {#MyAppShortURL} for a download link.'+#13+#10+#13+#10'Do you want to proceed with the setup anyway?', mbCriticalError, MB_YESNO or MB_DEFBUTTON2) = IDNO) then
   begin
@@ -105,16 +98,6 @@ begin
   Result := (PageID = wpSelectDir) and (UpdatePath <> '')
 end;
 
-{ Check the dev tools task if already installed. }
-procedure CurPageChanged(CurPageID: Integer);
-begin
-  if (CurPageID = wpSelectTasks) and (not VisitedTasksPage) then
-  begin
-    WizardForm.TasksList.Checked[WizardForm.TasksList.Items.Count-1] := FileExists(ExpandConstant('{app}\devtools_resources.pak'))
-    VisitedTasksPage := True
-  end;
-end;
-
 { Install VC++ if downloaded, and create a 'makeportable' file for portable installs. }
 procedure CurStepChanged(CurStep: TSetupStep);
 begin
diff --git a/packages.config b/packages.config
index 6e39854b..3033060b 100644
--- a/packages.config
+++ b/packages.config
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
-  <package id="cef.redist.x64" version="86.0.24" targetFramework="net472" />
-  <package id="cef.redist.x86" version="86.0.24" targetFramework="net472" />
-  <package id="CefSharp.Common" version="86.0.241" targetFramework="net472" />
-  <package id="CefSharp.WinForms" version="86.0.241" targetFramework="net472" />
+  <package id="cef.redist.x64" version="92.0.26" targetFramework="net472" />
+  <package id="cef.redist.x86" version="92.0.26" targetFramework="net472" />
+  <package id="CefSharp.Common" version="92.0.260" targetFramework="net472" />
+  <package id="CefSharp.WinForms" version="92.0.260" targetFramework="net472" />
   <package id="Microsoft.Net.Compilers" version="3.0.0" targetFramework="net472" developmentDependency="true" />
 </packages>
\ No newline at end of file
diff --git a/subprocess/TweetDuck.Browser.csproj b/subprocess/TweetDuck.Browser.csproj
index 8fc355bb..69d5e1cd 100644
--- a/subprocess/TweetDuck.Browser.csproj
+++ b/subprocess/TweetDuck.Browser.csproj
@@ -29,13 +29,13 @@
     <StartupObject />
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="CefSharp, Version=86.0.0.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138, processorArchitecture=x86">
+    <Reference Include="CefSharp, Version=92.0.260, Culture=neutral, PublicKeyToken=40c4b6fc221f4138, processorArchitecture=x86">
       <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\packages\CefSharp.Common.86.0.241\CefSharp\x86\CefSharp.dll</HintPath>
+      <HintPath>..\packages\CefSharp.Common.92.0.260\lib\net452\CefSharp.dll</HintPath>
     </Reference>
-    <Reference Include="CefSharp.BrowserSubprocess.Core, Version=86.0.0.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138, processorArchitecture=x86">
+    <Reference Include="CefSharp.BrowserSubprocess.Core, Version=92.0.260, Culture=neutral, PublicKeyToken=40c4b6fc221f4138, processorArchitecture=x86">
       <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\packages\CefSharp.Common.86.0.241\CefSharp\x86\CefSharp.BrowserSubprocess.Core.dll</HintPath>
+      <HintPath>..\packages\CefSharp.Common.92.0.260\CefSharp\x86\CefSharp.BrowserSubprocess.Core.dll</HintPath>
     </Reference>
     <Reference Include="System" />
   </ItemGroup>