[Pkg-mozext-commits] [status-4-evar] 01/01: Imported Upstream version 2015.02.06.23

Ximin Luo infinity0 at pwned.gg
Sun Mar 29 17:00:22 UTC 2015


This is an automated email from the git hooks/post-receive script.

infinity0-guest pushed a commit to branch upstream
in repository status-4-evar.

commit f09679947ac7ae032492bd56a47aca8b3e62b2b7
Author: Ximin Luo <infinity0 at pwned.gg>
Date:   Sun Mar 29 18:22:13 2015 +0200

    Imported Upstream version 2015.02.06.23
---
 chrome.manifest                                    |  15 +-
 chrome/content/australis.js                        |  58 --
 chrome/content/australis.xul                       |  48 --
 chrome/content/legacy.xul                          |  24 -
 chrome/content/overlay.js                          |  12 +-
 chrome/content/overlay.xul                         |  30 +-
 chrome/content/prefs.js                            |   2 +
 chrome/content/prefs.xul                           |  10 -
 chrome/content/prefsLegacy.xul                     |  21 -
 chrome/locale/bg-BG/prefs.dtd                      |   2 -
 chrome/locale/cs/prefs.dtd                         |   2 -
 chrome/locale/da/prefs.dtd                         |   2 -
 chrome/locale/de/prefs.dtd                         |   2 -
 chrome/locale/dsb/prefs.dtd                        |   2 -
 chrome/locale/el/prefs.dtd                         |   2 -
 chrome/locale/en-US/prefs.dtd                      |   3 -
 chrome/locale/eo/prefs.dtd                         |   2 -
 chrome/locale/es-ES/prefs.dtd                      |   2 -
 chrome/locale/fr/prefs.dtd                         |   2 -
 chrome/locale/he/prefs.dtd                         |   2 -
 chrome/locale/hsb/prefs.dtd                        |   2 -
 chrome/locale/hu/prefs.dtd                         |   2 -
 chrome/locale/it-IT/prefs.dtd                      |   2 -
 chrome/locale/ja-JP/prefs.dtd                      |   2 -
 chrome/locale/nb-NO/prefs.dtd                      |   2 -
 chrome/locale/nl/prefs.dtd                         |   2 -
 chrome/locale/pl/prefs.dtd                         |   2 -
 chrome/locale/pt-BR/prefs.dtd                      |   2 -
 chrome/locale/ro/prefs.dtd                         |   2 -
 chrome/locale/ru/prefs.dtd                         |   2 -
 chrome/locale/sr/prefs.dtd                         |   2 -
 chrome/locale/sv-SE/prefs.dtd                      |   2 -
 chrome/locale/tr/prefs.dtd                         |   2 -
 chrome/locale/zh-CN/prefs.dtd                      |   2 -
 chrome/locale/zh-TW/prefs.dtd                      |   2 -
 chrome/skin/all/australis.css                      |  94 ---
 chrome/skin/all/overlay.css                        | 125 ++-
 chrome/skin/all/s4e24.png                          | Bin 241 -> 0 bytes
 .../skin/all/{legacy.css => version/overlay31.css} |   2 +-
 chrome/skin/all/version/overlay32.css              |  19 -
 .../all/version/{prefs26.css => overlay34.css}     |   7 +-
 chrome/skin/all/version/prefs28.css                |  19 -
 chrome/skin/all/version/prefs29.css                |  19 -
 chrome/skin/gnomestripe/australis.css              |  52 --
 chrome/skin/gnomestripe/legacy.css                 |  32 -
 chrome/skin/gnomestripe/overlay.css                |  43 +-
 chrome/skin/pinstripe/australis.css                |  63 --
 chrome/skin/pinstripe/legacy.css                   |  45 --
 chrome/skin/pinstripe/overlay.css                  |  64 +-
 chrome/skin/winstripe/australis.css                |  84 ---
 chrome/skin/winstripe/legacy.css                   |  28 -
 chrome/skin/winstripe/overlay.css                  |  56 +-
 components/status4evar.js                          |  34 +-
 components/status4evar.xpt                         | Bin 1465 -> 1435 bytes
 defaults/preferences/defaults.js                   |   1 -
 install.rdf                                        |   8 +-
 modules/Australis.jsm                              |  32 +-
 modules/DownloadService.jsm                        | 318 ++++++++
 modules/DownloadUI.jsm                             | 534 +++++++++++++
 modules/Downloads.jsm                              | 834 ---------------------
 modules/Status4Evar.jsm                            | 135 +++-
 modules/Toolbars.jsm                               | 186 +----
 62 files changed, 1323 insertions(+), 1784 deletions(-)

diff --git a/chrome.manifest b/chrome.manifest
index 39ec6b1..2ca4390 100644
--- a/chrome.manifest
+++ b/chrome.manifest
@@ -4,7 +4,7 @@
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 # 
-# Copyright (C) 2010-2014 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
+# Copyright (C) 2010-2015 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
 # 
 # ***** END LICENSE BLOCK *****
 
@@ -48,19 +48,10 @@ skin status4evar-os classic/1.0 chrome/skin/pinstripe/   os=Darwin
 
 # Overlays
 overlay chrome://browser/content/browser.xul   chrome://status4evar/content/overlay.xul
-overlay chrome://browser/content/browser.xul   chrome://status4evar/content/australis.xul   appversion>=29.0
-overlay chrome://browser/content/browser.xul   chrome://status4evar/content/legacy.xul      appversion<=28.*
-overlay chrome://status4evar/content/prefs.xul chrome://status4evar/content/prefsLegacy.xul appversion<=28.*
 
 # Styles
-style   chrome://browser/content/browser.xul         chrome://status4evar/skin/version/overlay32.css appversion>=32.0
-style   chrome://global/content/customizeToolbar.xul chrome://status4evar/content/overlay.css        appversion<=28.*
-style   chrome://global/content/customizeToolbar.xul chrome://status4evar/skin/overlay.css           appversion<=28.*
-style   chrome://global/content/customizeToolbar.xul chrome://status4evar-os/skin/overlay.css        appversion<=28.*
-style   chrome://global/content/customizeToolbar.xul chrome://status4evar-os/skin/legacy.css         appversion<=28.*
-style   chrome://status4evar/content/prefs.xul       chrome://status4evar/skin/version/prefs26.css   appversion>=26.0
-style   chrome://status4evar/content/prefs.xul       chrome://status4evar/skin/version/prefs28.css   appversion<=28.*
-style   chrome://status4evar/content/prefs.xul       chrome://status4evar/skin/version/prefs29.css   appversion>=29.0
+style   chrome://browser/content/browser.xul   chrome://status4evar/skin/version/overlay31.css appversion<=31.*
+style   chrome://browser/content/browser.xul   chrome://status4evar/skin/version/overlay34.css appversion<=34.*
 
 # XPCOM
 interfaces components/status4evar.xpt
diff --git a/chrome/content/australis.js b/chrome/content/australis.js
deleted file mode 100644
index d194e7a..0000000
--- a/chrome/content/australis.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * ***** BEGIN LICENSE BLOCK *****
- * 
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- * 
- * Original code copyright (C) Mozilla Foundation. All Rights Reserved.
- * Copyright (C) 2013 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
- * 
- * ***** END LICENSE BLOCK *****
- *
- * Toolbar popup handling code based on Mozilla Foundation code:
- * https://hg.mozilla.org/mozilla-central/file/6fae9d6feec8/browser/base/content/browser.js#l4114
- * Updated to add gNavToolbox.externalToolbars to toolbarNodes list.
-*/
-
-Components.utils.import("resource://status4evar/Australis.jsm");
-
-function onViewToolbarsPopupShowing(aEvent, aInsertPoint) {
-  var popup = aEvent.target;
-  if (popup != aEvent.currentTarget)
-    return;
-
-  // Empty the menu
-  for (var i = popup.childNodes.length-1; i >= 0; --i) {
-    var deadItem = popup.childNodes[i];
-    if (deadItem.hasAttribute("toolbarId"))
-      popup.removeChild(deadItem);
-  }
-
-  var firstMenuItem = aInsertPoint || popup.firstChild;
-
-  let toolbarNodes = Array.slice(gNavToolbox.childNodes);
-  toolbarNodes = toolbarNodes.concat(Array.slice(gNavToolbox.externalToolbars));
-
-  for (let toolbar of toolbarNodes) {
-    let toolbarName = toolbar.getAttribute("toolbarname");
-    if (toolbarName) {
-      let menuItem = document.createElement("menuitem");
-      let hidingAttribute = toolbar.getAttribute("type") == "menubar" ?
-                            "autohide" : "collapsed";
-      menuItem.setAttribute("id", "toggle_" + toolbar.id);
-      menuItem.setAttribute("toolbarId", toolbar.id);
-      menuItem.setAttribute("type", "checkbox");
-      menuItem.setAttribute("label", toolbarName);
-      menuItem.setAttribute("checked", toolbar.getAttribute(hidingAttribute) != "true");
-      menuItem.setAttribute("accesskey", toolbar.getAttribute("accesskey"));
-      if (popup.id != "toolbar-context-menu")
-        menuItem.setAttribute("key", toolbar.getAttribute("key"));
-
-      popup.insertBefore(menuItem, firstMenuItem);
-
-      menuItem.addEventListener("command", onViewToolbarCommand, false);
-    }
-  }
-}
-
diff --git a/chrome/content/australis.xul b/chrome/content/australis.xul
deleted file mode 100644
index 6b02fdb..0000000
--- a/chrome/content/australis.xul
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE overlay SYSTEM "chrome://status4evar/locale/overlay.dtd">
-
-<!--
-   - ***** BEGIN LICENSE BLOCK *****
-   - 
-   - This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/.
-   - 
-   - Copyright (C) 2013 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
-   - 
-   - ***** END LICENSE BLOCK *****
--->
-
-<?xml-stylesheet href="chrome://status4evar/skin/australis.css" type="text/css" ?>
-<?xml-stylesheet href="chrome://status4evar-os/skin/australis.css" type="text/css" ?>
-
-<overlay id="status4evar-australis-overlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-	<script type="application/javascript" src="chrome://status4evar/content/australis.js"/>
-
-	<toolbarpalette id="BrowserToolbarPalette">
-		<toolbaritem id="status4evar-throbber-widget"
-		             title="&status4evar.throbber.widget.title;"
-		             removable="true">
-			<vbox pack="center">
-				<image/>
-			</vbox>
-		</toolbaritem>
-	</toolbarpalette>
-
-	<vbox id="browser-bottombox">
-		<toolbar id="status4evar-status-bar"
-			toolbarname="&status4evar.status.toolbar.title;"
-			accesskey="&status4evar.status.toolbar.accessKey;"
-			customizable="true"
-			class="toolbar-primary"
-			context="toolbar-context-menu"
-			mode="icons"
-			iconsize="small"
-			ordinal="100"
-			toolboxid="navigator-toolbox">
-		</toolbar>
-	</vbox>
-</overlay>
-
diff --git a/chrome/content/legacy.xul b/chrome/content/legacy.xul
deleted file mode 100644
index 208d720..0000000
--- a/chrome/content/legacy.xul
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE overlay>
-
-<!--
-   - ***** BEGIN LICENSE BLOCK *****
-   - 
-   - This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/.
-   - 
-   - Copyright (C) 2014 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
-   - 
-   - ***** END LICENSE BLOCK *****
--->
-
-<?xml-stylesheet href="chrome://status4evar/skin/legacy.css" type="text/css" ?>
-<?xml-stylesheet href="chrome://status4evar-os/skin/legacy.css" type="text/css" ?>
-
-<overlay id="status4evar-legacy-overlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-	<statusbar id="status-bar" ordinal="1" />
-</overlay>
-
diff --git a/chrome/content/overlay.js b/chrome/content/overlay.js
index 2fc93fb..79babf8 100644
--- a/chrome/content/overlay.js
+++ b/chrome/content/overlay.js
@@ -5,11 +5,19 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  * 
- * Copyright (C) 2010, 2012, 2014 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
+ * Copyright (C) 2010, 2012-2014 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
  * 
  * ***** END LICENSE BLOCK *****
+ *
+ * Toolbar popup handling code based on Mozilla Foundation code:
+ * https://hg.mozilla.org/mozilla-central/file/6fae9d6feec8/browser/base/content/browser.js#l4114
+ * Updated to add gNavToolbox.externalToolbars to toolbarNodes list.
 */
 
+"use strict";
+
+Components.utils.import("resource://status4evar/Australis.jsm");
+
 if(!caligon) var caligon = {};
 
 window.addEventListener("load", function buildS4E()
@@ -18,7 +26,7 @@ window.addEventListener("load", function buildS4E()
 
 	Components.utils.import("resource://status4evar/Status4Evar.jsm");
 
-	caligon.status4evar = new Status4Evar(window, gBrowser, gNavToolbox);
+	caligon.status4evar = new Status4Evar(window, gBrowser, gNavToolbox, PanelUI);
 	caligon.status4evar.setup();
 }, false);
 
diff --git a/chrome/content/overlay.xul b/chrome/content/overlay.xul
index 58d34da..389d634 100644
--- a/chrome/content/overlay.xul
+++ b/chrome/content/overlay.xul
@@ -8,7 +8,7 @@
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/.
    - 
-   - Copyright (C) 2010-2011, 2013 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
+   - Copyright (C) 2010-2011, 2013-2015 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
    - 
    - ***** END LICENSE BLOCK *****
 -->
@@ -49,16 +49,16 @@
 		<toolbarbutton id="status4evar-download-button"
 		               title="&status4evar.download.widget.title;"
 		               class="toolbarbutton-1 chromeclass-toolbar-additional"
-		               removable="true" collapsed="true" tooltip="_child"
+		               removable="true" tooltip="_child"
 		               oncommand="caligon.status4evar.downloadStatus.openUI(event)">
 			<stack id="status4evar-download-anchor" class="toolbarbutton-icon">
-				<vbox id="status4evar-download-icon" />
+				<image id="status4evar-download-icon" />
 				<vbox pack="end">
 					<progressmeter id="status4evar-download-progress-bar" mode="normal" value="0" collapsed="true" min="0" max="100" />
 				</vbox>
 			</stack>
 			<tooltip id="status4evar-download-tooltip" />
-			<label id="status4evar-download-label" value="&status4evar.download.widget.title;" class="toolbarbutton-text" crop="right" flex="1" />
+			<label id="status4evar-download-label" class="toolbarbutton-multiline-text" wrap="true" flex="1" />
 		</toolbarbutton>
 
 		<toolbaritem id="status4evar-progress-widget"
@@ -73,10 +73,32 @@
 		               class="toolbarbutton-1 chromeclass-toolbar-additional"
 		               label="&status4evar.options.widget.label;"
 		               removable="true" command="S4E:Options" tooltiptext="&status4evar.options.widget.title;" />
+
+		<toolbaritem id="status4evar-throbber-widget"
+		             title="&status4evar.throbber.widget.title;"
+		             removable="true">
+			<vbox pack="center">
+				<image/>
+			</vbox>
+		</toolbaritem>
 	</toolbarpalette>
 
 	<textbox id="urlbar" pmpack="end">
 		<progressmeter id="urlbar-progress-alt"  mode="normal" value="0" collapsed="true" />
 	</textbox>
+
+	<vbox id="browser-bottombox">
+		<toolbar id="status4evar-status-bar"
+			toolbarname="&status4evar.status.toolbar.title;"
+			accesskey="&status4evar.status.toolbar.accessKey;"
+			customizable="true"
+			class="toolbar-primary"
+			context="toolbar-context-menu"
+			mode="icons"
+			iconsize="small"
+			ordinal="100"
+			toolboxid="navigator-toolbox">
+		</toolbar>
+	</vbox>
 </overlay>
 
diff --git a/chrome/content/prefs.js b/chrome/content/prefs.js
index df95e75..5985964 100644
--- a/chrome/content/prefs.js
+++ b/chrome/content/prefs.js
@@ -10,6 +10,8 @@
  * ***** END LICENSE BLOCK *****
 */
 
+"use strict";
+
 Components.utils.import("resource://gre/modules/Services.jsm");
 
 var status4evarPrefs =
diff --git a/chrome/content/prefs.xul b/chrome/content/prefs.xul
index d252b2e..34ce952 100644
--- a/chrome/content/prefs.xul
+++ b/chrome/content/prefs.xul
@@ -388,15 +388,12 @@
 	<prefpane id="status4evar-pane-addonbar" label="&status4evar.pane.statusbar;">
 		<preferences>
 			<preference id="status4evar-pref-addonbar-borderStyle"   name="status4evar.addonbar.borderStyle"   type="bool" />
-			<preference id="status4evar-pref-addonbar-closeButton"   name="status4evar.addonbar.closeButton"   type="bool" />
 			<preference id="status4evar-pref-addonbar-legacyShim"    name="status4evar.addonbar.legacyShim"    type="bool" />
 			<preference id="status4evar-pref-addonbar-windowGripper" name="status4evar.addonbar.windowGripper" type="bool" />
 		</preferences>
 
 		<checkbox id="status4evar-addonbar-borderStyle-check" preference="status4evar-pref-addonbar-borderStyle" label="&status4evar.addonbar.borderStyle;" />
 
-		<checkbox id="status4evar-addonbar-closeButton-check" preference="status4evar-pref-addonbar-closeButton" label="&status4evar.addonbar.closeButton;" />
-
 		<checkbox id="status4evar-addonbar-legacyShim-check" preference="status4evar-pref-addonbar-legacyShim" label="&status4evar.addonbar.legacyShim;" />
 
 		<checkbox id="status4evar-addonbar-windowGripper-check" preference="status4evar-pref-addonbar-windowGripper" label="&status4evar.addonbar.windowGripper;" />
@@ -408,7 +405,6 @@
 			<preference id="status4evar-pref-advanced-status-detectFullScreen" name="status4evar.advanced.status.detectFullScreen" type="bool" />
 			<preference id="status4evar-pref-advanced-status-detectVideo"      name="status4evar.advanced.status.detectVideo"      type="bool" />
 			<preference id="status4evar-pref-advanced-urlbar-forceBinding"     name="status4evar.advanced.urlbar.forceBinding"     type="bool" />
-			<preference id="toolkit-pref-classic-download-window"              name="browser.download.useToolkitUI"                type="bool" />
 		</preferences>
 
 		<commandset id="status4evar-commandset-advanced">
@@ -447,12 +443,6 @@
 					<checkbox id="status4evar-advanced-status-detectFullScreen-check" preference="status4evar-pref-advanced-status-detectFullScreen" label="&status4evar.advanced.status.detectFullScreen;" />
 					<checkbox id="status4evar-advanced-status-detectVideo-check" preference="status4evar-pref-advanced-status-detectVideo" label="&status4evar.advanced.status.detectVideo;" />
 				</groupbox>
-
-				<groupbox id="status4evar-advanced-download">
-					<caption label="&status4evar.pane.download;" />
-
-					<checkbox id="toolkit-classic-download-window-check" preference="toolkit-pref-classic-download-window" label="&toolkit.classic.download.window.label;" />
-				</groupbox>
 			</vbox>
 		</deck>
 	</prefpane>
diff --git a/chrome/content/prefsLegacy.xul b/chrome/content/prefsLegacy.xul
deleted file mode 100644
index 80ff2bb..0000000
--- a/chrome/content/prefsLegacy.xul
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE overlay SYSTEM "chrome://status4evar/locale/prefs.dtd">
-
-<!--
-   - ***** BEGIN LICENSE BLOCK *****
-   - 
-   - This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/.
-   - 
-   - Copyright (C) 2013 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
-   - 
-   - ***** END LICENSE BLOCK *****
--->
-
-<overlay id="status4evar-prefsLegacy-overlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-	<prefpane id="status4evar-pane-addonbar" label="&status4evar.pane.addonbar;"/>
-
-</overlay>
diff --git a/chrome/locale/bg-BG/prefs.dtd b/chrome/locale/bg-BG/prefs.dtd
index a3565b7..cb0680e 100644
--- a/chrome/locale/bg-BG/prefs.dtd
+++ b/chrome/locale/bg-BG/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "Подсветка на бутона при завършване на изтеглянето:">
 <!ENTITY status4evar.addonbar.borderStyle "Използване на алтернативни рамки за лентата с инструменти">
 <!ENTITY status4evar.addonbar.windowGripper "Показване на манипулатора за преоразмеряване на прозореца">
