diff --git a/Resources/Plugins/.debug/browser.js b/Resources/Plugins/.debug/browser.js
index c26fdf87..95ff86a8 100644
--- a/Resources/Plugins/.debug/browser.js
+++ b/Resources/Plugins/.debug/browser.js
@@ -2,6 +2,7 @@ enabled(){
   this.isDebugging = false;
   
   this.onKeyDown = (e) => {
+    
     // ==========================
     // F4 key - toggle debug mode
     // ==========================
@@ -11,8 +12,6 @@ enabled(){
       $(".nav-user-info").first().css("background-color", this.isDebugging ? "#5A6B75" : "#292F33");
     }
     
-    // Debug mode handling
-    
     else if (this.isDebugging){
       e.preventDefault();
       
@@ -22,15 +21,16 @@ enabled(){
       // ===================================
       
       if (e.keyCode === 78 || e.keyCode === 83){
-        var col = TD.controller.columnManager.getAllOrdered()[0];
+        let col = TD.controller.columnManager.getAllOrdered()[0];
+        let model = col.model;
         
-        var prevPopup = col.model.getHasNotification();
-        var prevSound = col.model.getHasSound();
+        let prevPopup = model.getHasNotification();
+        let prevSound = model.getHasSound();
         
-        col.model.setHasNotification(e.keyCode === 78);
-        col.model.setHasSound(e.keyCode === 83);
+        model.setHasNotification(e.keyCode === 78);
+        model.setHasSound(e.keyCode === 83);
         
-        $.publish("/notifications/new",[{
+        $.publish("/notifications/new", [{
           column: col,
           items: [
             col.updateArray[Math.floor(Math.random()*col.updateArray.length)]
@@ -38,8 +38,8 @@ enabled(){
         }]);
         
         setTimeout(function(){
-          col.model.setHasNotification(prevPopup);
-          col.model.setHasSound(prevSound);
+          model.setHasNotification(prevPopup);
+          model.setHasSound(prevSound);
         }, 1);
       }
       
diff --git a/Resources/Plugins/clear-columns/browser.js b/Resources/Plugins/clear-columns/browser.js
index 8fe43d4e..6358ac69 100644
--- a/Resources/Plugins/clear-columns/browser.js
+++ b/Resources/Plugins/clear-columns/browser.js
@@ -6,24 +6,24 @@ constructor(){
 
 enabled(){
   // prepare variables and functions
-  var clearColumn = (columnName) => {
+  const clearColumn = (columnName) => {
     TD.controller.columnManager.get(columnName).clear();
     TD.controller.stats.columnActionClick("clear");
   };
   
-  var resetColumn = (columnName) => {
+  const resetColumn = (columnName) => {
     let col = TD.controller.columnManager.get(columnName);
     col.model.setClearedTimestamp(0);
     col.reloadTweets();
   };
   
-  var forEachColumn = (func) => {
+  const forEachColumn = (func) => {
     Object.keys(TD.controller.columnManager.getAll()).forEach(func);
   };
   
-  var wasShiftPressed = false;
+  let wasShiftPressed = false;
   
-  var updateShiftState = (pressed) => {
+  const updateShiftState = (pressed) => {
     if (pressed != wasShiftPressed){
       wasShiftPressed = pressed;
       
@@ -40,7 +40,7 @@ enabled(){
   
   // prepare event handlers
   this.eventClickSingle = function(e){
-    var name = $(this).closest(".js-column").attr("data-column");
+    let name = $(this).closest(".js-column").attr("data-column");
     e.shiftKey ? resetColumn(name) : clearColumn(name);
   };
   
@@ -58,10 +58,10 @@ enabled(){
         forEachColumn(e.shiftKey ? resetColumn : clearColumn);
       }
       else{
-        var focusedColumn = $(".js-column.is-focused");
+        let focusedColumn = $(".js-column.is-focused");
         
         if (focusedColumn.length){
-          var name = focusedColumn.attr("data-column");
+          let name = focusedColumn.attr("data-column");
           e.shiftKey ? resetColumn(name) : clearColumn(name);
         }
       }
@@ -97,7 +97,7 @@ enabled(){
   window.TDPF_injectMustache("menus/column_nav_menu.mustache", "replace", "{{_i}}Add column{{/i}}</div> </a> </div>", `{{_i}}Add column{{/i}}</div></a>${this.btnClearAllHTML}</div>`)
   
   // load custom style
-  var css = window.TDPF_createCustomStyle(this);
+  let css = window.TDPF_createCustomStyle(this);
   css.insert(".js-app-add-column.is-hidden + .clear-columns-btn-all-parent { display: none; }");
   css.insert(".column-header-links { min-width: 51px !important; }");
   css.insert("[data-td-icon='icon-message'] .column-header-links { min-width: 110px !important; }");
@@ -120,7 +120,7 @@ ready(){
   $(".js-app-add-column").first().after(this.btnClearAllHTML);
   
   // setup tooltip handling
-  var tooltipEvents = $._data($(".js-header-action")[0]).events;
+  let tooltipEvents = $._data($(".js-header-action")[0], "events");
   
   if (tooltipEvents.mouseover && tooltipEvents.mouseover.length && tooltipEvents.mouseout && tooltipEvents.mouseout.length){
     $(".clear-columns-btn-all-parent").on("mouseover", tooltipEvents.mouseover[0].handler).on("mouseout", tooltipEvents.mouseout[0].handler);
diff --git a/Resources/Plugins/edit-design/browser.js b/Resources/Plugins/edit-design/browser.js
index d3389375..78a5ee2f 100644
--- a/Resources/Plugins/edit-design/browser.js
+++ b/Resources/Plugins/edit-design/browser.js
@@ -21,7 +21,7 @@ enabled(){
     avatarRadius: 2
   };
   
-  var prepareDefaultConfig = () => {
+  const prepareDefaultConfig = () => {
     this.defaultConfig._theme = TD.settings.getTheme();
     
     switch(TD.settings.getColumnWidth()){
@@ -39,7 +39,7 @@ enabled(){
   
   this.firstTimeLoad = null;
   
-  var me = this;
+  const me = this;
   
   // modal dialog loading
   $TDP.readFileRoot(this.$token, "modal.html").then(contents => {
@@ -72,7 +72,7 @@ enabled(){
     }
   };
   
-  var loadConfigObject = obj => {
+  const loadConfigObject = obj => {
     this.tmpConfig = obj || {};
     this.firstTimeLoad = obj === null;
     
@@ -139,7 +139,7 @@ enabled(){
   };
   
   // modal dialog setup
-  var updateKey = function(key, value){
+  const updateKey = function(key, value){
     me.config[key] = value;
     
     setTimeout(function(){
@@ -228,7 +228,7 @@ enabled(){
         if (value == me.config[key]){
           item.addClass("selected");
         }
-
+        
         item.click(function(){
           modal.find("[data-td-key='"+key+"']").removeClass("selected");
           item.addClass("selected");
@@ -407,7 +407,7 @@ enabled(){
         case "dark":
           this.css.insert(".scroll-styled-v:not(.scroll-alt)::-webkit-scrollbar-track, .scroll-styled-h:not(.scroll-alt)::-webkit-scrollbar-track { border-left-color: #14171A !important }");
           break;
-
+          
         case "light":
           this.css.insert(".scroll-styled-v:not(.scroll-alt)::-webkit-scrollbar-thumb:not(:hover), .scroll-styled-h:not(.scroll-alt)::-webkit-scrollbar-thumb:not(:hover) { background-color: #d2d6da !important }");
           this.css.insert(".app-columns-container.scroll-styled-h::-webkit-scrollbar-thumb:not(:hover) { background-color: #a5aeb5 !important }");
@@ -643,7 +643,7 @@ ready(){
   $(".js-app").append('<div id="td-design-plugin-modal" class="js-modal settings-modal ovl scroll-v scroll-styled-v"></div>');
   
   // global settings override
-  var me = this;
+  const me = this;
   
   this.prevFuncSettingsGetInfo = TD.components.GlobalSettings.prototype.getInfo;
   this.prevFuncSettingsSwitchTab = TD.components.GlobalSettings.prototype.switchTab;
diff --git a/Resources/Plugins/emoji-keyboard/browser.js b/Resources/Plugins/emoji-keyboard/browser.js
index 6984017a..34ecbe9d 100644
--- a/Resources/Plugins/emoji-keyboard/browser.js
+++ b/Resources/Plugins/emoji-keyboard/browser.js
@@ -26,7 +26,7 @@ enabled(){
   this.emojiData3 = []; // no skin tones, appended
   this.emojiNames = [];
   
-  var me = this;
+  const me = this;
   
   // styles
   
@@ -51,12 +51,12 @@ enabled(){
   
   // layout
   
-  var buttonHTML = '<button class="needsclick btn btn-on-blue txt-left padding-v--6 padding-h--8 emoji-keyboard-popup-btn"><i class="icon icon-heart"></i></button>';
+  let buttonHTML = '<button class="needsclick btn btn-on-blue txt-left padding-v--6 padding-h--8 emoji-keyboard-popup-btn"><i class="icon icon-heart"></i></button>';
   
   this.prevComposeMustache = TD.mustaches["compose/docked_compose.mustache"];
   window.TDPF_injectMustache("compose/docked_compose.mustache", "append", '<div class="cf margin-t--12 margin-b--30">', buttonHTML);
   
-  var maybeDockedComposePanel = $(".js-docked-compose");
+  let maybeDockedComposePanel = $(".js-docked-compose");
   
   if (maybeDockedComposePanel.length){
     maybeDockedComposePanel.find(".cf.margin-t--12.margin-b--30").first().append(buttonHTML);
@@ -67,10 +67,10 @@ enabled(){
   this.currentKeyboard = null;
   this.currentSpanner = null;
   
-  var wasSearchFocused = false;
-  var lastEmojiKeyword, lastEmojiPosition, lastEmojiLength;
+  let wasSearchFocused = false;
+  let lastEmojiKeyword, lastEmojiPosition, lastEmojiLength;
   
-  var hideKeyboard = (refocus) => {
+  const hideKeyboard = (refocus) => {
     $(this.currentKeyboard).remove();
     this.currentKeyboard = null;
     
@@ -94,7 +94,7 @@ enabled(){
     lastEmojiKeyword = null;
   };
   
-  var generateEmojiHTML = skinTone => {
+  const generateEmojiHTML = skinTone => {
     let index = 0;
     let html = [ "<p style='font-size:13px;color:#444;margin:4px;text-align:center'>Please, note that some emoji may not show up correctly in the text box above, but they will display in the tweet.</p>" ];
     
@@ -113,7 +113,7 @@ enabled(){
     return html.join("");
   };
   
-  var updateFilters = () => {
+  const updateFilters = () => {
     let keywords = this.currentKeywords;
     let container = $(this.currentKeyboard.children[1]);
     
@@ -135,7 +135,7 @@ enabled(){
     }
   };
   
-  var selectSkinTone = skinTone => {
+  const selectSkinTone = skinTone => {
     let selectedEle = this.currentKeyboard.children[2].querySelector("[data-tone='"+this.selectedSkinTone+"']");
     selectedEle && selectedEle.classList.remove("sel");
     
@@ -146,12 +146,12 @@ enabled(){
   };
   
   this.generateKeyboard = (left, top) => {
-    var outer = document.createElement("div");
+    let outer = document.createElement("div");
     outer.classList.add("emoji-keyboard");
     outer.style.left = left+"px";
     outer.style.top = top+"px";
     
-    var keyboard = document.createElement("div");
+    let keyboard = document.createElement("div");
     keyboard.classList.add("emoji-keyboard-list");
     
     keyboard.addEventListener("click", function(e){
@@ -164,11 +164,11 @@ enabled(){
       e.stopPropagation();
     });
     
-    var search = document.createElement("div");
+    let search = document.createElement("div");
     search.innerHTML = "<input type='text' placeholder='Search...'>";
     search.classList.add("emoji-keyboard-search");
     
-    var skintones = document.createElement("div");
+    let skintones = document.createElement("div");
     skintones.innerHTML = me.skinToneData.map(entry => "<div data-tone='"+entry[0]+"' style='background-color:"+entry[1]+"'></div>").join("");
     skintones.classList.add("emoji-keyboard-skintones");
     
@@ -189,7 +189,7 @@ enabled(){
       e.stopPropagation();
     });
     
-    var searchInput = search.children[0];
+    let searchInput = search.children[0];
     searchInput.focus();
     
     wasSearchFocused = false;
@@ -232,21 +232,21 @@ enabled(){
     this.composePanelScroller.trigger("scroll");
   };
   
-  var getKeyboardTop = () => {
+  const getKeyboardTop = () => {
     let button = $(".emoji-keyboard-popup-btn");
     return button.offset().top+button.outerHeight()+me.composePanelScroller.scrollTop()+8;
   };
   
-  var insertEmoji = (src, alt) => {
+  const insertEmoji = (src, alt) => {
     let input = this.composeInput;
-
+    
     let val = input.val();
     let posStart = input[0].selectionStart;
     let posEnd = input[0].selectionEnd;
-
+    
     input.val(val.slice(0, posStart)+alt+val.slice(posEnd));
     input.trigger("change");
-
+    
     input[0].selectionStart = posStart+alt.length;
     input[0].selectionEnd = posStart+alt.length;
     
@@ -288,7 +288,7 @@ enabled(){
       if (ele.selectionStart === lastEmojiPosition){
         ele.selectionStart -= lastEmojiLength; // selects the emoji
         document.execCommand("insertText", false, lastEmojiKeyword);
-
+        
         e.preventDefault();
         e.stopPropagation();
       }
@@ -418,7 +418,7 @@ ready(){
   
   // HTML generation
   
-  var convUnicode = function(codePt){
+  const convUnicode = function(codePt){
     if (codePt > 0xFFFF){
       codePt -= 0x10000;
       return String.fromCharCode(0xD800+(codePt>>10), 0xDC00+(codePt&0x3FF));
@@ -489,7 +489,7 @@ ready(){
       
       if (skinToneState === 1){
         let skinIndex = decl.indexOf('$');
-
+        
         if (skinIndex !== -1){
           let declPre = decl.slice(0, skinIndex);
           let declPost = decl.slice(skinIndex+1);
diff --git a/Resources/Plugins/reply-account/browser.js b/Resources/Plugins/reply-account/browser.js
index c540a2dd..8c0f5c77 100644
--- a/Resources/Plugins/reply-account/browser.js
+++ b/Resources/Plugins/reply-account/browser.js
@@ -1,5 +1,5 @@
 enabled(){
-  var configuration = { defaultAccount: "#preferred" };
+  let configuration = { defaultAccount: "#preferred" };
   
   window.TDPF_loadConfigurationFile(this, "configuration.js", "configuration.default.js", obj => configuration = obj);
   
@@ -8,7 +8,7 @@ enabled(){
   this.uiComposeTweetEvent = (e, data) => {
     return if !(data.type === "reply" || (data.type === "tweet" && "quotedTweet" in data)) || data.popFromInline || !("element" in data);
     
-    var query;
+    let query;
     
     if (configuration.useAdvancedSelector){
       if (configuration.customSelector){
@@ -88,7 +88,7 @@ enabled(){
       return;
     }
     
-    var identifier = null;
+    let identifier = null;
     
     switch(query){
       case "#preferred":
@@ -106,7 +106,7 @@ enabled(){
       
       default:
         if (query[0] === '@'){
-          var obj = TD.storage.accountController.getAccountFromUsername(query.substring(1));
+          let obj = TD.storage.accountController.getAccountFromUsername(query.substring(1));
           
           if (obj.length === 0){
             $TD.alert("warning", "Plugin reply-account has invalid configuration: requested account not found: "+query);
@@ -126,7 +126,7 @@ enabled(){
   };
   
   this.onSelectedAccountChanged = () => {
-    var selected = $(".js-account-item.is-selected", ".js-account-list");
+    let selected = $(".js-account-item.is-selected", ".js-account-list");
     this.lastSelectedAccount = selected.length === 1 ? selected.attr("data-account-key") : null;
   };
 }
diff --git a/Resources/Plugins/templates/browser.js b/Resources/Plugins/templates/browser.js
index ade7016c..fb8108db 100644
--- a/Resources/Plugins/templates/browser.js
+++ b/Resources/Plugins/templates/browser.js
@@ -44,12 +44,12 @@ enabled(){
   
   // button
   
-  var buttonHTML = '<button class="manage-templates-btn needsclick btn btn-on-blue full-width txt-left margin-b--12 padding-v--6 padding-h--12"><i class="icon icon-bookmark"></i><span class="label padding-ls">Manage templates</span></button>';
+  let buttonHTML = '<button class="manage-templates-btn needsclick btn btn-on-blue full-width txt-left margin-b--12 padding-v--6 padding-h--12"><i class="icon icon-bookmark"></i><span class="label padding-ls">Manage templates</span></button>';
   
   this.prevComposeMustache = TD.mustaches["compose/docked_compose.mustache"];
   window.TDPF_injectMustache("compose/docked_compose.mustache", "prepend", '<div class="js-tweet-type-button">', buttonHTML);
   
-  var dockedComposePanel = $(".js-docked-compose");
+  let dockedComposePanel = $(".js-docked-compose");
   
   if (dockedComposePanel.length){
     dockedComposePanel.find(".js-tweet-type-button").first().before(buttonHTML);
@@ -57,7 +57,7 @@ enabled(){
   
   // template implementation
   
-  var readTemplateTokens = (contents, tokenData) => {
+  const readTemplateTokens = (contents, tokenData) => {
     let startIndex = -1;
     let endIndex = -1;
     
@@ -125,7 +125,7 @@ enabled(){
     return [ contents, data ];
   };
   
-  var doAjaxRequest = (index, url, evaluator) => {
+  const doAjaxRequest = (index, url, evaluator) => {
     return new Promise((resolve, reject) => {
       if (!url){
         resolve([ index, "{ajax}" ]);
@@ -145,7 +145,7 @@ enabled(){
     });
   };
   
-  var useTemplate = (contents, append) => {
+  const useTemplate = (contents, append) => {
     let ele = $(".js-compose-text");
     return if ele.length === 0;
     
@@ -183,7 +183,7 @@ enabled(){
             url = evaluator;
             evaluator = null;
           }
-
+          
           promises.push(doAjaxRequest(index2, url, evaluator));
           break;
       }
@@ -227,7 +227,7 @@ enabled(){
   
   this.editingTemplate = null;
   
-  var showTemplateModal = () => {
+  const showTemplateModal = () => {
     $(".js-app-content").prepend(this.htmlModal);
     
     /* TODO possibly implement this later
@@ -328,11 +328,11 @@ enabled(){
     onTemplatesUpdated(false);
   };
   
-  var hideTemplateModal = function(){
+  const hideTemplateModal = () => {
     $("#templates-modal-wrap").remove();
   };
   
-  var toggleEditor = function(){
+  const toggleEditor = () => {
     let editor = $("#template-editor");
     $("[name]", editor).val("");
     
@@ -341,7 +341,7 @@ enabled(){
     }
   };
   
-  var onTemplatesUpdated = (save) => {
+  const onTemplatesUpdated = (save) => {
     let eles = [];
     
     for(let identifier of Object.keys(this.config.templates)){
diff --git a/Resources/Plugins/templates/modal.html b/Resources/Plugins/templates/modal.html
index ca4c31d5..a9a60aae 100644
--- a/Resources/Plugins/templates/modal.html
+++ b/Resources/Plugins/templates/modal.html
@@ -8,7 +8,7 @@
         <button data-action="new-template" class="Button--primary"><i class="icon icon-plus icon-small padding-rs"></i><span class="label">New Template</span></button>
       </div>
     </div>
-
+    
     <div id="template-editor" class="invisible">
       <div class="template-editor-form">
         <div class="compose-text-title">Template Name</div>
@@ -16,7 +16,7 @@
         
         <div class="compose-text-title">Contents</div>
         <textarea name="template-contents" class="compose-text scroll-v scroll-styled-v scroll-styled-h scroll-alt"></textarea>
-
+        
         <div class="compose-text-title template-editor-tips-button">Advanced <i class="icon icon-arrow-d"></i></div>
         <div class="template-editor-tips">
           <p>You can use the following tokens. All tokens except for <span style="font-family: monospace">{ajax}</span> can only be used once.</p>
@@ -69,7 +69,7 @@
       display: flex;
       flex-direction: column;
     }
-
+    
     .templates-modal-bottom {
       flex: 0 0 auto;
       padding: 16px;
@@ -92,7 +92,7 @@
     }
     
     /* Template list */
-
+    
     #template-list {
       height: 100%;
       flex: 1 1 auto;
diff --git a/Resources/Plugins/timeline-polls/browser.js b/Resources/Plugins/timeline-polls/browser.js
index 6eef2976..1b854f80 100644
--- a/Resources/Plugins/timeline-polls/browser.js
+++ b/Resources/Plugins/timeline-polls/browser.js
@@ -38,7 +38,7 @@ enabled(){
   
   // hooks
   
-  var funcs = {
+  const funcs = {
     TwitterStatus: TD.services.TwitterStatus.prototype.render,
     TwitterActionOnTweet: TD.services.TwitterActionOnTweet.prototype.render,
     TweetDetailView: TD.components.TweetDetailView.prototype._renderChirp
diff --git a/Resources/Scripts/code.js b/Resources/Scripts/code.js
index 2c28ffb5..22a3a225 100644
--- a/Resources/Scripts/code.js
+++ b/Resources/Scripts/code.js
@@ -2,17 +2,17 @@
   //
   // Variable: Current highlighted column jQuery & data objects.
   //
-  var highlightedColumnEle, highlightedColumnObj;
+  let highlightedColumnEle, highlightedColumnObj;
   
   //
   // Variable: Currently highlighted tweet jQuery & data objects.
   //
-  var highlightedTweetEle, highlightedTweetObj;
+  let highlightedTweetEle, highlightedTweetObj;
   
   //
   // Variable: Array of functions called after the website app is loaded.
   //
-  var onAppReady = [];
+  let onAppReady = [];
   
   //
   // Variable: DOM HTML element.
@@ -116,10 +116,10 @@
   $(document).on("uiColumnRendered", function(e, data){
     let icon = data.$column.find(".column-type-icon").first();
     return if icon.length !== 1;
-
+    
     let name = Array.prototype.find.call(icon[0].classList, cls => cls.startsWith("icon-"));
     return if !name;
-
+    
     data.$column.attr("data-td-icon", name);
     data.column._tduck_icon = name;
   });
@@ -278,10 +278,10 @@
         let chirpId = source ? source.id : "";
         let tweetUrl = source ? source.getChirpURL() : "";
         let quoteUrl = source && source.quotedTweet ? source.quotedTweet.getChirpURL() : "";
-
+        
         $TD.onTweetPopup(column.model.privateState.apiid, chirpId, window.TDGF_getColumnName(column), html.html(), duration, tweetUrl, quoteUrl);
       }
-
+      
       if (column.model.getHasSound()){
         $TD.onTweetSound();
       }
@@ -300,7 +300,7 @@
     const showTweetDetailInternal = function(column, chirp){
       TD.ui.updates.showDetailView(column, chirp, column.findChirp(chirp) || chirp);
       TD.controller.columnManager.showColumn(column.model.privateState.key);
-
+      
       $(document).trigger("uiGridClearSelection");
     };
     
@@ -368,11 +368,11 @@
     TD.settings.setFontSize = appendToFunction(TD.settings.setFontSize, function(name){
       setTimeout(refreshSettings, 0);
     });
-
+    
     TD.settings.setTheme = appendToFunction(TD.settings.setTheme, function(name){
       setTimeout(refreshSettings, 0);
     });
-
+    
     onAppReady.push(refreshSettings);
   })();
   
@@ -397,7 +397,7 @@
     TD.controller.notifications.hasNotifications = function(){
       return true;
     };
-
+    
     TD.controller.notifications.isPermissionGranted = function(){
       return true;
     };
@@ -420,11 +420,11 @@
         
         let button = $('<li class="is-selectable" data-tweetduck><a href="#" data-action>TweetDuck</a></li>');
         button.insertBefore(menu.children(".drp-h-divider").last());
-
+        
         button.on("click", "a", function(){
           $TD.openContextMenu();
         });
-
+        
         button.hover(function(){
           $(this).addClass("is-selected");
         }, function(){
@@ -438,8 +438,8 @@
   // Block: Expand shortened links on hover or display tooltip.
   //
   (function(){
-    var prevMouseX = -1, prevMouseY = -1;
-    var tooltipTimer, tooltipDisplayed;
+    let prevMouseX = -1, prevMouseY = -1;
+    let tooltipTimer, tooltipDisplayed;
     
     $(document.body).delegate("a[data-full-url]", {
       mouseenter: function(){
@@ -906,7 +906,7 @@
     $(document).on("dataTweetSent", function(e, data){
       if (data.response.state && data.response.state === "scheduled"){
         let column = Object.values(TD.controller.columnManager.getAll()).find(column => column.model.state.type === "scheduled");
-
+        
         if (column){
           setTimeout(function(){
             column.reloadTweets();
@@ -922,7 +922,7 @@
   (function(){
     return if !ensurePropertyExists(TD, "vo", "Column", "prototype", "clear");
     
-    var holdingShift = false;
+    let holdingShift = false;
     
     const updateShiftState = (pressed) => {
       if (pressed != holdingShift){
@@ -1174,7 +1174,7 @@
     return if !ensurePropertyExists(TD, "components", "BaseModal", "prototype", "setAndShowContainer");
     return if !ensurePropertyExists(TD, "ui", "Column", "prototype", "playGifIfNotManuallyPaused");
     
-    var cancelModal = false;
+    let cancelModal = false;
     
     TD.components.MediaGallery.prototype._loadTweet = appendToFunction(TD.components.MediaGallery.prototype._loadTweet, function(){
       let media = this.chirp.getMedia().find(media => media.mediaId === this.clickedMediaEntityId);
@@ -1184,7 +1184,7 @@
         cancelModal = true;
       }
     });
-
+    
     TD.components.BaseModal.prototype.setAndShowContainer = prependToFunction(TD.components.BaseModal.prototype.setAndShowContainer, function(){
       if (cancelModal){
         cancelModal = false;
@@ -1215,12 +1215,13 @@
   // Block: Add a pin icon to make tweet compose drawer stay open.
   //
   onAppReady.push(function(){
-    let ele = $(`<svg id="td-compose-drawer-pin" viewBox="0 0 24 24" class="icon js-show-tip" data-original-title="Stay open" data-tooltip-position="left">
+    let ele = $(`
+<svg id="td-compose-drawer-pin" viewBox="0 0 24 24" class="icon js-show-tip" data-original-title="Stay open" data-tooltip-position="left">
  <path d="M9.884,16.959l3.272,0.001l-0.82,4.568l-1.635,0l-0.817,-4.569Z"/>
  <rect x="8.694" y="7.208" width="5.652" height="7.445"/>
  <path d="M16.877,17.448c0,-1.908 -1.549,-3.456 -3.456,-3.456l-3.802,0c-1.907,0 -3.456,1.548 -3.456,3.456l10.714,0Z"/>
  <path d="M6.572,5.676l2.182,2.183l5.532,0l2.182,-2.183l0,-1.455l-9.896,0l0,1.455Z"/>
- </svg>`).appendTo(".js-docked-compose .js-compose-header");
+</svg>`).appendTo(".js-docked-compose .js-compose-header");
     
     ele.click(function(){
       if (TD.settings.getComposeStayOpen()){
@@ -1249,16 +1250,16 @@
       if (data.query && data.searchScope !== "users" && !data.columnKey){
         if ($TDX.openSearchInFirstColumn){
           let order = TD.controller.columnManager._columnOrder;
-
+          
           if (order.length > 1){
             let columnKey = order[order.length-1];
-
+            
             order.splice(order.length-1, 1);
             order.splice(1, 0, columnKey);
             TD.controller.columnManager.move(columnKey, "left");
           }
         }
-
+        
         if (!("tweetduck" in data)){
           $(".js-app-search-input").val("");
           $(".js-perform-search").blur();
@@ -1378,7 +1379,7 @@
       $(".js-btn-fav", ".js-modal-inner").each(function(){
         let event = $._data(this, "events").click[0];
         let handler = event.handler;
-
+        
         event.handler = function(){
           overrideState();
           handler.apply(this, arguments);
@@ -1392,7 +1393,7 @@
         let event = $._data(this, "events").click[0];
         let handler = event.handler;
         let context = handler.context;
-
+        
         event.handler = function(){
           overrideState();
           handler.apply(this, arguments);
@@ -1434,11 +1435,11 @@
     
     TD.services.TwitterConversation.prototype.renderThread = function(){
       let prevMessages = this.messages;
-
+      
       this.messages = prevMessages.slice(0, 100);
       let result = prevFunc.apply(this, arguments);
       this.messages = prevMessages;
-
+      
       return result;
     };
   }
@@ -1479,9 +1480,8 @@
       </div>
     </li>
   </ul>
-</div>
-`).appendTo(document.body);
-
+</div>`).appendTo(document.body);
+      
       ele.find("button").click(function(){
         ele.fadeOut(200);
       });
@@ -1521,7 +1521,7 @@
   };
   
   if (window.TD_SESSION && window.TD_SESSION.gc){
-    var state;
+    let state;
     
     try{
       state = JSON.parse(window.TD_SESSION.gc);
@@ -1562,7 +1562,7 @@
       $(document).one("dataColumnsLoaded", function(){
         let columns = Object.values(TD.controller.columnManager.getAll());
         let remaining = columns.length;
-
+        
         for(let column of columns){
           column.ui.getChirpContainer().one("dataColumnFeedUpdated", () => {
             if (--remaining === 0){
diff --git a/Resources/Scripts/imports/scripts/plugins.base.js b/Resources/Scripts/imports/scripts/plugins.base.js
index 2f61b6c1..20d85e55 100644
--- a/Resources/Scripts/imports/scripts/plugins.base.js
+++ b/Resources/Scripts/imports/scripts/plugins.base.js
@@ -3,14 +3,14 @@
   // Block: Setup a simple JavaScript object configuration loader.
   //
   window.TDPF_loadConfigurationFile = function(pluginObject, fileNameUser, fileNameDefault, onSuccess, onFailure){
-    var identifier = pluginObject.$id;
-    var token = pluginObject.$token;
+    let identifier = pluginObject.$id;
+    let token = pluginObject.$token;
     
     $TDP.checkFileExists(token, fileNameUser).then(exists => {
-      var fileName = exists ? fileNameUser : fileNameDefault;
+      let fileName = exists ? fileNameUser : fileNameDefault;
       
       (exists ? $TDP.readFile(token, fileName, true) : $TDP.readFileRoot(token, fileName)).then(contents => {
-        var obj;
+        let obj;
         
         try{
           obj = eval("("+contents+")");
@@ -39,7 +39,7 @@
   // Block: Setup a function to add/remove custom CSS.
   //
   window.TDPF_createCustomStyle = function(pluginObject){
-    var element = document.createElement("style");
+    let element = document.createElement("style");
     element.id = "plugin-"+pluginObject.$id+"-"+Math.random().toString(36).substring(2, 7);
     document.head.appendChild(element);
     
diff --git a/Resources/Scripts/notification.js b/Resources/Scripts/notification.js
index ebbb7a21..70a79e3c 100644
--- a/Resources/Scripts/notification.js
+++ b/Resources/Scripts/notification.js
@@ -2,14 +2,14 @@
   //
   // Variable: Collection of all <a> tags.
   //
-  var links = document.getElementsByTagName("A");
+  const links = document.getElementsByTagName("A");
   
   //
   // Function: Adds an event listener to all elements in the array or collection.
   //
-  var addEventListener = function(collection, type, listener){
-    for(let index = 0; index < collection.length; index++){
-      collection[index].addEventListener(type, listener);
+  const addEventListener = function(collection, type, listener){
+    for(let ele of collection){
+      ele.addEventListener(type, listener);
     }
   };
   
@@ -20,13 +20,13 @@
     const onLinkClick = function(e){
       if (e.button === 0 || e.button === 1){
         let ele = e.currentTarget;
-
+        
         $TD.openBrowser(ele.href);
         e.preventDefault();
-
+        
         if ($TDX.skipOnLinkClick){
           let parentClasses = ele.parentNode.classList;
-
+          
           if (parentClasses.contains("js-tweet-text") || parentClasses.contains("js-quoted-tweet-text") || parentClasses.contains("js-timestamp")){
             $TD.loadNextNotification();
           }
@@ -42,18 +42,18 @@
   // Block: Expand shortened links on hover or display tooltip.
   //
   (function(){
-    var prevMouseX = -1, prevMouseY = -1;
-    var tooltipTimer, tooltipDisplayed;
+    let prevMouseX = -1, prevMouseY = -1;
+    let tooltipTimer, tooltipDisplayed;
     
     addEventListener(links, "mouseenter", function(e){
-      var me = e.currentTarget;
+      let me = e.currentTarget;
       
-      var url = me.getAttribute("data-full-url");
+      let url = me.getAttribute("data-full-url");
       return if !url;
       
-      var text = me.textContent;
+      let text = me.textContent;
       return if text.charCodeAt(text.length-1) !== 8230 && text.charCodeAt(0) !== 8230; // horizontal ellipsis
-
+      
       if ($TDX.expandLinksOnHover){
         tooltipTimer = window.setTimeout(function(){
           me.setAttribute("td-prev-text", text);
@@ -72,8 +72,8 @@
       return if !e.currentTarget.hasAttribute("data-full-url");
       
       if ($TDX.expandLinksOnHover){
-        var prevText = e.currentTarget.getAttribute("td-prev-text");
-
+        let prevText = e.currentTarget.getAttribute("td-prev-text");
+        
         if (prevText){
           e.currentTarget.innerHTML = prevText;
         }
@@ -89,7 +89,7 @@
     
     addEventListener(links, "mousemove", function(e){
       if (tooltipDisplayed && (prevMouseX !== e.clientX || prevMouseY !== e.clientY)){
-        var url = e.currentTarget.getAttribute("data-full-url");
+        let url = e.currentTarget.getAttribute("data-full-url");
         return if !url;
         
         $TD.displayTooltip(url);
@@ -110,7 +110,7 @@
   // Block: Setup a handler for 'Show this thread'.
   //
   (function(){
-    var btn = document.getElementById("tduck-show-thread");
+    let btn = document.getElementById("tduck-show-thread");
     return if !btn;
     
     btn.addEventListener("click", function(){
@@ -138,7 +138,7 @@
   document.body.addEventListener("mouseenter", function(){
     document.body.classList.add("td-hover");
   });
-
+  
   document.body.addEventListener("mouseleave", function(){
     document.body.classList.remove("td-hover");
   });
diff --git a/Resources/Scripts/plugins.browser.js b/Resources/Scripts/plugins.browser.js
index c3d66691..abc9701d 100644
--- a/Resources/Scripts/plugins.browser.js
+++ b/Resources/Scripts/plugins.browser.js
@@ -1,6 +1,4 @@
 (function(){
-  var isReloading = false;
-  
   //
   // Class: Abstract plugin base class.
   //
@@ -107,12 +105,16 @@
   //
   // Block: Setup a function to reload the page.
   //
-  window.TDPF_requestReload = function(){
-    if (!isReloading){
-      window.setTimeout(window.TDGF_reload, 1);
-      isReloading = true;
-    }
-  };
+  (function(){
+    let isReloading = false;
+    
+    window.TDPF_requestReload = function(){
+      if (!isReloading){
+        window.setTimeout(window.TDGF_reload, 1);
+        isReloading = true;
+      }
+    };
+  })();
   
   //
   // Block: Setup bridges to global functions.
diff --git a/Resources/Scripts/twitter.js b/Resources/Scripts/twitter.js
index 526f9fcd..aefe116d 100644
--- a/Resources/Scripts/twitter.js
+++ b/Resources/Scripts/twitter.js
@@ -2,13 +2,13 @@
   //
   // Function: Inject custom CSS into the page.
   //
-  var injectCSS = function(){
+  const injectCSS = function(){
     if (!document.head){
       setTimeout(injectCSS, 5);
       return;
     }
     
-    var style = document.createElement("style");
+    let style = document.createElement("style");
     
     style.innerText = `#import "styles/twitter.base.css"`;
     
@@ -26,22 +26,20 @@
   //
   if (location.pathname === "/login"){
     document.addEventListener("DOMContentLoaded", function(){
-      let openLinkExternally = function(e){
+      const openLinkExternally = function(e){
         let href = e.currentTarget.getAttribute("href");
         $TD.openBrowser(href[0] === '/' ? location.origin+href : href);
-
+        
         e.preventDefault();
         e.stopPropagation();
       };
-
-      let links = document.getElementsByTagName("A");
-
-      for(let index = 0; index < links.length; index++){
-        links[index].addEventListener("click", openLinkExternally);
+      
+      for(let link of document.getElementsByTagName("A")){
+        link.addEventListener("click", openLinkExternally);
       }
-
+      
       let texts = document.querySelector(".page-canvas > div:last-child");
-
+      
       if (texts){
         texts.insertAdjacentHTML("beforeend", `<p class="tweetduck-helper">Used the TweetDuck app before? <a href="#">Import your profile ยป</a></p>`);
         
@@ -57,7 +55,7 @@
   else if (location.pathname === "/logout"){
     document.addEventListener("DOMContentLoaded", function(){
       let cancel = document.querySelector(".buttons .cancel");
-
+      
       if (cancel && cancel.tagName === "A"){
         cancel.href = "https://tweetdeck.twitter.com/";
       }
diff --git a/Resources/Scripts/update.js b/Resources/Scripts/update.js
index fdf40f0b..e9c60f8a 100644
--- a/Resources/Scripts/update.js
+++ b/Resources/Scripts/update.js
@@ -2,7 +2,7 @@
   //
   // Function: Creates the update notification element. Removes the old one if already exists.
   //
-  var displayNotification = function(version, changelog){
+  const displayNotification = function(version, changelog){
     
     // styles
     let css = document.getElementById("tweetduck-update-css");