diff --git a/Core/FormBrowser.cs b/Core/FormBrowser.cs
index 7b3eb8d0..d9ba0871 100644
--- a/Core/FormBrowser.cs
+++ b/Core/FormBrowser.cs
@@ -231,7 +231,7 @@ public void OpenSettings(){
             else{
                 bool prevEnableUpdateCheck = Config.EnableUpdateCheck;
 
-                currentFormSettings = new FormSettings(this, updates);
+                currentFormSettings = new FormSettings(this, plugins, updates);
 
                 currentFormSettings.FormClosed += (sender, args) => {
                     currentFormSettings = null;
diff --git a/Core/Other/FormSettings.cs b/Core/Other/FormSettings.cs
index 416384d4..4dcdd191 100644
--- a/Core/Other/FormSettings.cs
+++ b/Core/Other/FormSettings.cs
@@ -3,13 +3,14 @@
 using System.Linq;
 using System.Windows.Forms;
 using TweetDck.Core.Other.Settings;
+using TweetDck.Plugins;
 using TweetDck.Updates;
 
 namespace TweetDck.Core.Other{
     sealed partial class FormSettings : Form{
         private readonly Dictionary<Type, BaseTabSettings> tabs = new Dictionary<Type, BaseTabSettings>(4);
 
-        public FormSettings(FormBrowser browserForm, UpdateHandler updates){
+        public FormSettings(FormBrowser browserForm, PluginManager plugins, UpdateHandler updates){
             InitializeComponent();
 
             Text = Program.BrandName+" Settings";
@@ -18,7 +19,7 @@ public FormSettings(FormBrowser browserForm, UpdateHandler updates){
             this.tabPanel.AddButton("General", SelectTab<TabSettingsGeneral>);
             this.tabPanel.AddButton("Notifications", () => SelectTab(() => new TabSettingsNotifications(browserForm.CreateNotificationForm(false))));
             this.tabPanel.AddButton("Updates", () => SelectTab(() => new TabSettingsUpdates(updates)));
-            this.tabPanel.AddButton("Advanced", () => SelectTab(() => new TabSettingsAdvanced(browserForm.ReloadBrowser)));
+            this.tabPanel.AddButton("Advanced", () => SelectTab(() => new TabSettingsAdvanced(browserForm.ReloadBrowser, plugins)));
             this.tabPanel.SelectTab(tabPanel.Buttons.First());
         }
 
diff --git a/Core/Other/Settings/Export/CombinedFileStream.cs b/Core/Other/Settings/Export/CombinedFileStream.cs
index 2a1ee10a..8b54526f 100644
--- a/Core/Other/Settings/Export/CombinedFileStream.cs
+++ b/Core/Other/Settings/Export/CombinedFileStream.cs
@@ -4,6 +4,8 @@
 
 namespace TweetDck.Core.Other.Settings.Export{
     class CombinedFileStream : IDisposable{
+        public const char KeySeparator = '/';
+
         private readonly Stream stream;
 
         public CombinedFileStream(Stream stream){
@@ -65,6 +67,13 @@ void IDisposable.Dispose(){
         public class Entry{
             public string Identifier { get; private set; }
 
+            public string KeyName{
+                get{
+                    int index = Identifier.IndexOf(KeySeparator);
+                    return index == -1 ? Identifier : Identifier.Substring(0, index);
+                }
+            }
+
             private readonly byte[] contents;
 
             public Entry(string identifier, byte[] contents){
@@ -75,6 +84,12 @@ public Entry(string identifier, byte[] contents){
             public void WriteToFile(string path){
                 File.WriteAllBytes(path, contents);
             }
+
+            public void WriteToFile(string path, bool createDirectory){
+                // ReSharper disable once AssignNullToNotNullAttribute
+                Directory.CreateDirectory(Path.GetDirectoryName(path));
+                File.WriteAllBytes(path, contents);
+            }
         }
     }
 }
diff --git a/Core/Other/Settings/Export/ExportManager.cs b/Core/Other/Settings/Export/ExportManager.cs
index ab54b595..b9890f43 100644
--- a/Core/Other/Settings/Export/ExportManager.cs
+++ b/Core/Other/Settings/Export/ExportManager.cs
@@ -1,7 +1,10 @@
 using System;
+using System.Collections.Generic;
 using System.Diagnostics;
 using System.IO;
+using System.Linq;
 using System.Windows.Forms;
+using TweetDck.Plugins;
 
 namespace TweetDck.Core.Other.Settings.Export{
     sealed class ExportManager{
@@ -11,9 +14,11 @@ sealed class ExportManager{
         public Exception LastException { get; private set; }
 
         private readonly string file;
+        private readonly PluginManager plugins;
 
-        public ExportManager(string file){
+        public ExportManager(string file, PluginManager plugins){
             this.file = file;
+            this.plugins = plugins;
         }
 
         public bool Export(bool includeSession){
@@ -21,6 +26,27 @@ public bool Export(bool includeSession){
                 using(CombinedFileStream stream = new CombinedFileStream(new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.None))){
                     stream.WriteFile("config", Program.ConfigFilePath);
 
+                    foreach(PathInfo path in EnumerateFilesRelative(plugins.PathOfficialPlugins)){
+                        string[] split = path.Relative.Split(CombinedFileStream.KeySeparator);
+
+                        if (split.Length < 3){
+                            continue;
+                        }
+                        else if (split.Length == 3){
+                            if (split[2].Equals(".meta", StringComparison.InvariantCultureIgnoreCase) ||
+                                split[2].Equals("browser.js", StringComparison.InvariantCultureIgnoreCase) ||
+                                split[2].Equals("notification.js", StringComparison.InvariantCultureIgnoreCase)){
+                                continue;
+                            }
+                        }
+
+                        stream.WriteFile("plugin.off"+path.Relative, path.Full);
+                    }
+
+                    foreach(PathInfo path in EnumerateFilesRelative(plugins.PathCustomPlugins)){
+                        stream.WriteFile("plugin.usr"+path.Relative, path.Full);
+                    }
+
                     if (includeSession){
                         stream.WriteFile("cookies", CookiesPath);
                     }
@@ -37,16 +63,33 @@ public bool Export(bool includeSession){
 
         public bool Import(){
             try{
+                bool updatedPlugins = false;
+
                 using(CombinedFileStream stream = new CombinedFileStream(new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.None))){
                     CombinedFileStream.Entry entry;
 
                     while((entry = stream.ReadFile()) != null){
-                        switch(entry.Identifier){
+                        switch(entry.KeyName){
                             case "config":
                                 entry.WriteToFile(Program.ConfigFilePath);
                                 Program.ReloadConfig();
                                 break;
 
+                            case "plugin.off":
+                                string root = Path.Combine(plugins.PathOfficialPlugins, entry.Identifier.Split(CombinedFileStream.KeySeparator)[1]);
+
+                                if (Directory.Exists(root)){
+                                    entry.WriteToFile(Path.Combine(plugins.PathOfficialPlugins, entry.Identifier.Substring(entry.KeyName.Length+1)), true);
+                                    updatedPlugins = true;
+                                }
+
+                                break;
+
+                            case "plugin.usr":
+                                entry.WriteToFile(Path.Combine(plugins.PathCustomPlugins, entry.Identifier.Substring(entry.KeyName.Length+1)), true);
+                                updatedPlugins = true;
+                                break;
+
                             case "cookies":
                                 if (MessageBox.Show("Do you want to import the login session? This will restart "+Program.BrandName+".", "Importing "+Program.BrandName+" Settings", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes){
                                     entry.WriteToFile(Path.Combine(Program.StoragePath, TempCookiesPath));
@@ -61,11 +104,27 @@ public bool Import(){
                     }
                 }
 
+                if (updatedPlugins){
+                    plugins.Reload();
+                }
+
                 return true;
             }catch(Exception e){
                 LastException = e;
                 return false;
             }
         }
+
+        private static IEnumerable<PathInfo> EnumerateFilesRelative(string root){
+            return Directory.EnumerateFiles(root, "*.*", SearchOption.AllDirectories).Select(fullPath => new PathInfo{
+                Full = fullPath,
+                Relative = fullPath.Substring(root.Length).Replace(Path.DirectorySeparatorChar, CombinedFileStream.KeySeparator) // includes leading separator character
+            });
+        }
+
+        private class PathInfo{
+            public string Full { get; set; }
+            public string Relative { get; set; }
+        }
     }
 }
diff --git a/Core/Other/Settings/TabSettingsAdvanced.Designer.cs b/Core/Other/Settings/TabSettingsAdvanced.Designer.cs
index 14e6b5f4..e3a9ab23 100644
--- a/Core/Other/Settings/TabSettingsAdvanced.Designer.cs
+++ b/Core/Other/Settings/TabSettingsAdvanced.Designer.cs
@@ -28,12 +28,12 @@ private void InitializeComponent() {
             this.checkHardwareAcceleration = new System.Windows.Forms.CheckBox();
             this.toolTip = new System.Windows.Forms.ToolTip(this.components);
             this.btnEditCefArgs = new System.Windows.Forms.Button();
+            this.btnEditCSS = new System.Windows.Forms.Button();
             this.btnReset = new System.Windows.Forms.Button();
             this.btnImport = new System.Windows.Forms.Button();
             this.btnExport = new System.Windows.Forms.Button();
             this.groupPerformance = new System.Windows.Forms.GroupBox();
             this.groupConfiguration = new System.Windows.Forms.GroupBox();
-            this.btnEditCSS = new System.Windows.Forms.Button();
             this.groupPerformance.SuspendLayout();
             this.groupConfiguration.SuspendLayout();
             this.SuspendLayout();
@@ -75,11 +75,22 @@ private void InitializeComponent() {
             this.btnEditCefArgs.UseVisualStyleBackColor = true;
             this.btnEditCefArgs.Click += new System.EventHandler(this.btnEditCefArgs_Click);
             // 
+            // btnEditCSS
+            // 
+            this.btnEditCSS.Location = new System.Drawing.Point(6, 48);
+            this.btnEditCSS.Name = "btnEditCSS";
+            this.btnEditCSS.Size = new System.Drawing.Size(171, 23);
+            this.btnEditCSS.TabIndex = 16;
+            this.btnEditCSS.Text = "Edit CSS";
+            this.toolTip.SetToolTip(this.btnEditCSS, "Set custom CSS for browser and notification windows.");
+            this.btnEditCSS.UseVisualStyleBackColor = true;
+            this.btnEditCSS.Click += new System.EventHandler(this.btnEditCSS_Click);
+            // 
             // btnReset
             // 
             this.btnReset.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
             this.btnReset.AutoSize = true;
-            this.btnReset.Location = new System.Drawing.Point(209, 250);
+            this.btnReset.Location = new System.Drawing.Point(190, 250);
             this.btnReset.Name = "btnReset";
             this.btnReset.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
             this.btnReset.Size = new System.Drawing.Size(102, 23);
@@ -92,12 +103,12 @@ private void InitializeComponent() {
             // 
             this.btnImport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
             this.btnImport.AutoSize = true;
-            this.btnImport.Location = new System.Drawing.Point(109, 250);
+            this.btnImport.Location = new System.Drawing.Point(100, 250);
             this.btnImport.Name = "btnImport";
             this.btnImport.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
-            this.btnImport.Size = new System.Drawing.Size(94, 23);
+            this.btnImport.Size = new System.Drawing.Size(84, 23);
             this.btnImport.TabIndex = 16;
-            this.btnImport.Text = "Import Settings";
+            this.btnImport.Text = "Import Profile";
             this.btnImport.UseVisualStyleBackColor = true;
             this.btnImport.Click += new System.EventHandler(this.btnImport_Click);
             // 
@@ -105,12 +116,13 @@ private void InitializeComponent() {
             // 
             this.btnExport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
             this.btnExport.AutoSize = true;
+            this.btnExport.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
             this.btnExport.Location = new System.Drawing.Point(9, 250);
             this.btnExport.Name = "btnExport";
             this.btnExport.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
-            this.btnExport.Size = new System.Drawing.Size(94, 23);
+            this.btnExport.Size = new System.Drawing.Size(85, 23);
             this.btnExport.TabIndex = 15;
-            this.btnExport.Text = "Export Settings";
+            this.btnExport.Text = "Export Profile";
             this.btnExport.UseVisualStyleBackColor = true;
             this.btnExport.Click += new System.EventHandler(this.btnExport_Click);
             // 
@@ -136,17 +148,6 @@ private void InitializeComponent() {
             this.groupConfiguration.TabStop = false;
             this.groupConfiguration.Text = "Configuration";
             // 
-            // btnEditCSS
-            // 
-            this.btnEditCSS.Location = new System.Drawing.Point(6, 48);
-            this.btnEditCSS.Name = "btnEditCSS";
-            this.btnEditCSS.Size = new System.Drawing.Size(171, 23);
-            this.btnEditCSS.TabIndex = 16;
-            this.btnEditCSS.Text = "Edit CSS";
-            this.toolTip.SetToolTip(this.btnEditCSS, "Set custom CSS for browser and notification windows.");
-            this.btnEditCSS.UseVisualStyleBackColor = true;
-            this.btnEditCSS.Click += new System.EventHandler(this.btnEditCSS_Click);
-            // 
             // TabSettingsAdvanced
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
diff --git a/Core/Other/Settings/TabSettingsAdvanced.cs b/Core/Other/Settings/TabSettingsAdvanced.cs
index 38adb6a7..5edd056a 100644
--- a/Core/Other/Settings/TabSettingsAdvanced.cs
+++ b/Core/Other/Settings/TabSettingsAdvanced.cs
@@ -5,15 +5,18 @@
 using TweetDck.Core.Other.Settings.Dialogs;
 using TweetDck.Core.Other.Settings.Export;
 using TweetDck.Core.Utils;
+using TweetDck.Plugins;
 
 namespace TweetDck.Core.Other.Settings{
     partial class TabSettingsAdvanced : BaseTabSettings{
         private readonly Action browserReloadAction;
+        private readonly PluginManager plugins;
 
-        public TabSettingsAdvanced(Action browserReloadAction){
+        public TabSettingsAdvanced(Action browserReloadAction, PluginManager plugins){
             InitializeComponent();
 
             this.browserReloadAction = browserReloadAction;
+            this.plugins = plugins;
 
             checkHardwareAcceleration.Checked = HardwareAcceleration.IsEnabled;
 
@@ -109,7 +112,7 @@ private void btnExport_Click(object sender, EventArgs e){
             if (file != null){
                 Program.UserConfig.Save();
 
-                ExportManager manager = new ExportManager(file);
+                ExportManager manager = new ExportManager(file, plugins);
 
                 if (!manager.Export(saveCredentials)){
                     Program.HandleException("An exception happened while exporting "+Program.BrandName+" settings.", manager.LastException);
@@ -130,7 +133,7 @@ private void btnImport_Click(object sender, EventArgs e){
             }
 
             if (file != null){
-                ExportManager manager = new ExportManager(file);
+                ExportManager manager = new ExportManager(file, plugins);
 
                 if (manager.Import()){
                     ((FormSettings)ParentForm).ReloadUI();