-<!ENTITY status4evar.addonbar.closeButton "Показване на бутона "Затвори"">
 <!ENTITY status4evar.addonbar.legacyShim "Enable legacy status bar panel support">
 <!ENTITY status4evar.advanced.warning "Разширените настройки може да създадат проблеми при работата на Status-4-Evar или на други добавки. Променяйте ги на Ваша отговорност.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "Пробвай принудително XBL привързване на адресната лента.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Изберете тази настройка само ако имате проблеми с лентата за напредък, или ако текстът за състоянието не се показва правилно. Това може да спре други разширения, които се опитват да установят XBL привързване на адресната лента.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Разпознаване на пълноекранен режим и преоразмеряване на връзките/състоянието.">
 <!ENTITY status4evar.advanced.status.detectVideo "Скриване на изскачащите прозорци при HTML5 видео на цял екран.">
-<!ENTITY toolkit.classic.download.window.label "Класически прозорец за изтеглянията">
diff --git a/chrome/locale/cs/prefs.dtd b/chrome/locale/cs/prefs.dtd
index 3a65b75..88d79be 100644
--- a/chrome/locale/cs/prefs.dtd
+++ b/chrome/locale/cs/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "Highlight button when download completes:">
 <!ENTITY status4evar.addonbar.borderStyle "Použít alternativní ohraničení lišty">
 <!ENTITY status4evar.addonbar.windowGripper "Zobrazit chytač změny velikosti okna">
-<!ENTITY status4evar.addonbar.closeButton "Zobrazit tlačítko zavření">
 <!ENTITY status4evar.addonbar.legacyShim "Enable legacy status bar panel support">
 <!ENTITY status4evar.advanced.warning "Tyto rozšířené možnosti mohou způsobit problémy se S-4-E nebo jinými rozšířeními. Změny ne vlastní nebezpečí.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "Pokusit se vynutit XBL vazby adresního řádku.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Zvolte pouze pokud máte problémy se zobrazením činnosti nebo stavu v adresním řádku. Toto může potenciálně poškodit jiné rozšíření, které nastavuje XBL vazby adresního řádku.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Přizpůsobit zobrazení odkazů/stavu v režimu celé obrazovky.">
 <!ENTITY status4evar.advanced.status.detectVideo "Hide status popup in full-screen HTML5 video.">
-<!ENTITY toolkit.classic.download.window.label "Použít klasické okno stahování">
diff --git a/chrome/locale/da/prefs.dtd b/chrome/locale/da/prefs.dtd
index 8a02272..154d4d0 100644
--- a/chrome/locale/da/prefs.dtd
+++ b/chrome/locale/da/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "Fremhæv knap når filhentning er færdig:">
 <!ENTITY status4evar.addonbar.borderStyle "Anvend alternative kanter til værktøjslinje">
 <!ENTITY status4evar.addonbar.windowGripper "Vis gribelinjen til ændring af vinduesstørrelse">
-<!ENTITY status4evar.addonbar.closeButton "Vis knappen Luk">
 <!ENTITY status4evar.addonbar.legacyShim "Aktiver understøttelse af ældre statuslinjepanel">
 <!ENTITY status4evar.advanced.warning "Disse avancerede indstillinger kan forårsage problemer med Status-4-Evar eller andre udvidelser. Ændr på eget ansvar.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "Forsøg af tvinge adresselinjen XBL-binding.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Vælg kun denne indstilling, hvis du har problemer med, at forløbet i adresselinjen eller statusteksten vises forkert. Den kan muligvis ødelægge andre udvidelser, som prøver at sætte en XBL-binding på adresselinjen.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Registrér fuldskærmstilstand og vis links/status korrekt.">
 <!ENTITY status4evar.advanced.status.detectVideo "Skjul status-pop op i fuldskærms-HTML-video.">
-<!ENTITY toolkit.classic.download.window.label "Brug klassisk filhentningsvindue">
diff --git a/chrome/locale/de/prefs.dtd b/chrome/locale/de/prefs.dtd
index 2f23be1..e25d2ed 100644
--- a/chrome/locale/de/prefs.dtd
+++ b/chrome/locale/de/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "Schaltfläche hervorheben, nach beendeten Download:">
 <!ENTITY status4evar.addonbar.borderStyle "Alternativen Symbolleisten-Rand verwenden">
 <!ENTITY status4evar.addonbar.windowGripper "Anfasser zur Fenstergrößenänderung anzeigen">
-<!ENTITY status4evar.addonbar.closeButton "Schließen-Schaltfläche anzeigen">
 <!ENTITY status4evar.addonbar.legacyShim "Unterstützung für alte Statusleiste aktivieren">
 <!ENTITY status4evar.advanced.warning "Diese erweiterten Einstellungen können Probleme mit Status-4-Evar oder anderen Erweiterungen verursachen. Änderungen nur auf eigene Gefahr!">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "XBL-Bindung der Adressleiste erzwingen.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Nur auswählen wenn Sie Probleme mit der Darstellung der Fortschrittsanzeige in der Adressleiste oder dem Statustext haben. Dies kann möglicherweise Probleme, mit anderen Erweiterungen die eine XBL-Bindung auf der Adressleiste setzen, verursachen.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Vollbildmodus erkennen und Links bzw. Status entsprechend anzeigen.">
 <!ENTITY status4evar.advanced.status.detectVideo "Status Popup-Fenster bei HTML5 Videos ausblenden.">
-<!ENTITY toolkit.classic.download.window.label "Klassisches Download-Fenster verwenden">
diff --git a/chrome/locale/dsb/prefs.dtd b/chrome/locale/dsb/prefs.dtd
index 278ab67..7121600 100644
--- a/chrome/locale/dsb/prefs.dtd
+++ b/chrome/locale/dsb/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "Tłocašk wuzwignuś, gaž ześěgnjenje se kóńcy">
 <!ENTITY status4evar.addonbar.borderStyle "Alternatiwne ramiki rědoweje kšomy wužywaś">
 <!ENTITY status4evar.addonbar.windowGripper "Pśimk za změnjanje wjelikosći wokna pokazaś">
-<!ENTITY status4evar.addonbar.closeButton "Tłocašk "Zacyniś" pokazaś">
 <!ENTITY status4evar.addonbar.legacyShim "Pódpěru za staru statusowu rědku zmóžniś">
 <!ENTITY status4evar.advanced.warning "Toś te rozšyrjone nastajenja mógu problemy z Status-4-Evar abo drugimi rozšyrjenjami zawinowaś. Změńśo je na swójo riziko.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "Wopyt XBL-zwězanje adresowego póla wunuźiś.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Wuběŕśo to jano, jolic maśo problemy z póstupom adresowego póla abo jolic statusowy tekst njezwobraznja se korektnje. To mógło snaź druge rozšyrjenja kazyś, kótarež wopytuju XBL-zwězanje na adresowem pólu stajiś.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Modus połneje wobrazowki namakaś a wótkaze/status pśigódnje pokazaś.">
 <!ENTITY status4evar.advanced.status.detectVideo "Statusowe wuskokujuce wokno we wideo HTML5 w modusu połneje wobrazowki schowaś.">
-<!ENTITY toolkit.classic.download.window.label "Klasiske ześěgnjeńske wokno wužywaś">
diff --git a/chrome/locale/el/prefs.dtd b/chrome/locale/el/prefs.dtd
index ae72518..3c94d67 100644
--- a/chrome/locale/el/prefs.dtd
+++ b/chrome/locale/el/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "Επισήμανση κουμπιού κατά την ολοκλήρωση λήψης:">
 <!ENTITY status4evar.addonbar.borderStyle "Χρήση εναλλακτικού περιγράμματος εργαλειοθήκης">
 <!ENTITY status4evar.addonbar.windowGripper "Εμφάνιση της λαβής αλλαγής μεγέθους του παραθύρου">
-<!ENTITY status4evar.addonbar.closeButton "Εμφάνιση του κουμπιού κλεισίματος">
 <!ENTITY status4evar.addonbar.legacyShim "Ενεργοποίηση υποστήριξης πίνακα γραμμής κατάστασης παλαιού τύπου">
 <!ENTITY status4evar.advanced.warning "Αυτές οι προηγμένες ρυθμίσεις μπορεί να προκαλέσουν προβλήματα με την επέκταση 'Status-4-EVAR' ή άλλες επεκτάσεις. Τροποποιήστε τις με δικό σας ρίσκο.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "Προσπάθεια επιβολής της διάδεσης XBL γραμμής τοποθεσιών.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Δοκιμάστε αυτήν την επιλογή μόνο εάν έχετε προβλήματα σωστής εμφάνισης της προόδου ή του κειμένου κατάστασης στη γραμμή τοποθεσιών. Αυτό εν δυνάμει διασπάει άλλες επεκτάσεις που προσπαθούν να θέσουν κάποια διάδεση XBL στη γραμμή τοποθεσιών.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Ανίχνευση λειτουργίας πλήρους οθόνης και εμφάνιση δεσμών/κατάστασης κατάλληλα.">
 <!ENTITY status4evar.advanced.status.detectVideo "Απόκρυψη αναδυόμενου κατάστασης κατά την προβολή βίντεο HTML5 σε πλήρη οθόνη.">
-<!ENTITY toolkit.classic.download.window.label "Χρήση κλασικού παραθύρου λήψεων">
diff --git a/chrome/locale/en-US/prefs.dtd b/chrome/locale/en-US/prefs.dtd
index 3c08463..12b5981 100644
--- a/chrome/locale/en-US/prefs.dtd
+++ b/chrome/locale/en-US/prefs.dtd
@@ -112,7 +112,6 @@
 
 <!ENTITY status4evar.addonbar.borderStyle "Use alternate toolbar borders">
 <!ENTITY status4evar.addonbar.windowGripper "Show the window re-size gripper">
-<!ENTITY status4evar.addonbar.closeButton "Show the close button">
 <!ENTITY status4evar.addonbar.legacyShim "Enable legacy status bar panel support">
 
 
@@ -125,5 +124,3 @@
 <!ENTITY status4evar.advanced.status.detectFullScreen "Detect full-screen mode and show links/status appropriately.">
 <!ENTITY status4evar.advanced.status.detectVideo "Hide status popup in full-screen HTML5 video.">
 
-<!ENTITY toolkit.classic.download.window.label "Use classic download window">
-
diff --git a/chrome/locale/eo/prefs.dtd b/chrome/locale/eo/prefs.dtd
index 439aaf8..3e17f05 100644
--- a/chrome/locale/eo/prefs.dtd
+++ b/chrome/locale/eo/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "Reliefigi butonon, kiam elŝuto finiĝas:">
 <!ENTITY status4evar.addonbar.borderStyle "Uzi alternativajn ilbretajn borderojn">
 <!ENTITY status4evar.addonbar.windowGripper "Montri prenilon por fenestroskalado">
-<!ENTITY status4evar.addonbar.closeButton "Montri butonon 'Fermi'">
 <!ENTITY status4evar.addonbar.legacyShim "Ebligi subtenon por malnova statobreto">
 <!ENTITY status4evar.advanced.warning "Ĉi tiuj detalaj agordoj povas kaŭzi problemojn kun Status-4-Evar aŭ aliaj etendaĵoj. Modifu ilin je via propra risko.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "Provo eldevigi la XBL-bindadon de la adresbreto.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Elektu tion nur, se vi havas problemojn kun  la plenumado de la adresbreto aŭ se la statoteksto ne estas korekte vidigata. Tio povas ĝeni aliajn etendaĵojn, kiuj provas agordi XBL-bindadon en la adresbreto.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Trovi tutekranan reĝimon a montri taŭge ligilon/staton.">
 <!ENTITY status4evar.advanced.status.detectVideo "Kaŝi statoŝprucfenestron en tutekrana video HTML5.">
-<!ENTITY toolkit.classic.download.window.label "Uzi klasikan elŝutfenestron">
diff --git a/chrome/locale/es-ES/prefs.dtd b/chrome/locale/es-ES/prefs.dtd
index c5aa403..7e09dc9 100644
--- a/chrome/locale/es-ES/prefs.dtd
+++ b/chrome/locale/es-ES/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "Mantener resaltado el botón después de completar las descargas durante:">
 <!ENTITY status4evar.addonbar.borderStyle "Usar un estilo visual alternativo para los bordes">
 <!ENTITY status4evar.addonbar.windowGripper "Mostrar el deslizador para redimensionar la ventana">
-<!ENTITY status4evar.addonbar.closeButton "Mostrar el botón «Cerrar»">
 <!ENTITY status4evar.addonbar.legacyShim "Habilitar soporte a la barra de estado heredada">
 <!ENTITY status4evar.advanced.warning "Cambiar estas opciones avanzadas puede causar problemas con Status-4-Evar u otras extensiones. Hágalo bajo su propia responsabilidad.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "Forzar la vinculación («binding») XBL a la barra de direcciones">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Habilite esta opción sólo si el medidor de progreso o el mensaje de estado no son mostrados correctamente en la barra de direcciones. Esto causará problemas potencialmente a otras extensiones que asocian una vinculación XBL a la barra de direcciones.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Detectar el modo de pantalla completa y mostrar debidamente los enlaces y mensajes de estado.">
 <!ENTITY status4evar.advanced.status.detectVideo "Oculta el mensaje de estado emergente cuando se reproduce vídeo HTML5 a pantalla completa.">
-<!ENTITY toolkit.classic.download.window.label "Usar la ventana de descargas clásica">
diff --git a/chrome/locale/fr/prefs.dtd b/chrome/locale/fr/prefs.dtd
index c2c3bfe..32ca15f 100644
--- a/chrome/locale/fr/prefs.dtd
+++ b/chrome/locale/fr/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "Mettre en évidence le bouton lorsque le téléchargement est terminé :">
 <!ENTITY status4evar.addonbar.borderStyle "Utiliser les bordures de barre d'outils alternatives">
 <!ENTITY status4evar.addonbar.windowGripper "Afficher le pointeur de redimensionnement de fenêtre">
-<!ENTITY status4evar.addonbar.closeButton "Afficher le bouton de fermeture">
 <!ENTITY status4evar.addonbar.legacyShim "Activer l'héritage de prise en charge du panneau de barre d'état">
 <!ENTITY status4evar.advanced.warning "Ces paramètres avancés peuvent entraîner des problèmes avec Status-4-Evar ou d'autres extensions. Modifications à vos propre risques.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "Tentative de forcer le binding XBL de la barre de navigation.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Ne sélectionnez ceci que si vous avez des problèmes avec l'affichage du texte de progression ou d'état de la barre de navigation. Cela pourra potentiellement endommager d'autres extensions qui tentent de définir le binding XBL sur la barre de navigation.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Détecter le mode plein écran et afficher les liens et l'état appropriés.">
 <!ENTITY status4evar.advanced.status.detectVideo "Masquer la popup d'état pour une vidéo HTML5 en plein écran.">
-<!ENTITY toolkit.classic.download.window.label "Utiliser la fenêtre de téléchargements classique">
diff --git a/chrome/locale/he/prefs.dtd b/chrome/locale/he/prefs.dtd
index 03ddc07..09c9b39 100644
--- a/chrome/locale/he/prefs.dtd
+++ b/chrome/locale/he/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "הבלטת כפתור כאשר הורדה מסתיימת:">
 <!ENTITY status4evar.addonbar.borderStyle "שימוש בגבולות סרגל כלים חלופיים">
 <!ENTITY status4evar.addonbar.windowGripper "הצגת תפסן שינוי גודל החלון">
-<!ENTITY status4evar.addonbar.closeButton "הצגת כפתור הסגירה">
 <!ENTITY status4evar.addonbar.legacyShim "אפשור תמיכת לוח סרגל מצב חדש">
 <!ENTITY status4evar.advanced.warning "הגדרות מתקדמות אלו עלולות לגרום לבעיות עם Status-4-Evar או הרחבות אחרות. שינויים על אחריותכם בלבד.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "ניסיון לאלץ XBL binding על סרגל המיקום.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "בחרו בזה רק אם ישנן בעיות עם התקדמות סרגל המיקום או עם טקסט המצב שמוצג נכונה. ישנה אפשרות שזה יגרום לשבירת הרחבות אחרות אשר מנסות לקבוע XBL binding על סרגל המיקום.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "זיהוי מצב מסך מלא והצגת קישורים/מצב כראוי.">
 <!ENTITY status4evar.advanced.status.detectVideo "הסרת חלון קופץ המצב בווידאו HTML5 במסך מלא.">
-<!ENTITY toolkit.classic.download.window.label "שימוש בחלון ההורדות הקלאסי">
diff --git a/chrome/locale/hsb/prefs.dtd b/chrome/locale/hsb/prefs.dtd
index a68877e..50a8814 100644
--- a/chrome/locale/hsb/prefs.dtd
+++ b/chrome/locale/hsb/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "Tłóčatko wuzběhnyć, hdyž so sćehnjenje kónči">
 <!ENTITY status4evar.addonbar.borderStyle "Alternatiwne ramiki za gratowe lajsty wužiwać">
 <!ENTITY status4evar.addonbar.windowGripper "Přimk za změnjenje wulkosće wokna pokazać">
-<!ENTITY status4evar.addonbar.closeButton "Tłóčatko 'Začinić' pokazać">
 <!ENTITY status4evar.addonbar.legacyShim "Podpěru za staru statusowu lajstu zmóžnić">
 <!ENTITY status4evar.advanced.warning "Tute rozšěrjene nastajenja móža problemy z Status-4-Evar abo druhimi rozšěrjenjemi zawinować. Změńće je na swoje riziko.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "Pospyt XBL-zwjazanje adresoweho pola wunuzować.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Wubjerće to jenož, jeli maće problemy z postupom adresoweho pola abo jeli statusowy tekst so korektnje njezwobraznja. To móhło snano druhim rozšěrjenjam haćić, kotrež pospytuja XBL-zwjazanje na adresowym polu stajić.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Modus połneje wobrazowki namakać a wotkazy/status přihódnje pokazać.">
 <!ENTITY status4evar.advanced.status.detectVideo "Statusowe wuskakowace wokno we wideju HTML5 w modusu połneje wobrazowki schować.">
-<!ENTITY toolkit.classic.download.window.label "Klasiske sćehnjenske wokno wužiwać">
diff --git a/chrome/locale/hu/prefs.dtd b/chrome/locale/hu/prefs.dtd
index 5109080..6be6a71 100644
--- a/chrome/locale/hu/prefs.dtd
+++ b/chrome/locale/hu/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "Highlight button when download completes:">
 <!ENTITY status4evar.addonbar.borderStyle "Alternatív eszköztár szegélyek használata">
 <!ENTITY status4evar.addonbar.windowGripper "Ablak átméretező mutatása">
-<!ENTITY status4evar.addonbar.closeButton "Bezárás gomb mutatása">
 <!ENTITY status4evar.addonbar.legacyShim "Enable legacy status bar panel support">
 <!ENTITY status4evar.advanced.warning "Ezek a haladók beállítások problémákat okozhatnak a Status-4-Evar-ben, vagy más kiegészítőkben. Csak saját felelősségre változtassa!">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "Kísérlet a címsor XBL kötésének erőltetésére.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Csak akkor válassza ezt az opciót, ha problémái vannak a címsor betöltési csík vagy a státusz szöveg megjelenítésével. Ez potenciálisan elronthat más kiegészítőket, amelyek a címsor XBL kötését használják.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Detect full-screen mode and show links/status appropriately.">
 <!ENTITY status4evar.advanced.status.detectVideo "Hide status popup in full-screen HTML5 video.">
-<!ENTITY toolkit.classic.download.window.label "Use classic download window">
diff --git a/chrome/locale/it-IT/prefs.dtd b/chrome/locale/it-IT/prefs.dtd
index 7783c25..684d4d1 100644
--- a/chrome/locale/it-IT/prefs.dtd
+++ b/chrome/locale/it-IT/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "Colora il pulsante quando un download viene completato:">
 <!ENTITY status4evar.addonbar.borderStyle "Usa bordo alternativo per le barre degli strumenti">
 <!ENTITY status4evar.addonbar.windowGripper "Mostra la maniglia di ridimensionamento della finestra">
-<!ENTITY status4evar.addonbar.closeButton "Mostra il pulsante di chiusura">
 <!ENTITY status4evar.addonbar.legacyShim "Enable legacy status bar panel support">
 <!ENTITY status4evar.advanced.warning "Queste impostazioni avanzate potrebbero causare problemi con Status-4-Evar o altre estensioni.  Modificatele a vostro rischio.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "Tenta di forzare il binding XBL della barra degli indirizzi.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Selezionare questo solo se si verificano problemi nella visualizzazione della barra di avanzamento o dei messaggi di stato nella barra degli indirizzi.  Questo potrebbe causare il malfunzionamento di altre estensioni che tentano di effettuare un binding XBL con la barra degli indirizzi.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Rileva modalità a schermo intero e mostra indirizzi e informazioni di stato in modo appropriato.">
 <!ENTITY status4evar.advanced.status.detectVideo "Hide status popup in full-screen HTML5 video.">
-<!ENTITY toolkit.classic.download.window.label "Usa finestra di download classica">
diff --git a/chrome/locale/ja-JP/prefs.dtd b/chrome/locale/ja-JP/prefs.dtd
index 7f1f303..8b0bb01 100644
--- a/chrome/locale/ja-JP/prefs.dtd
+++ b/chrome/locale/ja-JP/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "ダウンロード完了時に点滅させる">
 <!ENTITY status4evar.addonbar.borderStyle "別のボーダースタイルを使用">
 <!ENTITY status4evar.addonbar.windowGripper "ウインドウをリサイズするグリップを表示">
-<!ENTITY status4evar.addonbar.closeButton "閉じるボタンを表示">
 <!ENTITY status4evar.addonbar.legacyShim "旧ステータスバーパネルのサポートを有効化">
 <!ENTITY status4evar.advanced.warning "詳細設定を誤ると、Status-4-Evar はもとより他の拡張機能に対しても問題を発生させることがあります。設定は自己責任で行うこと">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "ロケーションバーで強制的に XBL binding を試みる">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "ロケーションバーでのプログレス表示やテキスト表示に異常がある場合にだけ選択すること(他の拡張機能がロケーションバーで XBL Binding するのを妨げる恐れがあるため)">
 <!ENTITY status4evar.advanced.status.detectFullScreen "全画面表示でリンク/ステータスを適切に表示">
 <!ENTITY status4evar.advanced.status.detectVideo "HTML5 ビデオをフルスクリーン表示中はステータスのポップアップを隠す">
-<!ENTITY toolkit.classic.download.window.label "旧来のダウンロードマネージャを使用">
diff --git a/chrome/locale/nb-NO/prefs.dtd b/chrome/locale/nb-NO/prefs.dtd
index bd1edea..f5704d4 100644
--- a/chrome/locale/nb-NO/prefs.dtd
+++ b/chrome/locale/nb-NO/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "Fremhev knappen når nedlastingen er fullført:">
 <!ENTITY status4evar.addonbar.borderStyle "Bruk alternative kanter for verktøylinje">
 <!ENTITY status4evar.addonbar.windowGripper "Vis gripeområdet for endring av vindusstørrelse">
-<!ENTITY status4evar.addonbar.closeButton "Vis knappen lukk">
 <!ENTITY status4evar.addonbar.legacyShim "Aktiver støtte for eldre statuslinjepanel">
 <!ENTITY status4evar.advanced.warning "Disse avanserte innstillinger kan forårsake problemer med Status-4-Evar eller andre utvidelser. Endre på din egen risiko.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "Forsøk å tvinge XBL-bindingen for adresselinjen.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Velg kun dette hvis du har problemer med at adresselinje-framdriftsviser eller statusteksten ikke blir vist riktig. Dette vil potensielt bryte andre utvidelser som forsøker å sette en XBL-binding på adresselinjen.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Oppdag fullskjermmodus og vis lenker/status riktig.">
 <!ENTITY status4evar.advanced.status.detectVideo "Skjul statussprettopp i fullskjerms-HTML5-video.">
-<!ENTITY toolkit.classic.download.window.label "Bruk klassisk nedlastingsvindu">
diff --git a/chrome/locale/nl/prefs.dtd b/chrome/locale/nl/prefs.dtd
index ad649af..01fe830 100644
--- a/chrome/locale/nl/prefs.dtd
+++ b/chrome/locale/nl/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "Knop oplichten als download klaar is:">
 <!ENTITY status4evar.addonbar.borderStyle "Alternatieve werkbalkranden gebruiken">
 <!ENTITY status4evar.addonbar.windowGripper "Indicatie voor wijzigen venstergrootte tonen">
-<!ENTITY status4evar.addonbar.closeButton "Sluitknop tonen">
 <!ENTITY status4evar.addonbar.legacyShim "Ondersteuning voor de oude statusbalk inschakelen">
 <!ENTITY status4evar.advanced.warning "Deze geavanceerde instellingen kunnen problemen geven met Status-4-Evar of andere extensies. Wijzig ze op eigen risico.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "Probeer de XBL-binding van de locatiebalk te forceren.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Selecteer dit alleen als u problemen heeft met de weergave van tekst in de voortgangs- of statusbalk. Dit kan problemen geven met andere extensies die een XBL-binding voor de locatiebalk proberen in te stellen.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Volledig scherm detecteren en bijbehorende verwijzingen/status tonen.">
 <!ENTITY status4evar.advanced.status.detectVideo "Statusvenster verbergen bij HTML5-video in volledig scherm.">
-<!ENTITY toolkit.classic.download.window.label "Gebruik het oude download-venster">
diff --git a/chrome/locale/pl/prefs.dtd b/chrome/locale/pl/prefs.dtd
index 2f48480..6a39979 100644
--- a/chrome/locale/pl/prefs.dtd
+++ b/chrome/locale/pl/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "Wyróżniaj przycisk po zakończeniu pobierania przez">
 <!ENTITY status4evar.addonbar.borderStyle "Wyświetlaj obramowanie paska">
 <!ENTITY status4evar.addonbar.windowGripper "Wyświetlaj uchwyt zmiany rozmiaru okna">
-<!ENTITY status4evar.addonbar.closeButton "Wyświetlaj przycisk zamykania">
 <!ENTITY status4evar.addonbar.legacyShim "Włącz panel dziedziczonego paska stanu">
 <!ENTITY status4evar.advanced.warning "Te ustawienia mogą powodować problemy z rozszerzeniem Status-4-Evar lub innymi rozszerzeniami. Zmieniasz je na własną odpowiedzialność.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "Próbuj ustawić wiązania XBL w pasku adresu">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Włącz tę funkcję tylko, gdy masz problemy z paskiem postępu w pasku adresu lub z prawidłowym wyświetlaniem tekstu statusu. Funkcja ta może powodować konflikty z innymi rozszerzeniami, które próbują w pasku adresu ustawić wiązania XBL.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Wykryj tryb pełnoekranowy i wyświetl odpowiednio odnośniki/status/">
 <!ENTITY status4evar.advanced.status.detectVideo "Nie wyświetlaj okna statusu, gdy wideo HTML5 jest w trybie pełnoekranowym.">
-<!ENTITY toolkit.classic.download.window.label "Stosuj klasyczne okno pobierania">
diff --git a/chrome/locale/pt-BR/prefs.dtd b/chrome/locale/pt-BR/prefs.dtd
index 45ce69b..b6bc5c2 100644
--- a/chrome/locale/pt-BR/prefs.dtd
+++ b/chrome/locale/pt-BR/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "Destacar botão quando o download terminar:">
 <!ENTITY status4evar.addonbar.borderStyle "Usar bordas alternadas na barra de ferramentas">
 <!ENTITY status4evar.addonbar.windowGripper "Mostrar o gripper de redimensionamento da janela">
-<!ENTITY status4evar.addonbar.closeButton "Mostrar o botão Fechar">
 <!ENTITY status4evar.addonbar.legacyShim "Enable legacy status bar panel support">
 <!ENTITY status4evar.advanced.warning "Essas configurações avançadas podem causar problemas com o Status-4-Evar ou outras extensões. Modifique por sua própria conta e risco.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "Tentar forçar a integração da Barra de Endereços XBL.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Selecione isso somente se tiver problemas de exibição com o progresso da Barra de Endereços ou com o texto de status. Isso tem grande possibilidade de impedir outras extensões de configurar uma integração do XBL com a Barra de Endereços.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Detectar modo tela cheia e mostrar links/status corretamente.">
 <!ENTITY status4evar.advanced.status.detectVideo "Hide status popup in full-screen HTML5 video.">
-<!ENTITY toolkit.classic.download.window.label "Usar a janela de downloads clássica">
diff --git a/chrome/locale/ro/prefs.dtd b/chrome/locale/ro/prefs.dtd
index 5ca07f2..fbede1f 100644
--- a/chrome/locale/ro/prefs.dtd
+++ b/chrome/locale/ro/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "Timp de evidențiere a butonului de stare a descărcărilor după terminarea acestora:">
 <!ENTITY status4evar.addonbar.borderStyle "Se utilizează chenarul alternativ al barei de suplimente">
 <!ENTITY status4evar.addonbar.windowGripper "Se afișează glisorul de redimensionare a ferestrei navigatorului">
-<!ENTITY status4evar.addonbar.closeButton "Se afișează butonul de ascundere a barei de suplimente">
 <!ENTITY status4evar.addonbar.legacyShim "Se activează suportul pentru vechea bară de stare">
 <!ENTITY status4evar.advanced.warning "Aceste opțiuni complexe pot provoca unele probleme cu Status-4-Evar sau alte suplimentele. Modificați-le pe propriul risc.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "Se încearcă forțarea conexiunii XBL cu bara de adrese">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Selectați această opțiune doar dacă aveţi probleme de afișare a progresului sau textului pe bara de adrese. Acest lucru poate bloca alte suplimente care încearcă să stabilească o conexiune XBL cu bara de adrese.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Se detectează modul ecran-complet și se afișează legăturile/starea corespunzătoare">
 <!ENTITY status4evar.advanced.status.detectVideo "Se ascunde mesajul instantaneu de stare la redarea videoclipurilor HTML5 în modul ecran-complet">
-<!ENTITY toolkit.classic.download.window.label "Se folosește fereastra clasică de descărcare">
diff --git a/chrome/locale/ru/prefs.dtd b/chrome/locale/ru/prefs.dtd
index df329d9..1b482c5 100644
--- a/chrome/locale/ru/prefs.dtd
+++ b/chrome/locale/ru/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "Highlight button when download completes:">
 <!ENTITY status4evar.addonbar.borderStyle "Использовать чередующиеся границы панелей инструментов">
 <!ENTITY status4evar.addonbar.windowGripper "Показать захват изменения размера окна">
-<!ENTITY status4evar.addonbar.closeButton "Показать кнопку «Закрыть»">
 <!ENTITY status4evar.addonbar.legacyShim "Enable legacy status bar panel support">
 <!ENTITY status4evar.advanced.warning "These advanced settings may cause issues with Status-4-Evar or other extensions. Modify at your own risk.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "Attempt to force the the Location Bar XBL binding.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Only select this if you have problems with the Location Bar progress or status text being displaying correctly. This will potentially break other extensions that try to set an XBL binding on the Location Bar.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Detect full-screen mode and show links/status appropriately.">
 <!ENTITY status4evar.advanced.status.detectVideo "Hide status popup in full-screen HTML5 video.">
-<!ENTITY toolkit.classic.download.window.label "Use classic download window">
diff --git a/chrome/locale/sr/prefs.dtd b/chrome/locale/sr/prefs.dtd
index 2c10711..ae9b747 100644
--- a/chrome/locale/sr/prefs.dtd
+++ b/chrome/locale/sr/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "Истакни дугме када се преузимање заврши:">
 <!ENTITY status4evar.addonbar.borderStyle "Користи алтернативне ивице трака с алаткама">
 <!ENTITY status4evar.addonbar.windowGripper "Прикажи простор за измену величине прозора">
-<!ENTITY status4evar.addonbar.closeButton "Дугме за затварање">
 <!ENTITY status4evar.addonbar.legacyShim "Омогући подршку за траку стања">
 <!ENTITY status4evar.advanced.warning "Ове напредне поставке могу да стварају проблеме с овим или другим додацима. Користите их на сопствени ризик.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "Приморај XBL повезивање траке за путању.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Изаберите ово само ако имате проблема с напретком траке за путању или се текст стања не приказује исправно. Ово може да онеспособи друге додатке који покушају да користе XBL повезивање на траку за путању.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Препознај када је прозор развучен преко целог екрана и прикажи одговарајуће везе/стања.">
 <!ENTITY status4evar.advanced.status.detectVideo "Сакриј искачући прозор стања приликом гледања HTML5 видео снимка преко целог екрана.">
-<!ENTITY toolkit.classic.download.window.label "Користи класични прозор са преузимањима">
diff --git a/chrome/locale/sv-SE/prefs.dtd b/chrome/locale/sv-SE/prefs.dtd
index c832180..b6e8a01 100644
--- a/chrome/locale/sv-SE/prefs.dtd
+++ b/chrome/locale/sv-SE/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "Färgmarkera knappen när filhämtningar slutförs:">
 <!ENTITY status4evar.addonbar.borderStyle "Använd alternativa verktygsfältskantlinjer">
 <!ENTITY status4evar.addonbar.windowGripper "Visa handtaget för fönsterstorleksändring">
-<!ENTITY status4evar.addonbar.closeButton "Visa stängknappen">
 <!ENTITY status4evar.addonbar.legacyShim "Aktivera stöd för statusfältpaneler i äldre system">
 <!ENTITY status4evar.advanced.warning "Dessa avancerade inställningar kan skapa problem med Status-4-Evar eller andra tillägg. Används på egen risk.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "Försök att tvinga XBL-bindningen för adressfältet.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Aktivera detta endast om du har problem med adressfältet eller statustextvisningen. Funktionen kan skapa konflikter med andra tillägg som försöker att ange en XBL-bindning i adressfältet.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Upptäck helskärmsläge och visa länkar/status i enlighet med det.">
 <!ENTITY status4evar.advanced.status.detectVideo "Dölj statuspopuprutan vid visning av HTML5-video i helskärmsläge.">
-<!ENTITY toolkit.classic.download.window.label "Använd klassiskt filhämtningsfönster">
diff --git a/chrome/locale/tr/prefs.dtd b/chrome/locale/tr/prefs.dtd
index df20090..31ffc1a 100644
--- a/chrome/locale/tr/prefs.dtd
+++ b/chrome/locale/tr/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "İndirme tamamlandığında düğmeyi vurgula:">
 <!ENTITY status4evar.addonbar.borderStyle "Alternatif araç çubuğu çerçevesi kullan">
 <!ENTITY status4evar.addonbar.windowGripper "Pencere yeniden boyutlandırıcıyı göster">
-<!ENTITY status4evar.addonbar.closeButton "Kapatma düğmesini göster">
 <!ENTITY status4evar.addonbar.legacyShim "Yerleşik durum çubuğu panel desteğini etkinleştir">
 <!ENTITY status4evar.advanced.warning "Bu gelişmiş ayarlar Status-4-Evar veya diğer eklentilerle ilgili sorunlara neden olabilir. Değiştirmek kendi sorumluluğunuzdadır.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "Durum Çuğuğu XBL bağlamayı zorla.">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "Eğer konum çubuğunun ilerlemesinde veya durum metninin doğru gösterilmesinde bir sorun varsa bunu seçin. Durum çubuğundaki XBL bağlayıcı ayarlanırken diğer eklentiler duraklatılacaktır.">
 <!ENTITY status4evar.advanced.status.detectFullScreen "Tam ekran modunu algıla ve bağlantıları/durumu uygun şekilde göster.">
 <!ENTITY status4evar.advanced.status.detectVideo "Tam ekranlı HTML5 videoda açılır pencereyi gizle.">
-<!ENTITY toolkit.classic.download.window.label "Klasik indirme pencersini kullan">
diff --git a/chrome/locale/zh-CN/prefs.dtd b/chrome/locale/zh-CN/prefs.dtd
index 3285e5b..bfd5143 100644
--- a/chrome/locale/zh-CN/prefs.dtd
+++ b/chrome/locale/zh-CN/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "下载完成时高亮按钮:">
 <!ENTITY status4evar.addonbar.borderStyle "使用备用的工具栏边框">
 <!ENTITY status4evar.addonbar.windowGripper "显示窗口大小调整控件">
-<!ENTITY status4evar.addonbar.closeButton "显示关闭按钮">
 <!ENTITY status4evar.addonbar.legacyShim "启用经典状态栏支持">
 <!ENTITY status4evar.advanced.warning "高级设置可能导致Status-4-Evar或者其它扩展出现问题。修改后出现问题后果自负。">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "尝试强制为地址栏绑定XBL">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "请仅在地址栏进度条或者状态文字显示有误的时候选中此项。这样做可能会导致其它扩展为地址栏绑定的XBL失效。">
 <!ENTITY status4evar.advanced.status.detectFullScreen "检测全屏模式并正确显示链接/状态.">
 <!ENTITY status4evar.advanced.status.detectVideo "全屏观看HTML5视频时隐藏状态栏弹出消息。">
-<!ENTITY toolkit.classic.download.window.label "使用经典下载窗口">
diff --git a/chrome/locale/zh-TW/prefs.dtd b/chrome/locale/zh-TW/prefs.dtd
index d2df0ed..1ea7729 100644
--- a/chrome/locale/zh-TW/prefs.dtd
+++ b/chrome/locale/zh-TW/prefs.dtd
@@ -88,11 +88,9 @@
 <!ENTITY status4evar.download.notify.timeout.label "下載完成後按鈕繼續亮到:">
 <!ENTITY status4evar.addonbar.borderStyle "使用替代的工具列邊框">
 <!ENTITY status4evar.addonbar.windowGripper "顯示視窗大小調整器">
-<!ENTITY status4evar.addonbar.closeButton "顯示關閉按鈕">
 <!ENTITY status4evar.addonbar.legacyShim "啟用傳統位址列面板支援">
 <!ENTITY status4evar.advanced.warning "進階設定可能會使 Status-4-Evar 或其他套件出問題。修改時請自負風險。">
 <!ENTITY status4evar.advanced.urlbar.forceBinding "嘗試強制位址列 XBL binding。">
 <!ENTITY status4evar.advanced.urlbar.forceBinding.desc "只有在位址列進度條或狀態文字顯示有誤時才勾選此設定。另外這也有可能與其他試圖對位址列設定 XBL binding 的套件產生衝突。">
 <!ENTITY status4evar.advanced.status.detectFullScreen "偵測全螢幕模式並調整連結/狀態的顯示。">
 <!ENTITY status4evar.advanced.status.detectVideo "全螢幕播放 HTML5 影片時隱藏彈出的狀態通知。">
-<!ENTITY toolkit.classic.download.window.label "使用傳統的下載視窗">
diff --git a/chrome/skin/all/australis.css b/chrome/skin/all/australis.css
deleted file mode 100644
index 6ebc583..0000000
--- a/chrome/skin/all/australis.css
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * ***** BEGIN LICENSE BLOCK *****
- * 
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- * 
- * Copyright (C) 2014 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
- * 
- * ***** END LICENSE BLOCK *****
- * 
- * Original Add-on bar styling by Mozilla Foundation.
- * Adapted from the back-out patch:
- * https://hg.mozilla.org/mozilla-central/rev/dd59f8effb73
-*/
-
- at namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-
-#status-bar
-{
-	display: -moz-box;
-	min-width: 0;
-	min-height: 0;
-	-moz-appearance: none;
-	background-color: transparent;
-	border: none;
-}
-
-#status-bar > statusbarpanel
-{
-	border-width: 0;
-	-moz-appearance: none;
-}
-
-#status4evar-legacy-widget[cui-areatype="menu-panel"] #status-bar,
-toolbarpaletteitem[place="palette"] > #status4evar-legacy-widget #status-bar
-{
-	min-height: 32px;
-}
-
-toolbarpaletteitem #status-bar
-{
-	min-width: 32px;
-	background-image: repeating-linear-gradient(135deg,
-	                  rgba(255,255,255,0.1),
-	                  rgba(255,255,255,0.1) 5px,
-	                  rgba(0,0,0,0.1) 5px,
-	                  rgba(0,0,0,0.1) 10px);
-}
-
- at keyframes status4evar-throbber-widget-loading
-{
-	to
-	{
-		transform: rotate(360deg);
-	}
-}
-
- at keyframes status4evar-throbber-widget-connecting
-{
-	from
-	{
-		transform: rotate(360deg);
-	}
-}
-
-#status4evar-throbber-widget
-{
-	padding: 0 12px;
-}
-
-#status4evar-throbber-widget image
-{
-	list-style-image: url("chrome://status4evar/skin/throbber-idle.png");
-	width: 16px;
-	height: 16px;
-}
-
-#status4evar-throbber-widget[busy] image
-{
-	list-style-image: url("chrome://browser/skin/tabbrowser/connecting.png");
-	animation-duration: 960ms;
-	animation-iteration-count: infinite;
-	animation-name: status4evar-throbber-widget-connecting;
-	animation-timing-function: linear;
-}
-
-#status4evar-throbber-widget[progress] image
-{
-	list-style-image: url("chrome://browser/skin/tabbrowser/loading.png");
-	animation-duration: 800ms;
-	animation-name: status4evar-throbber-widget-loading;
-}
-
diff --git a/chrome/skin/all/overlay.css b/chrome/skin/all/overlay.css
index 6003480..a9dcfc4 100644
--- a/chrome/skin/all/overlay.css
+++ b/chrome/skin/all/overlay.css
@@ -9,7 +9,7 @@
  * Original code copyright (C) 2010 Drew Willcoxon <adw at mozilla.com>. All Rights Reserved.
  * Original code copyright (C) 2013 Paolo Amadini <paolo.mozmail at amadzone.org>. All Rights Reserved.
  * Original code copyright (C) 2013 Gijs Kruitbosch <gijskruitbosch at gmail.com>. All Rights Reserved.
- * Copyright (C) 2010-2014 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
+ * Copyright (C) 2010-2015 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
  * 
  * ***** END LICENSE BLOCK *****
  * 
@@ -28,6 +28,10 @@
  * Original download notification code by Gijs Kruitbosch.
  * Adapted from the check-in patch:
  * https://hg.mozilla.org/mozilla-central/rev/8a1d8044a4c8
+ * 
+ * Original Add-on bar styling by Mozilla Foundation.
+ * Adapted from the back-out patch:
+ * https://hg.mozilla.org/mozilla-central/rev/dd59f8effb73
 */
 
 @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
@@ -66,10 +70,10 @@
 
 #status4evar-options-button
 {
-	list-style-image: url("chrome://status4evar/skin/s4e24.png");
+	list-style-image: url("chrome://status4evar/skin/s4e32.png");
 }
 
-toolbar[iconsize="small"] #status4evar-options-button
+#status4evar-options-button[cui-areatype="toolbar"]
 {
 	list-style-image: url("chrome://status4evar/skin/s4e16.png");
 }
@@ -109,6 +113,34 @@ toolbar[mode="icons"] #status4evar-download-button[forcelabel="true"] > label
 	background-image: url("chrome://status4evar/skin/pulse.png");
 }
 
+#status4evar-download-icon
+{
+	background-position: center;
+	background-repeat: no-repeat;
+	min-width: 32px;
+	min-height: 32px;
+	list-style-image: url("chrome://browser/skin/menuPanel.png");
+	-moz-image-region: rect(0px, 256px, 32px, 224px);
+}
+
+#status4evar-download-button[cui-areatype="menu-panel"][attention] #status4evar-download-icon
+{
+	list-style-image: url("chrome://browser/skin/downloads/download-glow-menuPanel.png");
+	-moz-image-region: auto;
+}
+
+#status4evar-download-button[cui-areatype="toolbar"] #status4evar-download-icon
+{
+	min-width: 18px;
+	min-height: 18px;
+	list-style-image: url("chrome://browser/skin/Toolbar.png");
+}
+
+toolbar[brighttext] #status4evar-download-button[cui-areatype="toolbar"] #status4evar-download-icon
+{
+	list-style-image: url("chrome://browser/skin/Toolbar-inverted.png");
+}
+
 #status4evar-download-notification-container
 {
 	min-height: 1px;
@@ -136,7 +168,7 @@ toolbar[mode="icons"] #status4evar-download-button[forcelabel="true"] > label
 	to   { opacity: 0; transform: scale(8); }
 }
 
-#status4evar-download-notification-anchor[notification="finish"][forcevisible="true"] #status4evar-download-notification-icon
+#status4evar-download-notification-anchor[notification="finish"] #status4evar-download-notification-icon
 {
 	background-image: url("chrome://browser/skin/downloads/download-notification-finish.png");
 	animation-name: status4evar-download-notification-finish;
@@ -317,6 +349,11 @@ splitter.status4evar-status-splitter:not(:hover)
 	border: none;
 }
 
+#urlbar .urlbar-origin-label
+{
+	-moz-padding-start: 1px;
+}
+
 #urlbar .urlbar-over-link-box:-moz-locale-dir(ltr)
 {
 	-moz-padding-start: 18px;
@@ -350,11 +387,91 @@ splitter.status4evar-status-splitter:not(:hover)
 }
 
 /*
+ * Throbber
+ */
+
+ at keyframes status4evar-throbber-widget-loading
+{
+	to
+	{
+		transform: rotate(360deg);
+	}
+}
+
+ at keyframes status4evar-throbber-widget-connecting
+{
+	from
+	{
+		transform: rotate(360deg);
+	}
+}
+
+#status4evar-throbber-widget
+{
+	padding: 0 12px;
+}
+
+#status4evar-throbber-widget image
+{
+	list-style-image: url("chrome://status4evar/skin/throbber-idle.png");
+	width: 16px;
+	height: 16px;
+}
+
+#status4evar-throbber-widget[busy] image
+{
+	list-style-image: url("chrome://browser/skin/tabbrowser/connecting.png");
+	animation-duration: 960ms;
+	animation-iteration-count: infinite;
+	animation-name: status4evar-throbber-widget-connecting;
+	animation-timing-function: linear;
+}
+
+#status4evar-throbber-widget[progress] image
+{
+	list-style-image: url("chrome://browser/skin/tabbrowser/loading.png");
+	animation-duration: 800ms;
+	animation-name: status4evar-throbber-widget-loading;
+}
+
+/*
  * Status bar
  */
 
+#status-bar
+{
+	display: -moz-box;
+	min-width: 0;
+	min-height: 0;
+	-moz-appearance: none;
+	background-color: transparent;
+	border: none;
+}
+
+#status-bar > statusbarpanel
+{
+	border-width: 0;
+	-moz-appearance: none;
+}
+
 #status-bar > .statusbar-resizerpanel
 {
 	display: none !important;
 }
 
+#status4evar-legacy-widget[cui-areatype="menu-panel"] #status-bar,
+toolbarpaletteitem[place="palette"] > #status4evar-legacy-widget #status-bar
+{
+	min-height: 32px;
+}
+
+toolbarpaletteitem #status-bar
+{
+	min-width: 32px;
+	background-image: repeating-linear-gradient(135deg,
+	                  rgba(255,255,255,0.1),
+	                  rgba(255,255,255,0.1) 5px,
+	                  rgba(0,0,0,0.1) 5px,
+	                  rgba(0,0,0,0.1) 10px);
+}
+
diff --git a/chrome/skin/all/s4e24.png b/chrome/skin/all/s4e24.png
deleted file mode 100644
index 3197782..0000000
Binary files a/chrome/skin/all/s4e24.png and /dev/null differ
diff --git a/chrome/skin/all/legacy.css b/chrome/skin/all/version/overlay31.css
similarity index 95%
rename from chrome/skin/all/legacy.css
rename to chrome/skin/all/version/overlay31.css
index 5f9be6f..639a5aa 100644
--- a/chrome/skin/all/legacy.css
+++ b/chrome/skin/all/version/overlay31.css
@@ -14,6 +14,6 @@
 
 #urlbar .urlbar-origin-label
 {
-	-moz-padding-start: 1px;
+	-moz-padding-start: 0px;
 }
 
diff --git a/chrome/skin/all/version/overlay32.css b/chrome/skin/all/version/overlay32.css
deleted file mode 100644
index 5f9be6f..0000000
--- a/chrome/skin/all/version/overlay32.css
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * ***** BEGIN LICENSE BLOCK *****
- * 
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- * 
- * Copyright (C) 2014 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
- * 
- * ***** END LICENSE BLOCK *****
-*/
-
- at namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-
-#urlbar .urlbar-origin-label
-{
-	-moz-padding-start: 1px;
-}
-
diff --git a/chrome/skin/all/version/prefs26.css b/chrome/skin/all/version/overlay34.css
similarity index 60%
rename from chrome/skin/all/version/prefs26.css
rename to chrome/skin/all/version/overlay34.css
index 5539da9..4448cdd 100644
--- a/chrome/skin/all/version/prefs26.css
+++ b/chrome/skin/all/version/overlay34.css
@@ -5,15 +5,16 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  * 
- * Copyright (C) 2014 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
+ * Copyright (C) 2015 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
  * 
  * ***** END LICENSE BLOCK *****
 */
 
 @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
 
-#status4evar-advanced-download
+#status4evar-download-button[cui-areatype="toolbar"][attention] #status4evar-download-icon
 {
-	display: none;
+	list-style-image: url("chrome://browser/skin/downloads/download-glow.png");
+	-moz-image-region: auto;
 }
 
diff --git a/chrome/skin/all/version/prefs28.css b/chrome/skin/all/version/prefs28.css
deleted file mode 100644
index 3c12b4d..0000000
--- a/chrome/skin/all/version/prefs28.css
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * ***** BEGIN LICENSE BLOCK *****
- * 
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- * 
- * Copyright (C) 2014 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
- * 
- * ***** END LICENSE BLOCK *****
-*/
-
- at namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-
-#status4evar-addonbar-legacyShim-check
-{
-	display: none;
-}
-
diff --git a/chrome/skin/all/version/prefs29.css b/chrome/skin/all/version/prefs29.css
deleted file mode 100644
index 8a452d1..0000000
--- a/chrome/skin/all/version/prefs29.css
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * ***** BEGIN LICENSE BLOCK *****
- * 
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- * 
- * Copyright (C) 2014 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
- * 
- * ***** END LICENSE BLOCK *****
-*/
-
- at namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-
-#status4evar-addonbar-closeButton-check
-{
-	display: none;
-}
-
diff --git a/chrome/skin/gnomestripe/australis.css b/chrome/skin/gnomestripe/australis.css
deleted file mode 100644
index 8bf3e5f..0000000
--- a/chrome/skin/gnomestripe/australis.css
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * ***** BEGIN LICENSE BLOCK *****
- * 
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- * 
- * Original code copyright (C) Mozilla Foundation. All Rights Reserved.
- * 
- * ***** END LICENSE BLOCK *****
- * 
- * Original Add-on bar styling by Mozilla Foundation.
- * Adapted from the back-out patch:
- * https://hg.mozilla.org/mozilla-central/rev/dd59f8effb73
-*/
-
- at namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-
-#status4evar-status-bar
-{
-	box-shadow: 0 1px 0 rgba(0,0,0,.15) inset;
-	padding: 0;
-	min-height: 20px;
-}
-
-#status4evar-status-bar .toolbarbutton-1,
-#status4evar-status-bar .toolbarbutton-1 > .toolbarbutton-menubutton-button
-{
-	-moz-appearance: none;
-	border-style: none;
-	padding: 0 3px;
-}
-
-#status4evar-status-bar .toolbarbutton-1:not([disabled]):hover,
-#status4evar-status-bar .toolbarbutton-1[open],
-#status4evar-status-bar .toolbarbutton-1 > .toolbarbutton-menubutton-button:not([disabled]):hover
-{
-	background-image: linear-gradient(to top, transparent, rgba(0,0,0,.15)),
-	                  linear-gradient(to top, transparent, rgba(0,0,0,.15) 30%),
-	                  linear-gradient(to top, transparent, rgba(0,0,0,.15) 30%);
-	background-position: left, left, right;
-	background-size: auto, 1px 100%, 1px 100%;
-	background-repeat: no-repeat;
-}
-
-#status4evar-download-button #status4evar-download-icon
-{
-	background: -moz-image-rect(url("chrome://browser/skin/Toolbar.png"), 0, 198, 18, 180) center no-repeat;
-	min-width: 18px;
-	min-height: 18px;
-}
-
diff --git a/chrome/skin/gnomestripe/legacy.css b/chrome/skin/gnomestripe/legacy.css
deleted file mode 100644
index bca240c..0000000
--- a/chrome/skin/gnomestripe/legacy.css
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * ***** BEGIN LICENSE BLOCK *****
- * 
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- * 
- * Copyright (C) 2014 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
- * 
- * ***** END LICENSE BLOCK *****
-*/
-
- at namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-
-#status4evar-download-button #status4evar-download-icon
-{
-	background: -moz-image-rect(url("chrome://browser/skin/Toolbar.png"), 0, 24, 24, 0) center no-repeat;
-	min-width: 24px;
-	min-height: 24px;
-}
-
-toolbar[iconsize="small"] #status4evar-download-button #status4evar-download-icon
-{
-	background: -moz-image-rect(url("chrome://browser/skin/Toolbar-small.png"), 0, 16, 16, 0) center no-repeat;
-	min-width: 16px;
-	min-height: 16px;
-}
-
-toolbar[iconsize="small"] > #status4evar-download-button[attention] #status4evar-download-icon {
-	background-image: url("chrome://browser/skin/downloads/download-glow-small.png");
-}
-
diff --git a/chrome/skin/gnomestripe/overlay.css b/chrome/skin/gnomestripe/overlay.css
index 1979e92..80d37a7 100644
--- a/chrome/skin/gnomestripe/overlay.css
+++ b/chrome/skin/gnomestripe/overlay.css
@@ -5,9 +5,13 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  * 
- * Copyright (C) 2010-2013 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
+ * Copyright (C) 2010-2015 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
  * 
  * ***** END LICENSE BLOCK *****
+ * 
+ * Original Add-on bar styling by Mozilla Foundation.
+ * Adapted from the back-out patch:
+ * https://hg.mozilla.org/mozilla-central/rev/dd59f8effb73
 */
 
 @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
@@ -31,14 +35,14 @@
 	height: 6px;
 }
 
-toolbar[iconsize="small"] #status4evar-download-progress-bar
+#status4evar-download-button[cui-areatype="toolbar"] #status4evar-download-icon
 {
-	height: 4px;
+	-moz-image-region: rect(0px, 198px, 18px, 180px);
 }
 
-#status4evar-download-button[attention] #status4evar-download-icon
+#status4evar-download-button[cui-areatype="toolbar"][attention] #status4evar-download-icon
 {
-	background-image: url("chrome://browser/skin/downloads/download-glow.png");
+	-moz-image-region: rect(18px, 198px, 36px, 180px);
 }
 
 toolbar[mode="icons"] #status4evar-download-button[forcelabel="true"] > label
@@ -79,9 +83,36 @@ splitter.status4evar-status-splitter
 }
 
 /*
- * Add-on bar
+ * Status bar
  */
 
+#status4evar-status-bar
+{
+	box-shadow: 0 1px 0 rgba(0,0,0,.15) inset;
+	padding: 0;
+	min-height: 20px;
+}
+
+#status4evar-status-bar .toolbarbutton-1,
+#status4evar-status-bar .toolbarbutton-1 > .toolbarbutton-menubutton-button
+{
+	-moz-appearance: none;
+	border-style: none;
+	padding: 0 3px;
+}
+
+#status4evar-status-bar .toolbarbutton-1:not([disabled]):hover,
+#status4evar-status-bar .toolbarbutton-1[open],
+#status4evar-status-bar .toolbarbutton-1 > .toolbarbutton-menubutton-button:not([disabled]):hover
+{
+	background-image: linear-gradient(to top, transparent, rgba(0,0,0,.15)),
+	                  linear-gradient(to top, transparent, rgba(0,0,0,.15) 30%),
+	                  linear-gradient(to top, transparent, rgba(0,0,0,.15) 30%);
+	background-position: left, left, right;
+	background-size: auto, 1px 100%, 1px 100%;
+	background-repeat: no-repeat;
+}
+
 #browser-bottombox[s4eboarder="true"] :-moz-any(#status4evar-status-bar, #addon-bar)
 {
 	-moz-appearance: none;
diff --git a/chrome/skin/pinstripe/australis.css b/chrome/skin/pinstripe/australis.css
deleted file mode 100644
index c337fa7..0000000
--- a/chrome/skin/pinstripe/australis.css
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * ***** BEGIN LICENSE BLOCK *****
- * 
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- * 
- * Original code copyright (C) Mozilla Foundation. All Rights Reserved.
- * 
- * ***** END LICENSE BLOCK *****
- * 
- * Original Add-on bar styling by Mozilla Foundation.
- * Adapted from the back-out patch:
- * https://hg.mozilla.org/mozilla-central/rev/dd59f8effb73
-*/
-
- at namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-
-#status4evar-status-bar
-{
-	min-height: 18px;
-}
-
-#status4evar-status-bar:not(:-moz-lwtheme)
-{
-	-moz-appearance: statusbar;
-}
-
-#browser-bottombox > #status4evar-status-bar:last-child
-{
-	padding-right: 16px;
-}
-
-#status4evar-download-button #status4evar-download-icon
-{
-	background: -moz-image-rect(url("chrome://browser/skin/Toolbar.png"), 0, 198, 18, 180) center no-repeat;
-	min-width: 18px;
-	min-height: 18px;
-}
-
-#status4evar-download-button:-moz-lwtheme-brighttext #status4evar-download-icon
-{
-	background: -moz-image-rect(url("chrome://browser/skin/Toolbar-inverted.png"), 0, 198, 18, 180) center no-repeat;
-}
-
- at media (min-resolution: 2dppx)
-{
-	#status4evar-download-button #status4evar-download-icon
-	{
-		background-image: -moz-image-rect(url("chrome://browser/skin/Toolbar@2x.png"), 0, 396, 36, 360);
-	}
-
-	#status4evar-download-button:-moz-lwtheme-brighttext #status4evar-download-icon
-	{
-		background-image: -moz-image-rect(url("chrome://browser/skin/Toolbar-inverted@2x.png"), 0, 396, 36, 360);
-	}
-
-	#status4evar-download-button[attention] #status4evar-download-icon
-	{
-		background-image: url("chrome://browser/skin/downloads/download-glow@2x.png");
-	}
-}
-
diff --git a/chrome/skin/pinstripe/legacy.css b/chrome/skin/pinstripe/legacy.css
deleted file mode 100644
index be1f49f..0000000
--- a/chrome/skin/pinstripe/legacy.css
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * ***** BEGIN LICENSE BLOCK *****
- * 
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- * 
- * Copyright (C) 2014 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
- * 
- * ***** END LICENSE BLOCK *****
-*/
-
- at namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-
-#status-bar
-{
-	padding-right: 0px;
-}
-
-#browser-bottombox > #addon-bar:last-child
-{
-	padding-right: 16px;
-}
-
-#status4evar-download-button #status4evar-download-icon
-{
-	background: -moz-image-rect(url("chrome://browser/skin/Toolbar.png"), 0, 140, 20, 120) center no-repeat;
-	min-width: 20px;
-	min-height: 20px;
-}
-
- at media (min-resolution: 2dppx)
-{
-	#status4evar-download-button #status4evar-download-icon
-	{
-		background-image: -moz-image-rect(url("chrome://browser/skin/Toolbar@2x.png"), 0, 280, 40, 240);
-		background-size: 20px;
-	}
-
-	#status4evar-download-button[attention] #status4evar-download-icon
-	{
-		background-image: url("chrome://browser/skin/downloads/download-glow@2x.png");
-	}
-}
-
diff --git a/chrome/skin/pinstripe/overlay.css b/chrome/skin/pinstripe/overlay.css
index 180d3aa..d1e9824 100644
--- a/chrome/skin/pinstripe/overlay.css
+++ b/chrome/skin/pinstripe/overlay.css
@@ -5,9 +5,13 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  * 
- * Copyright (C) 2010-2013 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
+ * Copyright (C) 2010-2015 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
  * 
  * ***** END LICENSE BLOCK *****
+ * 
+ * Original Add-on bar styling by Mozilla Foundation.
+ * Adapted from the back-out patch:
+ * https://hg.mozilla.org/mozilla-central/rev/dd59f8effb73
 */
 
 @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
@@ -31,9 +35,44 @@
 	height: 5px;
 }
 
-#status4evar-download-button[attention] #status4evar-download-icon
+#status4evar-download-button[cui-areatype="toolbar"] #status4evar-download-icon
+{
+	-moz-image-region: rect(0px, 198px, 18px, 180px);
+}
+
+#status4evar-download-button[cui-areatype="toolbar"][attention] #status4evar-download-icon
+{
+	-moz-image-region: rect(36px, 198px, 54px, 180px);
+}
+
+ at media (min-resolution: 2dppx)
 {
-	background-image: url("chrome://browser/skin/downloads/download-glow.png");
+	#status4evar-download-icon
+	{
+		list-style-image: url("chrome://browser/skin/menuPanel@2x.png");
+		-moz-image-region: rect(0px, 512px, 64px, 448px);
+	}
+
+	#status4evar-download-button[cui-areatype="menu-panel"][attention] #status4evar-download-icon
+	{
+		list-style-image: url("chrome://browser/skin/downloads/download-glow-menuPanel@2x.png");
+	}
+
+	#status4evar-download-button[cui-areatype="toolbar"] #status4evar-download-icon
+	{
+		list-style-image: url("chrome://browser/skin/Toolbar@2x.png");
+		-moz-image-region: rect(0px, 396px, 36px, 360px);
+	}
+
+	toolbar[brighttext] #status4evar-download-button[cui-areatype="toolbar"] #status4evar-download-icon
+	{
+		list-style-image: url("chrome://browser/skin/Toolbar-inverted@2x.png");
+	}
+
+	#status4evar-download-button[cui-areatype="toolbar"][attention] #status4evar-download-icon
+	{
+		-moz-image-region: rect(72px, 396px, 108px, 360px);
+	}
 }
 
 toolbar[mode="icons"] #status4evar-download-button[forcelabel="true"] > label
@@ -85,3 +124,22 @@ splitter.status4evar-status-splitter
 	display: none;
 }
 
+/*
+ * Status Bar
+ */
+
+#status4evar-status-bar
+{
+	min-height: 18px;
+}
+
+#status4evar-status-bar:not(:-moz-lwtheme)
+{
+	-moz-appearance: statusbar;
+}
+
+#browser-bottombox > #status4evar-status-bar:last-child
+{
+	padding-right: 16px;
+}
+
diff --git a/chrome/skin/winstripe/australis.css b/chrome/skin/winstripe/australis.css
deleted file mode 100644
index 0007f51..0000000
--- a/chrome/skin/winstripe/australis.css
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * ***** BEGIN LICENSE BLOCK *****
- * 
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- * 
- * Original code copyright (C) Mozilla Foundation. All Rights Reserved.
- * 
- * ***** END LICENSE BLOCK *****
- * 
- * Original Add-on bar styling by Mozilla Foundation.
- * Adapted from the back-out patch:
- * https://hg.mozilla.org/mozilla-central/rev/dd59f8effb73
-*/
-
- at namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-
-#status4evar-status-bar
-{
-	-moz-appearance: none;
-	min-height: 20px;
-	border-top-style: none;
-	border-bottom-style: none;
-	padding-top: 1px;
-	background-image: linear-gradient(rgba(0,0,0,.15) 1px, rgba(255,255,255,.15) 1px);
-	background-size: 100% 2px;
-	background-repeat: no-repeat;
-}
-
-#status4evar-status-bar .toolbarbutton-1,
-#status4evar-status-bar .toolbarbutton-1 > .toolbarbutton-menubutton-button
-{
-	-moz-appearance: none;
-	border-style: none;
-	padding: 0 3px;
-}
-
-#status4evar-status-bar .toolbarbutton-1:not([disabled]):hover,
-#status4evar-status-bar .toolbarbutton-1[open],
-#status4evar-status-bar .toolbarbutton-1 > .toolbarbutton-menubutton-button:not([disabled]):hover
-{
-	background-image: linear-gradient(to top, transparent, rgba(0,0,0,.15)),
-	                  linear-gradient(to top, transparent, rgba(0,0,0,.15) 30%),
-	                  linear-gradient(to top, transparent, rgba(0,0,0,.15) 30%);
-	background-position: left, left, right;
-	background-size: auto, 1px 100%, 1px 100%;
-	background-repeat: no-repeat;
-}
-
-#status4evar-download-button #status4evar-download-icon
-{
-	background: -moz-image-rect(url("chrome://browser/skin/Toolbar.png"), 0, 198, 18, 180) center no-repeat;
-}
-
-#status4evar-download-button:-moz-lwtheme-brighttext #status4evar-download-icon
-{
-	background: -moz-image-rect(url("chrome://browser/skin/Toolbar-inverted.png"), 0, 198, 18, 180) center no-repeat;
-}
-
-#status4evar-download-button[attention] #status4evar-download-icon
-{
-	background-image: url("chrome://browser/skin/downloads/download-glow.png");
-}
-
- at media (-moz-windows-theme: aero)
-{
-	@media (-moz-os-version: windows-vista), (-moz-os-version: windows-win7)
-	{
-		#status4evar-download-button[attention] #status4evar-download-icon
-		{
-			background-image: url("chrome://browser/skin/downloads/download-glow-XPVista7.png");
-		}
-	}
-}
-
- at media (not (-moz-windows-theme: aero)), (-moz-os-version: windows-xp)
-{
-	#status4evar-download-button[attention] #status4evar-download-icon
-	{
-		background-image: url("chrome://browser/skin/downloads/download-glow-XPVista7.png");
-	}
-}
-
diff --git a/chrome/skin/winstripe/legacy.css b/chrome/skin/winstripe/legacy.css
deleted file mode 100644
index a9e19b1..0000000
--- a/chrome/skin/winstripe/legacy.css
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * ***** BEGIN LICENSE BLOCK *****
- * 
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- * 
- * Copyright (C) 2014 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
- * 
- * ***** END LICENSE BLOCK *****
-*/
-
- at namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-
-#status4evar-download-button #status4evar-download-icon
-{
-	background: -moz-image-rect(url("chrome://browser/skin/Toolbar.png"), 0, 108, 18, 90) center no-repeat;
-}
-
-#status4evar-download-button:-moz-lwtheme-brighttext #status4evar-download-icon
-{
-	background: -moz-image-rect(url("chrome://browser/skin/Toolbar-inverted.png"), 0, 108, 18, 90) center no-repeat;
-}
-
-#status4evar-download-button[attention] #status4evar-download-icon
-{
-	background-image: url("chrome://browser/skin/downloads/download-glow.png");
-}
diff --git a/chrome/skin/winstripe/overlay.css b/chrome/skin/winstripe/overlay.css
index 5a26e1b..a027456 100644
--- a/chrome/skin/winstripe/overlay.css
+++ b/chrome/skin/winstripe/overlay.css
@@ -5,9 +5,13 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  * 
- * Copyright (C) 2010-2013 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
+ * Copyright (C) 2010-2015 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
  * 
  * ***** END LICENSE BLOCK *****
+ * 
+ * Original Add-on bar styling by Mozilla Foundation.
+ * Adapted from the back-out patch:
+ * https://hg.mozilla.org/mozilla-central/rev/dd59f8effb73
 */
 
 @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
@@ -31,10 +35,22 @@
 	height: 4px;
 }
 
-#status4evar-download-button #status4evar-download-icon
+#status4evar-download-button[cui-areatype="toolbar"] #status4evar-download-icon
 {
-	min-width: 18px;
-	min-height: 18px;
+	-moz-image-region: rect(0px, 198px, 18px, 180px);
+}
+
+#status4evar-download-button[cui-areatype="toolbar"][attention] #status4evar-download-icon
+{
+	-moz-image-region: rect(18px, 198px, 36px, 180px);
+}
+
+ at media (-moz-os-version: windows-xp), (-moz-os-version: windows-vista), (-moz-os-version: windows-win7)
+{
+	#status4evar-download-button[cui-areatype="menu-panel"][attention] #status4evar-download-icon
+	{
+		list-style-image: url("chrome://browser/skin/downloads/download-glow-menuPanel-XPVista7.png");
+	}
 }
 
 toolbar[mode="icons"] #status4evar-download-button[forcelabel="true"] > label
@@ -65,6 +81,38 @@ splitter.status4evar-status-splitter
  * Status bar
  */
 
+#status4evar-status-bar
+{
+	-moz-appearance: none;
+	min-height: 20px;
+	border-top-style: none;
+	border-bottom-style: none;
+	padding-top: 1px;
+	background-image: linear-gradient(rgba(0,0,0,.15) 1px, rgba(255,255,255,.15) 1px);
+	background-size: 100% 2px;
+	background-repeat: no-repeat;
+}
+
+#status4evar-status-bar .toolbarbutton-1,
+#status4evar-status-bar .toolbarbutton-1 > .toolbarbutton-menubutton-button
+{
+	-moz-appearance: none;
+	border-style: none;
+	padding: 0 3px;
+}
+
+#status4evar-status-bar .toolbarbutton-1:not([disabled]):hover,
+#status4evar-status-bar .toolbarbutton-1[open],
+#status4evar-status-bar .toolbarbutton-1 > .toolbarbutton-menubutton-button:not([disabled]):hover
+{
+	background-image: linear-gradient(to top, transparent, rgba(0,0,0,.15)),
+	                  linear-gradient(to top, transparent, rgba(0,0,0,.15) 30%),
+	                  linear-gradient(to top, transparent, rgba(0,0,0,.15) 30%);
+	background-position: left, left, right;
+	background-size: auto, 1px 100%, 1px 100%;
+	background-repeat: no-repeat;
+}
+
 #browser-bottombox[s4eboarder="true"] :-moz-any(#status4evar-status-bar, #addon-bar)
 {
 	-moz-appearance: none;
diff --git a/components/status4evar.js b/components/status4evar.js
index a40b721..d7a5e9e 100644
--- a/components/status4evar.js
+++ b/components/status4evar.js
@@ -5,7 +5,7 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  * 
- * Copyright (C) 2010-2014 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
+ * Copyright (C) 2010-2015 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
  * 
  * ***** END LICENSE BLOCK *****
 */
@@ -20,12 +20,6 @@ const CU = Components.utils;
 CU.import("resource://gre/modules/XPCOMUtils.jsm");
 CU.import("resource://gre/modules/Services.jsm");
 
-let AustralisTools = null;
-if(Services.vc.compare("28.*", Services.appinfo.version) < 0)
-{
-	AustralisTools = CU.import("resource://status4evar/Australis.jsm", {}).AustralisTools;
-}
-
 const CURRENT_MIGRATION = 7;
 
 function Status_4_Evar(){}
@@ -42,7 +36,6 @@ Status_4_Evar.prototype =
 	prefs:          null,
 
 	addonbarBorderStyle:            false,
-	addonbarCloseButton:            false,
 	addonbarLegacyShim:             true,
 	addonbarWindowGripper:          true,
 
@@ -108,31 +101,13 @@ Status_4_Evar.prototype =
 			}
 		},
 
-		"addonbar.closeButton":
-		{
-			update: function()
-			{
-				this.addonbarCloseButton = this.prefs.getBoolPref("addonbar.closeButton");
-			},
-			updateWindow: function(win)
-			{
-				let addonbar_close_button = win.caligon.status4evar.getters.addonbarCloseButton;
-				if(addonbar_close_button)
-				{
-					addonbar_close_button.hidden = !this.addonbarCloseButton;
-				} 
-			}
-		},
-
 		"addonbar.legacyShim":
 		{
 			update: function()
 			{
 				this.addonbarLegacyShim = this.prefs.getBoolPref("addonbar.legacyShim");
-				if(AustralisTools)
-				{
-					AustralisTools.updateLegacyShim(this.addonbarLegacyShim);
-				}
+
+				CU.import("resource://status4evar/Australis.jsm", {}).AustralisTools.updateLegacyShim(this.addonbarLegacyShim);
 			}
 		},
 
@@ -237,9 +212,6 @@ Status_4_Evar.prototype =
 				{
 					this.setBoolElementAttribute(download_button, "forcevisible", this.downloadForce);
 				}
-
-				let download_notify_anchor = win.caligon.status4evar.getters.downloadNotifyAnchor;
-				this.setBoolElementAttribute(download_notify_anchor, "forcevisible", this.downloadForce);
 			}
 		},
 
diff --git a/components/status4evar.xpt b/components/status4evar.xpt
index f37a568..18f48a1 100644
Binary files a/components/status4evar.xpt and b/components/status4evar.xpt differ
diff --git a/defaults/preferences/defaults.js b/defaults/preferences/defaults.js
index c7ecacd..a5495a1 100644
--- a/defaults/preferences/defaults.js
+++ b/defaults/preferences/defaults.js
@@ -11,7 +11,6 @@
 */
 
 pref("status4evar.addonbar.borderStyle", false);
-pref("status4evar.addonbar.closeButton", false);
 pref("status4evar.addonbar.legacyShim", true);
 pref("status4evar.addonbar.windowGripper", true);
 
diff --git a/install.rdf b/install.rdf
index 9839b0e..a023ce7 100644
--- a/install.rdf
+++ b/install.rdf
@@ -6,7 +6,7 @@
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/.
    - 
-   - Copyright (C) 2014 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
+   - Copyright (C) 2015 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
    - 
    - ***** END LICENSE BLOCK ***** -->
 
@@ -18,7 +18,7 @@
 		<em:name>Status-4-Evar</em:name>
 		<em:description>Status widgets and progress indicators for Firefox 4+</em:description>
 		<em:id>status4evar at caligonstudios.com</em:id>
-		<em:version>2014.07.06.05</em:version>
+		<em:version>2015.02.06.23</em:version>
 		<em:creator>Sparky Bluefang</em:creator>
 		<em:type>2</em:type>
 		<em:homepageURL>http://forums.mozillazine.org/viewtopic.php?f=48&t=2001965</em:homepageURL>
@@ -307,8 +307,8 @@
 		<em:targetApplication><!-- Firefox -->
 			<Description>
 				<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
-				<em:minVersion>24.0</em:minVersion>
-				<em:maxVersion>33.0a1</em:maxVersion>
+				<em:minVersion>31.0</em:minVersion>
+				<em:maxVersion>38.0a1</em:maxVersion>
 			</Description>
 		</em:targetApplication>
 
diff --git a/modules/Australis.jsm b/modules/Australis.jsm
index aa0f59c..98b2c0f 100644
--- a/modules/Australis.jsm
+++ b/modules/Australis.jsm
@@ -18,8 +18,11 @@ const CU = Components.utils;
 
 const STATUS_BAR_ID = "status4evar-status-bar";
 const LEGACY_SHIM_ID = "status4evar-legacy-widget";
-const DEFAULT_WIDGETS = ["status4evar-status-widget", "status4evar-download-button", "status4evar-progress-widget"];
-const DEFAULT_POSITIONS = [0, 1, 2];
+const WIDGET_ID_STATUS = "status4evar-status-widget";
+const WIDGET_ID_PROGRESS = "status4evar-progress-widget";
+const WIDGET_ID_DOWNLOAD = "status4evar-download-button";
+
+const DEFAULT_WIDGETS = [WIDGET_ID_STATUS, WIDGET_ID_PROGRESS, WIDGET_ID_DOWNLOAD];
 
 CU.import("resource:///modules/CustomizableUI.jsm");
 CU.import("resource://gre/modules/Services.jsm");
@@ -48,12 +51,12 @@ let AustralisTools = {
 			if(!placement || placement.area === CustomizableUI.AREA_NAVBAR || placement.area === STATUS_BAR_ID)
 			{
 				Services.console.logStringMessage("S4E Australis migration - moving widget: " + id + " [" + CustomizableUI.isWidgetRemovable(id) + "]");
-				CustomizableUI.addWidgetToArea(id, STATUS_BAR_ID, DEFAULT_POSITIONS[index]);
+				CustomizableUI.addWidgetToArea(id, STATUS_BAR_ID, index);
 			}
 			else if(id === DEFAULT_WIDGETS[0])
 			{
 				Services.console.logStringMessage("S4E Australis migration - adding spring");
-				CustomizableUI.addWidgetToArea("spring", STATUS_BAR_ID, DEFAULT_POSITIONS[index]);
+				CustomizableUI.addWidgetToArea("spring", STATUS_BAR_ID, index);
 			}
 		});
 
@@ -130,6 +133,23 @@ let AustralisTools = {
 		}
 
 		CustomizableUI.destroyWidget(LEGACY_SHIM_ID);
+	},
+
+	get TYPE_MENU_PANEL() CustomizableUI.TYPE_MENU_PANEL,
+	get TYPE_TOOLBAR() CustomizableUI.TYPE_TOOLBAR,
+	get WIDGET_ID_STATUS() WIDGET_ID_STATUS,
+	get WIDGET_ID_PROGRESS() WIDGET_ID_PROGRESS,
+	get WIDGET_ID_DOWNLOAD() WIDGET_ID_DOWNLOAD,
+
+	areaForWidget: function(widgetId)
+	{
+		let placement = CustomizableUI.getPlacementOfWidget(widgetId);
+		if(placement)
+		{
+			return CustomizableUI.getAreaType(placement.area);
+		}
+
+		return null;
 	}
 }
 
@@ -174,7 +194,7 @@ let statusBarHandler = {
 			let springId = this.getSpringId(aArea);
 			if(springId)
 			{
-				CustomizableUI.removeWidgetFromArea(springId, STATUS_BAR_ID, DEFAULT_POSITIONS[0]);
+				CustomizableUI.removeWidgetFromArea(springId, STATUS_BAR_ID, 0);
 			}
 		}
 
@@ -188,7 +208,7 @@ let statusBarHandler = {
 	{
 		if(aArea === STATUS_BAR_ID && aWidgetId === DEFAULT_WIDGETS[0])
 		{
-			CustomizableUI.addWidgetToArea("spring", STATUS_BAR_ID, DEFAULT_POSITIONS[0]);
+			CustomizableUI.addWidgetToArea("spring", STATUS_BAR_ID, 0);
 		}
 
 		if(!this.customizing && DEFAULT_WIDGETS.indexOf(aWidgetId))
diff --git a/modules/DownloadService.jsm b/modules/DownloadService.jsm
new file mode 100644
index 0000000..d2f1983
--- /dev/null
+++ b/modules/DownloadService.jsm
@@ -0,0 +1,318 @@
+/*
+ * ***** BEGIN LICENSE BLOCK *****
+ * 
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ * 
+ * Copyright (C) 2010-2015 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
+ * 
+ * ***** END LICENSE BLOCK *****
+ * 
+ * Download listener code based on Mozilla Foundation code:
+ * https://hg.mozilla.org/mozilla-central/file/eec9a82ad740/browser/base/content/browser.js#l7297
+*/
+
+"use strict";
+
+const EXPORTED_SYMBOLS = ["S4EDownloadService"];
+
+const CI = Components.interfaces;
+const CU = Components.utils;
+
+CU.import("resource://gre/modules/Downloads.jsm")
+
+function S4EDownloadServiceImpl()
+{
+	this._listeners = new Set();
+	this._activePublic = new JSTransferListener(this, Downloads.getList(Downloads.PUBLIC), false);
+	this._activePrivate = new JSTransferListener(this, Downloads.getList(Downloads.PRIVATE), true);
+}
+
+S4EDownloadServiceImpl.prototype =
+{
+	_activePublic:        null,
+	_activePrivate:       null,
+	_listening:           false,
+	_listeners:           null,
+
+	start: function()
+	{
+		if(this._listening)
+		{
+			return;
+		}
+
+		this._activePublic.start();
+		this._activePrivate.start();
+		this._listening = true;
+	},
+
+	stop: function()
+	{
+		if(!this._listening)
+		{
+			return;
+		}
+
+		this._listening = false;
+		this._activePublic.stop();
+		this._activePrivate.stop();
+	},
+
+	destroy: function()
+	{
+		this.stop();
+		this._listeners.clear();
+		this._activePublic.destroy();
+		this._activePrivate.destroy();
+
+		["_activePublic", "_activePrivate", "_listeners"].forEach(function(prop)
+		{
+			delete this[prop];
+		}, this);
+	},
+
+	addListener: function(listener)
+	{
+		this._listeners.add(listener);
+		this.start();
+	},
+
+	removeListener: function(listener)
+	{
+		this._listeners.delete(listener);
+		if(!this._listeners.size)
+		{
+			this.stop();
+		}
+	},
+
+	updateState: function(event)
+	{
+		for(let listener of this._listeners.values())
+		{
+			listener.updateState(event);
+		}
+	},
+};
+
+function JSTransferListener(downloadService, listPromise, isPrivate)
+{
+	this._downloadService = downloadService;
+	this._isPrivate = isPrivate;
+	this._downloads = new Map();
+
+	listPromise.then(this.initList.bind(this)).then(null, CU.reportError);
+}
+
+JSTransferListener.prototype =
+{
+	_downloadService: null,
+	_list:            null,
+	_downloads:       null,
+	_isPrivate:       false,
+	_wantsStart:      false,
+	_lastEvent:       null,
+
+	initList: function(list)
+	{
+		this._list = list;
+		if(this._wantsStart) {
+			this.start();
+		}
+	},
+
+	initDownloads: function(downloads)
+	{
+		downloads.forEach(function(download)
+		{
+			this.onDownloadAdded(download);
+		}, this);
+
+		this.updateState(false);
+	},
+
+	destroy: function()
+	{
+		this._downloads.clear();
+
+		["_downloadService", "_list", "_downloads", "_lastEvent"].forEach(function(prop)
+		{
+			delete this[prop];
+		}, this);
+	},
+
+	start: function()
+	{
+		if(!this._list)
+		{
+			this._wantsStart = true;
+			return;
+		}
+
+		this._list.addView(this);
+		this._list.getAll().then(this.initDownloads.bind(this)).then(null, CU.reportError);
+	},
+
+	stop: function()
+	{
+		if(!this._list)
+		{
+			this._wantsStart = false;
+			return;
+		}
+
+		this._list.removeView(this);
+		this._downloads.clear();
+	},
+
+	convertToState: function(dl)
+	{
+		if(dl.succeeded)
+		{
+			return CI.nsIDownloadManager.DOWNLOAD_FINISHED;
+		}
+		if(dl.error && dl.error.becauseBlockedByParentalControls)
+		{
+			return CI.nsIDownloadManager.DOWNLOAD_BLOCKED_PARENTAL;
+		}
+		if(dl.error)
+		{
+			return CI.nsIDownloadManager.DOWNLOAD_FAILED;
+		}
+		if(dl.canceled && dl.hasPartialData)
+		{
+			return CI.nsIDownloadManager.DOWNLOAD_PAUSED;
+		}
+		if(dl.canceled)
+		{
+			return CI.nsIDownloadManager.DOWNLOAD_CANCELED;
+		}
+		if(dl.stopped)
+		{
+			return CI.nsIDownloadManager.DOWNLOAD_NOTSTARTED;
+		}
+		return CI.nsIDownloadManager.DOWNLOAD_DOWNLOADING;
+	},
+
+	onDownloadAdded: function(aDownload)
+	{
+		let dl = this._downloads.get(aDownload);
+		if(!dl)
+		{
+			dl = {};
+			this._downloads.set(aDownload, dl);
+		}
+
+		dl.state = this.convertToState(aDownload);
+		dl.size = aDownload.totalBytes;
+		dl.speed = aDownload.speed;
+		dl.transferred = aDownload.currentBytes;
+	},
+
+	onDownloadChanged: function(aDownload)
+	{
+		this.onDownloadAdded(aDownload);
+		this.updateState(aDownload.succeeded);
+	},
+
+	updateState: function(lastFinished)
+	{
+		let numActive = 0;
+		let numPaused = 0;
+		let activeTotalSize = 0;
+		let activeTransferred = 0;
+		let activeMaxProgress = -Infinity;
+		let activeMinProgress = Infinity;
+		let pausedTotalSize = 0;
+		let pausedTransferred = 0;
+		let pausedMaxProgress = -Infinity;
+		let pausedMinProgress = Infinity;
+		let maxTime = -Infinity;
+
+		for(let dl of this._downloads.values())
+		{
+			if(dl.state == CI.nsIDownloadManager.DOWNLOAD_DOWNLOADING)
+			{
+				numActive++;
+				if(dl.size > 0)
+				{
+					if(dl.speed > 0)
+					{
+						maxTime = Math.max(maxTime, (dl.size - dl.transferred) / dl.speed);
+					}
+
+					activeTotalSize += dl.size;
+					activeTransferred += dl.transferred;
+
+					let currentProgress = ((dl.transferred * 100) / dl.size);
+					activeMaxProgress = Math.max(activeMaxProgress, currentProgress);
+					activeMinProgress = Math.min(activeMinProgress, currentProgress);
+				}
+			}
+			else if(dl.state == CI.nsIDownloadManager.DOWNLOAD_PAUSED)
+			{
+				numPaused++;
+				if(dl.size > 0)
+				{
+					pausedTotalSize += dl.size;
+					pausedTransferred += dl.transferred;
+
+					let currentProgress = ((dl.transferred * 100) / dl.size);
+					pausedMaxProgress = Math.max(pausedMaxProgress, currentProgress);
+					pausedMinProgress = Math.min(pausedMinProgress, currentProgress);
+				}
+			}
+		}
+
+		if((numActive + numPaused) == 0)
+		{
+			this.fireEvent({
+				private:  this._isPrivate,
+				notify:   lastFinished,
+				active:   false
+			});
+			return;
+		}
+
+		let dlPaused      = (numActive == 0);
+		let dlTotalSize   = ((dlPaused) ? pausedTotalSize   : activeTotalSize);
+		let dlTransferred = ((dlPaused) ? pausedTransferred : activeTransferred);
+		let dlMaxProgress = ((dlPaused) ? pausedMaxProgress : activeMaxProgress);
+		let dlMinProgress = ((dlPaused) ? pausedMinProgress : activeMinProgress);
+
+		this.fireEvent({
+			private:     this._isPrivate,
+			notify:      lastFinished,
+			active:      true,
+			paused:      dlPaused,
+			count:       ((dlPaused) ? numPaused : numActive),
+			time:        ((dlPaused) ? -1 : maxTime),
+			totalSize:   dlTotalSize,
+			totalTrx:    dlTransferred,
+			progressAvg: ((dlTotalSize == 0) ? 100 : ((dlTransferred * 100) / dlTotalSize)),
+			progressMax: ((dlTotalSize == 0) ? 100 : dlMaxProgress),
+			progressMin: ((dlTotalSize == 0) ? 100 : dlMinProgress)
+		});
+	},
+
+	onDownloadRemoved: function(aDownload)
+	{
+		this._downloads.delete(aDownload);
+	},
+
+	fireEvent: function(event)
+	{
+		this._lastEvent = event;
+		this._downloadService.updateState(event);
+	},
+
+	get lastEvent()
+	{
+		return this._lastEvent;
+	}
+};
+
+const S4EDownloadService = new S4EDownloadServiceImpl();
+
diff --git a/modules/DownloadUI.jsm b/modules/DownloadUI.jsm
new file mode 100644
index 0000000..62b0484
--- /dev/null
+++ b/modules/DownloadUI.jsm
@@ -0,0 +1,534 @@
+/*
+ * ***** BEGIN LICENSE BLOCK *****
+ * 
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ * 
+ * Original code copyright (C) Mozilla Foundation. All Rights Reserved.
+ * Original code copyright (C) 2013 Gijs Kruitbosch <gijskruitbosch at gmail.com>. All Rights Reserved.
+ * Copyright (C) 2010-2015 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
+ * 
+ * ***** END LICENSE BLOCK *****
+ * 
+ * Download listener code based on Mozilla Foundation code:
+ * https://hg.mozilla.org/mozilla-central/file/eec9a82ad740/browser/base/content/browser.js#l7297
+ * 
+ * Original download notification code by Gijs Kruitbosch.
+ * Adapted from the check-in patch:
+ * https://hg.mozilla.org/mozilla-central/rev/8a1d8044a4c8
+*/
+
+"use strict";
+
+const EXPORTED_SYMBOLS = ["S4EDownloadUI"];
+
+const CC = Components.classes;
+const CI = Components.interfaces;
+const CU = Components.utils;
+
+CU.import("resource://status4evar/DownloadService.jsm");
+CU.import("resource://status4evar/Australis.jsm");
+
+CU.import("resource://gre/modules/Services.jsm");
+CU.import("resource://gre/modules/PluralForm.jsm");
+CU.import("resource://gre/modules/DownloadUtils.jsm");
+CU.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
+CU.import("resource://gre/modules/XPCOMUtils.jsm");
+
+function S4EDownloadUI(window, gBrowser, service, getters)
+{
+	this._window = window;
+	this._gBrowser = gBrowser;
+	this._service = service;
+	this._getters = getters;
+
+	this._statePublic = this._statePrivate =
+	{
+		active: false,
+		notify: false
+	};
+}
+
+S4EDownloadUI.prototype =
+{
+	_window:              null,
+	_gBrowser:            null,
+	_service:             null,
+	_getters:             null,
+
+	_listening:           false,
+
+	_binding:             false,
+	_customizing:         false,
+
+	_statePublic:         null,
+	_statePrivate:        null,
+
+	_dlNotifyTimer:       0,
+	_dlNotifyGlowTimer:   0,
+
+	init: function()
+	{
+		if(!AustralisTools.areaForWidget(AustralisTools.WIDGET_ID_DOWNLOAD))
+		{
+			this.uninit();
+			return;
+		}
+
+		if(this._listening)
+		{
+			return;
+		}
+
+		S4EDownloadService.addListener(this);
+		this._listening = true;
+
+		this.updateBinding();
+		this.updateButton();
+	},
+
+	uninit: function()
+	{
+		if(!this._listening)
+		{
+			return;
+		}
+
+		this._listening = false;
+		S4EDownloadService.removeListener(this);
+
+		this.releaseBinding();
+	},
+
+	destroy: function()
+	{
+		this.uninit();
+
+		["_window", "_gBrowser", "_service", "_getters", "_statePublic", "_statePrivate"].forEach(function(prop)
+		{
+			delete this[prop];
+		}, this);
+	},
+
+	updateBinding: function()
+	{
+		if(!this._listening)
+		{
+			this.releaseBinding();
+			return;
+		}
+
+		switch(this.downloadButtonAction)
+		{
+			case 1: // Default
+				this.attachBinding();
+				break;
+			default:
+				this.releaseBinding();
+				break;
+		}
+	},
+
+	attachBinding: function()
+	{
+		if(this._binding)
+		{
+			return;
+		}
+
+		let db = this._window.DownloadsButton;
+
+		db._getAnchorS4EBackup = db.getAnchor;
+		db.getAnchor = this.getAnchor.bind(this);
+
+		db._releaseAnchorS4EBackup = db.releaseAnchor;
+		db.releaseAnchor = function() {};
+
+		this._binding = true;
+	},
+
+	releaseBinding: function()
+	{
+		if(!this._binding)
+		{
+			return;
+		}
+
+		let db = this._window.DownloadsButton;
+
+		db.getAnchor = db._getAnchorS4EBackup;
+		db.releaseAnchor = db._releaseAnchorS4EBackup;
+
+		this._binding = false;
+	},
+
+	customizing: function(val)
+	{
+		this._customizing = val;
+	},
+
+	get notifyAnchor()
+	{
+		let area = AustralisTools.areaForWidget(AustralisTools.WIDGET_ID_DOWNLOAD);
+
+		if(area === AustralisTools.TYPE_MENU_PANEL)
+		{
+			return this._getters.menuButton;
+		}
+
+		if(area === AustralisTools.TYPE_TOOLBAR)
+		{
+			let download_button = this._getters.downloadButton;
+			if(download_button.hasAttribute("cui-anchorid"))
+			{
+				return this._getters.lazy(download_button.getAttribute("cui-anchorid"));
+			}
+
+			return this._getters.downloadButtonAnchor;
+		}
+
+		return null;
+	},
+
+	get downloadButton()
+	{
+		let area = AustralisTools.areaForWidget(AustralisTools.WIDGET_ID_DOWNLOAD);
+
+		if(area)
+		{
+			return this._getters.downloadButton;
+		}
+
+		return null;
+	},
+
+	get downloadButtonAction()
+	{
+		let action = this._service.downloadButtonAction;
+		// Firefox Default
+		if(action == 1)
+		{
+			let area = AustralisTools.areaForWidget(AustralisTools.WIDGET_ID_DOWNLOAD);
+			if(area !== AustralisTools.TYPE_TOOLBAR)
+			{
+				// Show tab
+				action = 3;
+			}
+		}
+
+		return action;
+	},
+
+	updateState: function(event)
+	{
+		let state = {}
+		Object.assign(state, event);
+		state.time = state.time || -1;
+
+		if(state.active)
+		{
+			state.lastTime     = (state.private ? this._statePrivate : this._statePublic).time || Infinity;
+			state.progressType = (state.paused ? "paused" : "active") + (state.totalSize == 0 ? "-unknown" : "");
+
+			let dlStatus = this._getters.strings.getString(state.paused ? "pausedDownloads" : "activeDownloads");
+			state.countStr = PluralForm.get(state.count, dlStatus).replace("#1", state.count);
+			[state.timeStr, state.time] = DownloadUtils.getTimeLeft(state.time, state.lastTime);
+		}
+
+		if(state.private)
+		{
+			this._statePrivate = state;
+		}
+		else
+		{
+			this._statePublic = state;
+		}
+
+		if(state.private == this.isPrivateWindow)
+		{
+			this.updateButton(state);
+			if(state.notify)
+			{
+				this.notify();
+			}
+			state.notify = false;
+		}
+	},
+
+	get state()
+	{
+		return this.isPrivateWindow ? this._statePrivate : this._statePublic;
+	},
+
+	updateButton: function(state)
+	{
+		let download_button = this.downloadButton;
+		if(!download_button)
+		{
+			return;
+		}
+
+		state = state || this.state;
+
+		let download_tooltip = this._getters.downloadButtonTooltip;
+		let download_progress = this._getters.downloadButtonProgress;
+		let download_label = this._getters.downloadButtonLabel;
+
+		if(state.notify && !this.isUIShowing)
+		{
+			this.callAttention(download_button);
+		}
+
+		if(!state.active)
+		{
+			let area = AustralisTools.areaForWidget(AustralisTools.WIDGET_ID_DOWNLOAD);
+			if(area === AustralisTools.TYPE_TOOLBAR)
+			{
+				download_button.collapsed = true;
+			}
+			download_label.textContent = download_tooltip.label = this._getters.strings.getString("noDownloads");
+
+			download_progress.collapsed = true;
+			download_progress.value = 0;
+
+			return;
+		}
+
+		switch(this._service.downloadProgress)
+		{
+			case 2:
+				download_progress.value = state.progressMax;
+				break;
+			case 3:
+				download_progress.value = state.progressMin;
+				break;
+			default:
+				download_progress.value = state.progressAvg;
+				break;
+		}
+		download_progress.setAttribute("pmType", state.progressType);
+		download_progress.collapsed = (this._service.downloadProgress == 0);
+
+		download_label.textContent = this.buildString(this._service.downloadLabel, state.paused, state.countStr, state.timeStr);
+		download_tooltip.label = this.buildString(this._service.downloadTooltip, state.paused, state.countStr, state.timeStr);
+
+		download_button.collapsed = false;
+	},
+
+	callAttention: function(download_button)
+	{
+		if(this._dlNotifyGlowTimer != 0)
+		{
+			this._window.clearTimeout(this._dlNotifyGlowTimer);
+			this._dlNotifyGlowTimer = 0;
+		}
+
+		download_button.setAttribute("attention", "true");
+
+		if(this._service.downloadNotifyTimeout)
+		{
+			this._dlNotifyGlowTimer = this._window.setTimeout(function(self, button)
+			{
+				self._dlNotifyGlowTimer = 0;
+				button.removeAttribute("attention");
+			}, this._service.downloadNotifyTimeout, this, download_button);
+		}
+	},
+
+	clearAttention: function(download_button)
+	{
+		if(this._dlNotifyGlowTimer != 0)
+		{
+			this._window.clearTimeout(this._dlNotifyGlowTimer);
+			this._dlNotifyGlowTimer = 0;
+		}
+
+		download_button.removeAttribute("attention");
+	},
+
+	notify: function()
+	{
+		let area = AustralisTools.areaForWidget(AustralisTools.WIDGET_ID_DOWNLOAD);
+		let button_anchor = this.notifyAnchor;
+		if(!button_anchor || (area === AustralisTools.TYPE_TOOLBAR && !this._service.downloadForce))
+		{
+			return;
+		}
+
+		if(this._dlNotifyTimer == 0 && this._service.downloadNotifyAnimate)
+		{
+			let download_notify_anchor = this._getters.downloadNotifyAnchor;
+			if(!download_notify_anchor.style.transform)
+			{
+				let bAnchorRect = button_anchor.getBoundingClientRect();
+				let nAnchorRect = download_notify_anchor.getBoundingClientRect();
+
+				let translateX = bAnchorRect.left - nAnchorRect.left;
+				translateX += .5 * (bAnchorRect.width  - nAnchorRect.width);
+
+				let translateY = bAnchorRect.top  - nAnchorRect.top;
+				translateY += .5 * (bAnchorRect.height - nAnchorRect.height);
+
+				download_notify_anchor.style.transform = "translate(" +  translateX + "px, " + translateY + "px)";
+			}
+
+			download_notify_anchor.setAttribute("notification", "finish");
+			this._dlNotifyTimer = this._window.setTimeout(function(self, anchor)
+			{
+				self._dlNotifyTimer = 0;
+				anchor.removeAttribute("notification");
+				anchor.style.transform = "";
+			}, 1000, this, download_notify_anchor);
+		}
+	},
+
+	clearFinished: function()
+	{
+		let download_button = this.downloadButton;
+		if(download_button)
+		{
+			this.clearAttention(download_button);
+		}
+	},
+
+	getAnchor: function(aCallback)
+	{
+		if(this._customizing)
+		{
+			aCallback(null);
+			return;
+		}
+
+		aCallback(this._getters.downloadButtonAnchor);
+	},
+
+	openUI: function(aEvent)
+	{
+		this.clearFinished();
+
+		switch(this.downloadButtonAction)
+		{
+			case 1: // Firefox Default
+				this._window.DownloadsPanel.showPanel();
+				break;
+			case 2: // Show Library
+				this._window.PlacesCommandHook.showPlacesOrganizer("Downloads");
+				break;
+			case 3: // Show Tab
+				let found = this._gBrowser.browsers.some(function(browser, index)
+				{
+					if("about:downloads" == browser.currentURI.spec)
+					{
+						this._gBrowser.selectedTab = this._gBrowser.tabContainer.childNodes[index];
+						return true;
+					}
+				}, this);
+
+				if(!found)
+				{
+					this._window.openUILinkIn("about:downloads", "tab");
+				}
+				break;
+			case 4: // External Command
+				let command = this._service.downloadButtonActionCommand;
+				if(commend)
+				{
+					this._window.goDoCommand(command);
+				}
+				break;
+			default: // Nothing
+				break;
+		}
+
+		aEvent.stopPropagation();
+	},
+
+	get isPrivateWindow()
+	{
+		return PrivateBrowsingUtils.isWindowPrivate(this._window);
+	},
+
+	get isUIShowing()
+	{
+		switch(this.downloadButtonAction)
+		{
+			case 1: // Firefox Default
+				return this._window.DownloadsPanel.isPanelShowing;
+			case 2: // Show Library
+				var organizer = Services.wm.getMostRecentWindow("Places:Organizer");
+				if(organizer)
+				{
+					let selectedNode = organizer.PlacesOrganizer._places.selectedNode;
+					let downloadsItemId = organizer.PlacesUIUtils.leftPaneQueries["Downloads"];
+					return selectedNode && selectedNode.itemId === downloadsItemId;
+				}
+				return false;
+			case 3: // Show tab
+				let currentURI = this._gBrowser.currentURI;
+				return currentURI && currentURI.spec == "about:downloads";
+			default: // Nothing
+				return false;
+		}
+	},
+
+	buildString: function(mode, paused, countStr, timeStr)
+	{
+		switch(mode)
+		{
+			case 0:
+				return countStr;
+			case 1:
+				return paused ? countStr : timeStr;
+			default:
+				let compStr = countStr;
+				if(!paused)
+				{
+					compStr += " (" + timeStr + ")";
+				}
+				return compStr;
+		}
+	}
+};
+
+// Firefox < 34 compatibility
+if(Services.vc.compare(Services.appinfo.version, "34.0") < 0 && !Object.assign)
+{
+	Object.defineProperty(Object, 'assign',
+	{
+		enumerable: false,
+		configurable: true,
+		writable: true,
+
+		value: function(target, firstSource)
+		{
+			'use strict';
+			if(target === undefined || target === null)
+			{
+				throw new TypeError('Cannot convert first argument to object');
+			}
+
+			var to = Object(target);
+			for(var i = 1; i < arguments.length; i++)
+			{
+				var nextSource = arguments[i];
+				if(nextSource === undefined || nextSource === null)
+				{
+					continue;
+				}
+
+				var keysArray = Object.keys(Object(nextSource));
+				for(var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++)
+				{
+					var nextKey = keysArray[nextIndex];
+					var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
+					if(desc !== undefined && desc.enumerable)
+					{
+						to[nextKey] = nextSource[nextKey];
+					}
+				}
+			}
+			return to;
+		}
+	});
+}
diff --git a/modules/Downloads.jsm b/modules/Downloads.jsm
deleted file mode 100644
index 8b387b5..0000000
--- a/modules/Downloads.jsm
+++ /dev/null
@@ -1,834 +0,0 @@
-/*
- * ***** BEGIN LICENSE BLOCK *****
- * 
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- * 
- * Original code copyright (C) Mozilla Foundation. All Rights Reserved.
- * Original code copyright (C) 2013 Gijs Kruitbosch <gijskruitbosch at gmail.com>. All Rights Reserved.
- * Copyright (C) 2010-2014 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
- * 
- * ***** END LICENSE BLOCK *****
- * 
- * Download listener code based on Mozilla Foundation code:
- * https://hg.mozilla.org/mozilla-central/file/eec9a82ad740/browser/base/content/browser.js#l7297
- * 
- * Original download notification code by Gijs Kruitbosch.
- * Adapted from the check-in patch:
- * https://hg.mozilla.org/mozilla-central/rev/8a1d8044a4c8
-*/
-
-"use strict";
-
-const EXPORTED_SYMBOLS = ["S4EDownloadService"];
-
-const CC = Components.classes;
-const CI = Components.interfaces;
-const CU = Components.utils;
-
-CU.import("resource://gre/modules/Services.jsm");
-CU.import("resource://gre/modules/PluralForm.jsm");
-CU.import("resource://gre/modules/DownloadUtils.jsm");
-CU.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
-CU.import("resource://gre/modules/XPCOMUtils.jsm");
-
-function S4EDownloadService(window, gBrowser, service, getters)
-{
-	this._window = window;
-	this._gBrowser = gBrowser;
-	this._service = service;
-	this._getters = getters;
-
-	if(Services.vc.compare("26.0", Services.appinfo.version) <= 0)
-	{
-		this._handler = new JSTransferHandler(this._window, this);
-		Services.console.logStringMessage("S4EDownloadService using JSTransferHandler backend");
-	}
-	else
-	{
-		this._handler = new DownloadManagerHandler(this._window, this);
-		Services.console.logStringMessage("S4EDownloadService using DownloadManagerHandler backend");
-	}
-}
-
-S4EDownloadService.prototype =
-{
-	_window:              null,
-	_gBrowser:            null,
-	_service:             null,
-	_getters:             null,
-
-	_handler:             null,
-	_listening:           false,
-
-	_binding:             false,
-	_customizing:         false,
-
-	_lastTime:            Infinity,
-
-	_dlActive:            false,
-	_dlPaused:            false,
-	_dlFinished:          false,
-
-	_dlCountStr:          null,
-	_dlTimeStr:           null,
-
-	_dlProgressAvg:       0,
-	_dlProgressMax:       0,
-	_dlProgressMin:       0,
-	_dlProgressType:      "active",
-
-	_dlNotifyTimer:       0,
-	_dlNotifyGlowTimer:   0,
-
-	init: function()
-	{
-		if(!this._getters.downloadButton)
-		{
-			this.uninit();
-			return;
-		}
-
-		if(this._listening)
-		{
-			return;
-		}
-
-		this._handler.start();
-		this._listening = true;
-
-		this._lastTime = Infinity;
-
-		this.updateBinding();
-		this.updateStatus();
-	},
-
-	uninit: function()
-	{
-		if(!this._listening)
-		{
-			return;
-		}
-
-		this._listening = false;
-		this._handler.stop();
-
-		this.releaseBinding();
-	},
-
-	destroy: function()
-	{
-		this.uninit();
-		this._handler.destroy();
-
-		["_window", "_gBrowser", "_service", "_getters", "_handler"].forEach(function(prop)
-		{
-			delete this[prop];
-		}, this);
-	},
-
-	updateBinding: function()
-	{
-		if(!this._listening)
-		{
-			this.releaseBinding();
-			return;
-		}
-
-		switch(this._service.downloadButtonAction)
-		{
-			case 1: // Default
-				this.attachBinding();
-				break;
-			default:
-				this.releaseBinding();
-				break;
-		}
-	},
-
-	attachBinding: function()
-	{
-		if(this._binding)
-		{
-			return;
-		}
-
-		let db = this._window.DownloadsButton;
-
-		db._getAnchorS4EBackup = db.getAnchor;
-		db.getAnchor = this.getAnchor.bind(this);
-
-		db._releaseAnchorS4EBackup = db.releaseAnchor;
-		db.releaseAnchor = function() {};
-
-		this._binding = true;
-	},
-
-	releaseBinding: function()
-	{
-		if(!this._binding)
-		{
-			return;
-		}
-
-		let db = this._window.DownloadsButton;
-
-		db.getAnchor = db._getAnchorS4EBackup;
-		db.releaseAnchor = db._releaseAnchorS4EBackup;
-
-		this._binding = false;
-	},
-
-	customizing: function(val)
-	{
-		this._customizing = val;
-	},
-
-	updateStatus: function(lastFinished)
-	{
-		if(!this._getters.downloadButton)
-		{
-			this.uninit();
-			return;
-		}
-
-		let numActive = 0;
-		let numPaused = 0;
-		let activeTotalSize = 0;
-		let activeTransferred = 0;
-		let activeMaxProgress = -Infinity;
-		let activeMinProgress = Infinity;
-		let pausedTotalSize = 0;
-		let pausedTransferred = 0;
-		let pausedMaxProgress = -Infinity;
-		let pausedMinProgress = Infinity;
-		let maxTime = -Infinity;
-
-		let dls = ((this.isPrivateWindow) ? this._handler.activePrivateEntries() : this._handler.activeEntries());
-		for(let dl of dls)
-		{
-			if(dl.state == CI.nsIDownloadManager.DOWNLOAD_DOWNLOADING)
-			{
-				numActive++;
-				if(dl.size > 0)
-				{
-					if(dl.speed > 0)
-					{
-						maxTime = Math.max(maxTime, (dl.size - dl.transferred) / dl.speed);
-					}
-
-					activeTotalSize += dl.size;
-					activeTransferred += dl.transferred;
-
-					let currentProgress = ((dl.transferred * 100) / dl.size);
-					activeMaxProgress = Math.max(activeMaxProgress, currentProgress);
-					activeMinProgress = Math.min(activeMinProgress, currentProgress);
-				}
-			}
-			else if(dl.state == CI.nsIDownloadManager.DOWNLOAD_PAUSED)
-			{
-				numPaused++;
-				if(dl.size > 0)
-				{
-					pausedTotalSize += dl.size;
-					pausedTransferred += dl.transferred;
-
-					let currentProgress = ((dl.transferred * 100) / dl.size);
-					pausedMaxProgress = Math.max(pausedMaxProgress, currentProgress);
-					pausedMinProgress = Math.min(pausedMinProgress, currentProgress);
-				}
-			}
-		}
-
-		if((numActive + numPaused) == 0)
-		{
-			this._dlActive = false;
-			this._dlFinished = lastFinished;
-			this.updateButton();
-			this._lastTime = Infinity;
-			return;
-		}
-
-		let dlPaused =       (numActive == 0);
-		let dlStatus =       ((dlPaused) ? this._getters.strings.getString("pausedDownloads")
-		                                 : this._getters.strings.getString("activeDownloads"));
-		let dlCount =        ((dlPaused) ? numPaused         : numActive);
-		let dlTotalSize =    ((dlPaused) ? pausedTotalSize   : activeTotalSize);
-		let dlTransferred =  ((dlPaused) ? pausedTransferred : activeTransferred);
-		let dlMaxProgress =  ((dlPaused) ? pausedMaxProgress : activeMaxProgress);
-		let dlMinProgress =  ((dlPaused) ? pausedMinProgress : activeMinProgress);
-		let dlProgressType = ((dlPaused) ? "paused"          : "active");
-
-		[this._dlTimeStr, this._lastTime] = DownloadUtils.getTimeLeft(maxTime, this._lastTime);
-		this._dlCountStr =     PluralForm.get(dlCount, dlStatus).replace("#1", dlCount);
-		this._dlProgressAvg =  ((dlTotalSize == 0) ? 100 : ((dlTransferred * 100) / dlTotalSize));
-		this._dlProgressMax =  ((dlTotalSize == 0) ? 100 : dlMaxProgress);
-		this._dlProgressMin =  ((dlTotalSize == 0) ? 100 : dlMinProgress);
-		this._dlProgressType = dlProgressType + ((dlTotalSize == 0) ? "-unknown" : "");
-		this._dlPaused =       dlPaused;
-		this._dlActive =       true;
-		this._dlFinished =     false;
-
-		this.updateButton();
-	},
-
-	updateButton: function()
-	{
-		let download_button = this._getters.downloadButton;
-		let download_tooltip = this._getters.downloadButtonTooltip;
-		let download_progress = this._getters.downloadButtonProgress;
-		let download_label = this._getters.downloadButtonLabel;
-		if(!download_button)
-		{
-			return;
-		}
-
-		if(!this._dlActive)
-		{
-			download_button.collapsed = true;
-			download_label.value = download_tooltip.label = this._getters.strings.getString("noDownloads");
-
-			download_progress.collapsed = true;
-			download_progress.value = 0;
-
-			if(this._dlFinished && this._handler.hasPBAPI && !this.isUIShowing)
-			{
-				this.callAttention(download_button);
-			}
-			return;
-		}
-
-		switch(this._service.downloadProgress)
-		{
-			case 2:
-				download_progress.value = this._dlProgressMax;
-				break;
-			case 3:
-				download_progress.value = this._dlProgressMin;
-				break;
-			default:
-				download_progress.value = this._dlProgressAvg;
-				break;
-		}
-		download_progress.setAttribute("pmType", this._dlProgressType);
-		download_progress.collapsed = (this._service.downloadProgress == 0);
-
-		download_label.value = this.buildString(this._service.downloadLabel);
-		download_tooltip.label = this.buildString(this._service.downloadTooltip);
-
-		this.clearAttention(download_button);
-		download_button.collapsed = false;
-	},
-
-	callAttention: function(download_button)
-	{
-		if(this._dlNotifyGlowTimer != 0)
-		{
-			this._window.clearTimeout(this._dlNotifyGlowTimer);
-			this._dlNotifyGlowTimer = 0;
-		}
-
-		download_button.setAttribute("attention", "true");
-
-		if(this._service.downloadNotifyTimeout)
-		{
-			this._dlNotifyGlowTimer = this._window.setTimeout(function(self, button)
-			{
-				self._dlNotifyGlowTimer = 0;
-				button.removeAttribute("attention");
-			}, this._service.downloadNotifyTimeout, this, download_button);
-		}
-	},
-
-	clearAttention: function(download_button)
-	{
-		if(this._dlNotifyGlowTimer != 0)
-		{
-			this._window.clearTimeout(this._dlNotifyGlowTimer);
-			this._dlNotifyGlowTimer = 0;
-		}
-
-		download_button.removeAttribute("attention");
-	},
-
-	notify: function()
-	{
-		if(this._dlNotifyTimer == 0 && this._service.downloadNotifyAnimate)
-		{
-			let download_button_anchor = this._getters.downloadButtonAnchor;
-			let download_notify_anchor = this._getters.downloadNotifyAnchor;
-			if(download_button_anchor)
-			{
-				if(!download_notify_anchor.style.transform)
-				{
-					let bAnchorRect = download_button_anchor.getBoundingClientRect();
-					let nAnchorRect = download_notify_anchor.getBoundingClientRect();
-
-					let translateX = bAnchorRect.left - nAnchorRect.left;
-					translateX += .5 * (bAnchorRect.width  - nAnchorRect.width);
-
-					let translateY = bAnchorRect.top  - nAnchorRect.top;
-					translateY += .5 * (bAnchorRect.height - nAnchorRect.height);
-
-					download_notify_anchor.style.transform = "translate(" +  translateX + "px, " + translateY + "px)";
-				}
-
-				download_notify_anchor.setAttribute("notification", "finish");
-				this._dlNotifyTimer = this._window.setTimeout(function(self, anchor)
-				{
-					self._dlNotifyTimer = 0;
-					anchor.removeAttribute("notification");
-					anchor.style.transform = "";
-				}, 1000, this, download_notify_anchor);
-			}
-		}
-	},
-
-	clearFinished: function()
-	{
-		this._dlFinished = false;
-		let download_button = this._getters.downloadButton;
-		if(download_button)
-		{
-			this.clearAttention(download_button);
-		}
-	},
-
-	getAnchor: function(aCallback)
-	{
-		if(this._customizing)
-		{
-			aCallback(null);
-			return;
-		}
-
-		aCallback(this._getters.downloadButtonAnchor);
-	},
-
-	openUI: function(aEvent)
-	{
-		this.clearFinished();
-
-		switch(this._service.downloadButtonAction)
-		{
-			case 1: // Firefox Default
-				this._handler.openUINative();
-				break;
-			case 2: // Show Library
-				this._window.PlacesCommandHook.showPlacesOrganizer("Downloads");
-				break;
-			case 3: // Show Tab
-				let found = this._gBrowser.browsers.some(function(browser, index)
-				{
-					if("about:downloads" == browser.currentURI.spec)
-					{
-						this._gBrowser.selectedTab = this._gBrowser.tabContainer.childNodes[index];
-						return true;
-					}
-				}, this);
-
-				if(!found)
-				{
-					this._window.openUILinkIn("about:downloads", "tab");
-				}
-				break;
-			case 4: // External Command
-				let command = this._service.downloadButtonActionCommand;
-				if(commend)
-				{
-					this._window.goDoCommand(command);
-				}
-				break;
-			default: // Nothing
-				break;
-		}
-
-		aEvent.stopPropagation();
-	},
-
-	get isPrivateWindow()
-	{
-		return this._handler.hasPBAPI && PrivateBrowsingUtils.isWindowPrivate(this._window);
-	},
-
-	get isUIShowing()
-	{
-		switch(this._service.downloadButtonAction)
-		{
-			case 1: // Firefox Default
-				return this._handler.isUIShowingNative;
-			case 2: // Show Library
-				var organizer = Services.wm.getMostRecentWindow("Places:Organizer");
-				if(organizer)
-				{
-					let selectedNode = organizer.PlacesOrganizer._places.selectedNode;
-					let downloadsItemId = organizer.PlacesUIUtils.leftPaneQueries["Downloads"];
-					return selectedNode && selectedNode.itemId === downloadsItemId;
-				}
-				return false;
-			case 3: // Show tab
-				let currentURI = this._gBrowser.currentURI;
-				return currentURI && currentURI.spec == "about:downloads";
-			default: // Nothing
-				return false;
-		}
-	},
-
-	buildString: function(mode)
-	{
-		switch(mode)
-		{
-			case 0:
-				return this._dlCountStr;
-			case 1:
-				return ((this._dlPaused) ? this._dlCountStr : this._dlTimeStr);
-			default:
-				let compStr = this._dlCountStr;
-				if(!this._dlPaused)
-				{
-					compStr += " (" + this._dlTimeStr + ")";
-				}
-				return compStr;
-		}
-	}
-};
-
-function DownloadManagerHandler(window, downloadService)
-{
-	this._window = window;
-	this._downloadService = downloadService;
-	this._api = CC["@mozilla.org/download-manager;1"].getService(CI.nsIDownloadManager);
-	this._classicUI = Components.classesByID["{7dfdf0d1-aff6-4a34-bad1-d0fe74601642}"].getService(CI.nsIDownloadManagerUI);
-}
-
-DownloadManagerHandler.prototype =
-{
-	_window:          null,
-	_downloadService: null,
-	_api:             null,
-
-	destroy: function()
-	{
-		["_window", "_downloadService", "_api", "_classicUI"].forEach(function(prop)
-		{
-			delete this[prop];
-		}, this);
-	},
-
-	start: function()
-	{
-		if(this.hasPBAPI)
-		{
-			this._api.addPrivacyAwareListener(this);
-		}
-		else
-		{
-			this._api.addListener(this);
-			Services.obs.addObserver(this, "private-browsing", true);
-		}
-	},
-
-	stop: function()
-	{
-		this._api.removeListener(this);
-		if(!this.hasPBAPI)
-		{
-			Services.obs.removeObserver(this, "private-browsing");
-		}
-	},
-
-	get hasPBAPI()
-	{
-		return ('addPrivacyAwareListener' in this._api);
-	},
-
-	openUINative: function()
-	{
-		if(this._window.DownloadsCommon.useToolkitUI)
-		{
-			this._classicUI.show(this._window);
-		}
-		else
-		{
-			this._window.DownloadsPanel.showPanel();
-		}
-	},
-
-	get isUIShowingNative()
-	{
-		if(this._window.DownloadsCommon.useToolkitUI)
-		{
-			return this._classicUI.visible;
-		}
-		else
-		{
-			return this._window.DownloadsPanel.isPanelShowing;
-		}
-	},
-
-	activeEntries: function()
-	{
-		return this.generate(this._api.activeDownloads);
-	},
-
-	activePrivateEntries: function()
-	{
-		return this.generate(this._api.activePrivateDownloads);
-	},
-
-	generate: function(dls)
-	{
-		while(dls.hasMoreElements())
-		{
-			let dl = dls.getNext();
-			yield { state: dl.state, size: dl.size, speed: dl.speed, transferred: dl.amountTransferred };
-		}
-	},
-
-	onProgressChange: function(aWebProgress, aRequest, aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress, aMaxTotalProgress, aDownload)
-	{
-		if(this.hasPBAPI && (aDownload.isPrivate != this._downloadService.isPrivateWindow))
-		{
-			return;
-		}
-
-		this._downloadService.updateStatus(aDownload.state == CI.nsIDownloadManager.DOWNLOAD_FINISHED);
-	},
-
-	onDownloadStateChange: function(aState, aDownload)
-	{
-		if(this.hasPBAPI && (aDownload.isPrivate != this._downloadService.isPrivateWindow))
-		{
-			return;
-		}
-
-		this._downloadService.updateStatus(aDownload.state == CI.nsIDownloadManager.DOWNLOAD_FINISHED);
-
-		if(aDownload.state == CI.nsIDownloadManager.DOWNLOAD_FINISHED && this.hasPBAPI)
-		{
-			this._downloadService.notify()
-		}
-	},
-
-	onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus, aDownload) {},
-	onSecurityChange: function(aWebProgress, aRequest, aState, aDownload) {},
-
-	observe: function(subject, topic, data)
-	{
-		if(topic == "private-browsing" && (data == "enter" || data == "exit"))
-		{
-			self._downloadService._window.setTimeout(function(self)
-			{
-				self.updateStatus();
-			}, 0, this._downloadService);
-		}
-	},
-
-	QueryInterface: XPCOMUtils.generateQI([ CI.nsIDownloadProgressListener, CI.nsISupportsWeakReference, CI.nsIObserver ])
-};
-
-function JSTransferHandler(window, downloadService)
-{
-	this._window = window;
-
-	let api = CU.import("resource://gre/modules/Downloads.jsm", {}).Downloads;
-
-	this._activePublic = new JSTransferListener(downloadService, api.getList(api.PUBLIC), false);
-	this._activePrivate = new JSTransferListener(downloadService, api.getList(api.PRIVATE), true);
-}
-
-JSTransferHandler.prototype =
-{
-	_window:          null,
-	_activePublic:    null,
-	_activePrivate:   null,
-
-	destroy: function()
-	{
-		this._activePublic.destroy();
-		this._activePrivate.destroy();
-
-		["_window", "_activePublic", "_activePrivate"].forEach(function(prop)
-		{
-			delete this[prop];
-		}, this);
-	},
-
-	start: function()
-	{
-		this._activePublic.start();
-		this._activePrivate.start();
-	},
-
-	stop: function()
-	{
-		this._activePublic.stop();
-		this._activePrivate.stop();
-	},
-
-	get hasPBAPI()
-	{
-		return true;
-	},
-
-	openUINative: function()
-	{
-		this._window.DownloadsPanel.showPanel();
-	},
-
-	get isUIShowingNative()
-	{
-		return this._window.DownloadsPanel.isPanelShowing;
-	},
-
-	activeEntries: function()
-	{
-		return this._activePublic.downloads();
-	},
-
-	activePrivateEntries: function()
-	{
-		return this._activePrivate.downloads();
-	}
-};
-
-function JSTransferListener(downloadService, listPromise, isPrivate)
-{
-	this._downloadService = downloadService;
-	this._isPrivate = isPrivate;
-	this._downloads = new Map();
-
-	listPromise.then(this.initList.bind(this)).then(null, CU.reportError);
-}
-
-JSTransferListener.prototype =
-{
-	_downloadService: null,
-	_list:            null,
-	_downloads:       null,
-	_isPrivate:       false,
-	_wantsStart:      false,
-
-	initList: function(list)
-	{
-		this._list = list;
-		if(this._wantsStart) {
-			this.start();
-		}
-
-		this._list.getAll().then(this.initDownloads.bind(this)).then(null, CU.reportError);
-	},
-
-	initDownloads: function(downloads)
-	{
-		downloads.forEach(function(download)
-		{
-			this.onDownloadAdded(download);
-		}, this);
-	},
-
-	destroy: function()
-	{
-		this._downloads.clear();
-
-		["_downloadService", "_list", "_downloads"].forEach(function(prop)
-		{
-			delete this[prop];
-		}, this);
-	},
-
-	start: function()
-	{
-		if(!this._list)
-		{
-			this._wantsStart = true;
-			return;
-		}
-
-		this._list.addView(this);
-	},
-
-	stop: function()
-	{
-		if(!this._list)
-		{
-			this._wantsStart = false;
-			return;
-		}
-
-		this._list.removeView(this);
-	},
-
-	downloads: function()
-	{
-		return this._downloads.values();
-	},
-
-	convertToState: function(dl)
-	{
-		if(dl.succeeded)
-		{
-			return CI.nsIDownloadManager.DOWNLOAD_FINISHED;
-		}
-		if(dl.error && dl.error.becauseBlockedByParentalControls)
-		{
-			return CI.nsIDownloadManager.DOWNLOAD_BLOCKED_PARENTAL;
-		}
-		if(dl.error)
-		{
-			return CI.nsIDownloadManager.DOWNLOAD_FAILED;
-		}
-		if(dl.canceled && dl.hasPartialData)
-		{
-			return CI.nsIDownloadManager.DOWNLOAD_PAUSED;
-		}
-		if(dl.canceled)
-		{
-			return CI.nsIDownloadManager.DOWNLOAD_CANCELED;
-		}
-		if(dl.stopped)
-		{
-			return CI.nsIDownloadManager.DOWNLOAD_NOTSTARTED;
-		}
-		return CI.nsIDownloadManager.DOWNLOAD_DOWNLOADING;
-	},
-
-	onDownloadAdded: function(aDownload)
-	{
-		let dl = this._downloads.get(aDownload);
-		if(!dl)
-		{
-			dl = {};
-			this._downloads.set(aDownload, dl);
-		}
-
-		dl.state = this.convertToState(aDownload);
-		dl.size = aDownload.totalBytes;
-		dl.speed = aDownload.speed;
-		dl.transferred = aDownload.currentBytes;
-	},
-
-	onDownloadChanged: function(aDownload)
-	{
-		this.onDownloadAdded(aDownload);
-
-		if(this._isPrivate != this._downloadService.isPrivateWindow)
-		{
-			return;
-		}
-
-		this._downloadService.updateStatus(aDownload.succeeded);
-
-		if(aDownload.succeeded)
-		{
-			this._downloadService.notify()
-		}
-	},
-
-	onDownloadRemoved: function(aDownload)
-	{
-		this._downloads.delete(aDownload);
-	}
-};
-
diff --git a/modules/Status4Evar.jsm b/modules/Status4Evar.jsm
index 85aa77c..b4f4aec 100644
--- a/modules/Status4Evar.jsm
+++ b/modules/Status4Evar.jsm
@@ -5,7 +5,7 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  * 
- * Copyright (C) 2010-2014 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
+ * Copyright (C) 2010-2015 Matthew Turnbull <sparky at bluefang-logic.com>. All Rights Reserved.
  * 
  * ***** END LICENSE BLOCK *****
 */
@@ -25,47 +25,42 @@ CU.import("resource://gre/modules/Services.jsm");
 CU.import("resource://gre/modules/XPCOMUtils.jsm");
 CU.import("resource://gre/modules/AddonManager.jsm");
 
+CU.import("resource://status4evar/Australis.jsm");
 CU.import("resource://status4evar/Status.jsm");
 CU.import("resource://status4evar/Progress.jsm");
-CU.import("resource://status4evar/Downloads.jsm");
+CU.import("resource://status4evar/DownloadUI.jsm");
 CU.import("resource://status4evar/Toolbars.jsm");
 
-function Status4Evar(window, gBrowser, toolbox)
+function Status4Evar(window, gBrowser, toolbox, menuPanelUI)
 {
 	this._id = uuidService.generateUUID();
 	this._window = window;
-	this._toolbox = toolbox;
 
 	this.getters = new S4EWindowGetters(this._window);
-	this.toolbars = new S4EToolbars(this._window, gBrowser, this._toolbox, s4e_service, this.getters);
+	this.toolbars = new S4EToolbars(this._window, gBrowser, toolbox, s4e_service, this.getters);
 	this.statusService = new S4EStatusService(this._window, s4e_service, this.getters);
 	this.progressMeter = new S4EProgressService(gBrowser, s4e_service, this.getters, this.statusService);
-	this.downloadStatus = new S4EDownloadService(this._window, gBrowser, s4e_service, this.getters);
+	this.downloadStatus = new S4EDownloadUI(this._window, gBrowser, s4e_service, this.getters);
 	this.sizeModeService = new SizeModeService(this._window, this);
-
-	this._window.addEventListener("unload", this, false);
+	this.menuPanelListener = new MenuPanelListener(menuPanelUI, this);
 }
 
 Status4Evar.prototype =
 {
 	_id: null,
 	_window:  null,
-	_toolbox: null,
 
-	getters:         null,
-	toolbars:        null,
-	statusService:   null,
-	progressMeter:   null,
-	downloadStatus:  null,
-	sizeModeService: null,
+	getters:           null,
+	toolbars:          null,
+	statusService:     null,
+	progressMeter:     null,
+	downloadStatus:    null,
+	sizeModeService:   null,
+	menuPanelListener: null,
 
 	setup: function()
 	{
-		if(Services.vc.compare("28.*", Services.appinfo.version) >= 0)
-		{
-			this._toolbox.addEventListener("beforecustomization", this, false);
-			this._toolbox.addEventListener("aftercustomization", this, false);
-		}
+		this._window.addEventListener("unload", this, false);
 
 		this.toolbars.setup();
 		this.updateWindow();
@@ -81,11 +76,6 @@ Status4Evar.prototype =
 	destroy: function()
 	{
 		this._window.removeEventListener("unload", this, false);
-		if(Services.vc.compare("28.*", Services.appinfo.version) >= 0)
-		{
-			this._toolbox.removeEventListener("aftercustomization", this, false);
-			this._toolbox.removeEventListener("beforecustomization", this, false);
-		}
 
 		this.getters.destroy();
 		this.statusService.destroy();
@@ -93,9 +83,10 @@ Status4Evar.prototype =
 		this.progressMeter.destroy();
 		this.toolbars.destroy();
 		this.sizeModeService.destroy();
+		this.menuPanelListener.destroy();
 
-		["_window", "_toolbox", "getters", "statusService", "downloadStatus",
-		"progressMeter", "toolbars", "sizeModeService"].forEach(function(prop)
+		["_window", "getters", "statusService", "downloadStatus", "progressMeter",
+		"toolbars", "sizeModeService", "menuPanelListener"].forEach(function(prop)
 		{
 			delete this[prop];
 		}, this);
@@ -108,12 +99,6 @@ Status4Evar.prototype =
 			case "unload":
 				this.destroy();
 				break;
-			case "beforecustomization":
-				this.beforeCustomization();
-				break;
-			case "aftercustomization":
-				this.updateWindow();
-				break;
 		}
 	},
 
@@ -131,6 +116,7 @@ Status4Evar.prototype =
 			status_label.value = this.getters.strings.getString("statusText");
 		}
 
+		this.menuPanelListener.uninit();
 		this.downloadStatus.customizing(true);
 	},
 
@@ -144,6 +130,7 @@ Status4Evar.prototype =
 		this.statusService.buildBinding();
 		this.downloadStatus.init();
 		this.downloadStatus.customizing(false);
+		this.menuPanelListener.init();
 		this.toolbars.updateSplitters(true);
 
 		s4e_service.updateWindow(this._window);
@@ -153,6 +140,14 @@ Status4Evar.prototype =
 		// * updateWindowGripper(true)
 	},
 
+	resetDownloadUI: function()
+	{
+		Services.console.logStringMessage("S4E Calling resetDownloadUI: " + this._id);
+
+		this.getters.resetGetters();
+		this.downloadStatus.updateButton();
+	},
+
 	launchOptions: function(currentWindow)
 	{
 		AddonManager.getAddonByID("status4evar at caligonstudios.com", function(aAddon)
@@ -195,8 +190,6 @@ S4EWindowGetters.prototype =
 	_window:    null,
 	_getterMap:
 		[
-			["addonbar",               "addon-bar"],
-			["addonbarCloseButton",    "addonbar-closebutton"],
 			["browserBottomBox",       "browser-bottombox"],
 			["downloadButton",         "status4evar-download-button"],
 			["downloadButtonTooltip",  "status4evar-download-tooltip"],
@@ -204,6 +197,8 @@ S4EWindowGetters.prototype =
 			["downloadButtonLabel",    "status4evar-download-label"],
 			["downloadButtonAnchor",   "status4evar-download-anchor"],
 			["downloadNotifyAnchor",   "status4evar-download-notification-anchor"],
+			["menuButton",             "PanelUI-menu-button"],
+			["menuPanel",              "PanelUI-popup"],
 			["statusBar",              "status4evar-status-bar"],
 			["statusWidget",           "status4evar-status-widget"],
 			["statusWidgetLabel",      "status4evar-status-text"],
@@ -213,6 +208,16 @@ S4EWindowGetters.prototype =
 			["urlbarProgress",         "urlbar-progress-alt"]
 		],
 
+	lazy: function(id)
+	{
+		if(this[id])
+		{
+			return this[id];
+		}
+
+		return this[id] = this._window.document.getElementById(id);
+	},
+
 	resetGetters: function()
 	{
 		let document = this._window.document;
@@ -271,7 +276,7 @@ S4EWindowGetters.prototype =
 			delete this[prop];
 		}, this);
 
-		["urlbar", "statusOverlay", "statusOverlay", "_window"].forEach(function(prop)
+		["urlbar", "statusOverlay", "_window"].forEach(function(prop)
 		{
 			delete this[prop];
 		}, this);
@@ -324,3 +329,61 @@ SizeModeService.prototype =
 	QueryInterface: XPCOMUtils.generateQI([ CI.nsIDOMEventListener ])
 };
 
+function MenuPanelListener(menuPanelUI, s4e)
+{
+	this._menuPanelUI = menuPanelUI;
+	this._s4e = s4e;
+}
+
+MenuPanelListener.prototype =
+{
+	_menuPanelUI: null,
+	_s4e:         null,
+	_listening:   false,
+
+	init: function()
+	{
+		let area = AustralisTools.areaForWidget(AustralisTools.WIDGET_ID_DOWNLOAD);
+		if(this._listening || area !== AustralisTools.TYPE_MENU_PANEL
+		|| ((typeof this._menuPanelUI.isReady === "boolean") ? this._menuPanelUI.isReady : this._menuPanelUI.isReady()))
+		{
+			return;
+		}
+
+		this._s4e.getters.menuPanel.addEventListener("popupshowing", this);
+		this._listening = true;
+	},
+
+	uninit: function()
+	{
+		if(!this._listening)
+		{
+			return;
+		}
+
+		this._s4e.getters.menuPanel.removeEventListener("popupshowing", this);
+		this._listening = false;
+	},
+
+	destroy: function()
+	{
+		this.uninit();
+
+		["_menuPanelUI", "_s4e"].forEach(function(prop)
+		{
+			delete this[prop];
+		}, this);
+	},
+
+	handleEvent: function(aEvent)
+	{
+		switch(aEvent.type)
+		{
+			case "popupshowing":
+				this._s4e.resetDownloadUI();
+				this.uninit();
+				break;
+		}
+	}
+};
+
diff --git a/modules/Toolbars.jsm b/modules/Toolbars.jsm
index cc75a38..a9243ca 100644
--- a/modules/Toolbars.jsm
+++ b/modules/Toolbars.jsm
@@ -22,43 +22,44 @@ CU.import("resource://gre/modules/Services.jsm");
 function S4EToolbars(window, gBrowser, toolbox, service, getters)
 {
 	this._window = window;
+	this._gBrowser = gBrowser;
 	this._toolbox = toolbox;
 	this._service = service;
 	this._getters = getters;
-
-	if(Services.vc.compare("28.*", Services.appinfo.version) < 0)
-	{
-		this._handler = new AustralisS4EToolbars(this._window, gBrowser, this._getters);
-		Services.console.logStringMessage("S4EToolbars using AustralisS4EToolbars backend");
-	}
-	else
-	{
-		this._handler = new ClassicS4EToolbars(this._window, this._toolbox);
-		Services.console.logStringMessage("S4EToolbars using ClassicS4EToolbars backend");
-	}
 }
 
 S4EToolbars.prototype =
 {
-	_window:  null,
-	_toolbox: null,
-	_service: null,
-	_getters: null,
+	_window:   null,
+	_gBrowser: null,
+	_toolbox:  null,
+	_service:  null,
+	_getters:  null,
 
-	_handler: null,
+	__bound_updateWindowResizers: null,
+	__old_updateWindowResizers:   null,
 
 	setup: function()
 	{
 		this.updateSplitters(false);
 		this.updateWindowGripper(false);
-		this._handler.setup(this._service.firstRun, this._service.firstRunAustralis);
+
+		this.__old_updateWindowResizers = this._gBrowser.updateWindowResizers;
+		this.__bound_updateWindowResizers = this.updateWindowResizers.bind(this);
+		this._gBrowser.updateWindowResizers = this.__bound_updateWindowResizers;
+
+		if(!this._service.firstRun && this._service.firstRunAustralis)
+		{
+			CU.import("resource://status4evar/Australis.jsm", {}).AustralisTools.migrate();
+		}
 	},
 
 	destroy: function()
 	{
-		this._handler.destroy();
+		this._gBrowser.updateWindowResizers = this.__old_updateWindowResizers;
 
-		["_window", "_toolbox",  "_service", "_getters", "_handler"].forEach(function(prop)
+		["_window", "_gBrowser", "_toolbox",  "_service", "_getters", "__bound_updateWindowResizers",
+		"__old_updateWindowResizers"].forEach(function(prop)
 		{
 			delete this[prop];
 		}, this);
@@ -123,7 +124,7 @@ S4EToolbars.prototype =
 		let document = this._window.document;
 
 		let gripper = document.getElementById("status4evar-window-gripper");
-		let toolbar = this._getters.statusBar || this._getters.addonbar;
+		let toolbar = this._getters.statusBar;
 
 		if(!action || !toolbar || !this._service.addonbarWindowGripper
 		|| this._window.windowState != CI.nsIDOMChromeWindow.STATE_NORMAL || toolbar.toolbox.customizing)
@@ -135,152 +136,9 @@ S4EToolbars.prototype =
 			return;
 		}
 
-		gripper = this._handler.buildGripper(toolbar, gripper, "status4evar-window-gripper");
+		gripper = this.buildGripper(toolbar, gripper, "status4evar-window-gripper");
 
 		toolbar.appendChild(gripper);
-	}
-};
-
-function ClassicS4EToolbars(window, toolbox)
-{
-	this._window = window;
-	this._toolbox = toolbox;
-}
-
-ClassicS4EToolbars.prototype =
-{
-	_window:  null,
-	_toolbox: null,
-
-	setup: function(firstRun, firstRunAustralis)
-	{
-		let document = this._window.document;
-
-		let addon_bar = document.getElementById("addon-bar");
-		if(addon_bar)
-		{
-			let baseSet = "addonbar-closebutton"
-				    + ",status4evar-status-widget"
-				    + ",status4evar-download-button"
-				    + ",status4evar-progress-widget";
-
-			// Update the defaultSet
-			let defaultSet = baseSet;
-			let defaultSetIgnore = ["addonbar-closebutton", "spring", "status-bar"];
-			addon_bar.getAttribute("defaultset").split(",").forEach(function(item)
-			{
-				if(defaultSetIgnore.indexOf(item) == -1)
-				{
-					defaultSet += "," + item;
-				}
-			});
-			defaultSet += ",status-bar"
-			addon_bar.setAttribute("defaultset", defaultSet);
-
-			// Update the currentSet
-			if(firstRun)
-			{
-				let isCustomizableToolbar = function(aElt)
-				{
-					return aElt.localName == "toolbar" && aElt.getAttribute("customizable") == "true";
-				}
-
-				let isCustomizedAlready = false;
-				let toolbars = Array.filter(this._toolbox.childNodes, isCustomizableToolbar).concat(
-					       Array.filter(this._toolbox.externalToolbars, isCustomizableToolbar));
-				toolbars.forEach(function(toolbar)
-				{
-					if(toolbar.currentSet.indexOf("status4evar") > -1)
-					{
-						isCustomizedAlready = true;
-					}
-				});
-
-				if(!isCustomizedAlready)
-				{
-					let currentSet = baseSet;
-					let currentSetIgnore = ["addonbar-closebutton", "spring"];
-					addon_bar.currentSet.split(",").forEach(function(item)
-					{
-						if(currentSetIgnore.indexOf(item) == -1)
-						{
-							currentSet += "," + item;
-						}
-					});
-					addon_bar.currentSet = currentSet;
-					addon_bar.setAttribute("currentset", currentSet);
-					document.persist(addon_bar.id, "currentset");
-					this._window.setToolbarVisibility(addon_bar, true);
-				}
-			}
-		}
-	},
-
-	destroy: function()
-	{
-		["_window", "_toolbox"].forEach(function(prop)
-		{
-			delete this[prop];
-		}, this);
-	},
-
-	buildGripper: function(toolbar, gripper, id)
-	{
-		if(!gripper)
-		{
-			let document = this._window.document;
-
-			gripper = document.createElement("resizer");
-			gripper.id = id;
-			gripper.dir = "bottomend";
-		}
-
-		return gripper;
-	}
-};
-
-function AustralisS4EToolbars(window, gBrowser, getters)
-{
-	this._window = window;
-	this._gBrowser = gBrowser;
-	this._getters = getters;
-
-	this.__bound_updateWindowResizers = this.updateWindowResizers.bind(this);
-
-	this._api = CU.import("resource://status4evar/Australis.jsm", {}).AustralisTools;
-}
-
-AustralisS4EToolbars.prototype =
-{
-	_window:   null,
-	_gBrowser: null,
-	_getters:  null,
-
-	__bound_updateWindowResizers: null,
-	__old_updateWindowResizers: null,
-
-	_api: null,
-
-	setup: function(firstRun, firstRunAustralis)
-	{
-		this.__old_updateWindowResizers = this._gBrowser.updateWindowResizers;
-		this._gBrowser.updateWindowResizers = this.__bound_updateWindowResizers;
-
-		if(!firstRun && firstRunAustralis)
-		{
-			this._api.migrate();
-		}
-	},
-
-	destroy: function()
-	{
-		this._gBrowser.updateWindowResizers = this.__old_updateWindowResizers;
-
-		["_window", "_gBrowser", "_getters", "_api", "__bound_updateWindowResizers",
-		"__old_updateWindowResizers"].forEach(function(prop)
-		{
-			delete this[prop];
-		}, this);
 	},
 
 	updateWindowResizers: function()

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/status-4-evar.git



More information about the Pkg-mozext-commits mailing list