[Pkg-mozext-commits] [tree-style-tab] 01/04: Imported Upstream version 0.15.20150902901

Ximin Luo infinity0 at debian.org
Mon Oct 12 11:15:25 UTC 2015


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

infinity0 pushed a commit to branch master
in repository tree-style-tab.

commit 404a489a6eb7021dd69030b2b2f99618f167f771
Author: Ximin Luo <infinity0 at debian.org>
Date:   Mon Oct 12 12:57:54 2015 +0200

    Imported Upstream version 0.15.20150902901
---
 META-INF/manifest.mf                               | 838 +++++++++++++++++++++
 META-INF/mozilla.rsa                               | Bin 0 -> 4189 bytes
 META-INF/mozilla.sf                                |   4 +
 content/treestyletab/bookmarksOverlay.js           |  21 +-
 content/treestyletab/bookmarksOverlayEditable.js   |  79 +-
 content/treestyletab/config.js                     |  54 +-
 content/treestyletab/config.xul                    |  49 ++
 content/treestyletab/content-utils-autohide.js     |   2 +-
 content/treestyletab/license.txt                   |   1 +
 content/treestyletab/treestyletab.js               |   8 +-
 content/treestyletab/windowHelper.js               |  66 +-
 content/treestyletab/windowHelperHacks.js          |  45 +-
 defaults/preferences/treestyletab.js               |   2 +
 install.rdf                                        |  19 +-
 locale/cs/treestyletab/treestyletab.dtd            |   4 +
 locale/da-DK/treestyletab/treestyletab.dtd         |   4 +
 locale/de-DE/treestyletab/treestyletab.dtd         |   4 +
 locale/en-US/treestyletab/treestyletab.dtd         |   4 +
 locale/es-ES/treestyletab/treestyletab.dtd         |   4 +
 locale/fr-FR/treestyletab/treestyletab.dtd         |   4 +
 locale/it-IT/treestyletab/treestyletab.dtd         |   4 +
 locale/ja/treestyletab/treestyletab.dtd            |   4 +
 locale/pl/treestyletab/treestyletab.dtd            |   4 +
 locale/ru/treestyletab/treestyletab.dtd            |   4 +
 locale/sv-SE/treestyletab/treestyletab.dtd         |   4 +
 locale/zh-CN/treestyletab/treestyletab.dtd         |   4 +
 locale/zh-TW/treestyletab/treestyletab.dtd         |   4 +
 modules/autoHide.js                                |  58 +-
 modules/base.js                                    |  97 +--
 modules/browser.js                                 | 275 ++++---
 modules/browserUIShowHideObserver.js               |  55 +-
 modules/contentBridge.js                           |  27 +-
 modules/lib/animationManager.js                    |  14 +-
 modules/lib/visuallyselectedTabs.jsm               |  67 ++
 modules/tabbarDNDObserver.js                       |  11 +-
 modules/utils.js                                   |  41 +
 modules/window.js                                  |  21 +-
 skin/classic/treestyletab/Darwin-styled.css        |  10 +-
 skin/classic/treestyletab/Linux-config.css         |  12 +-
 skin/classic/treestyletab/Linux-styled.css         |   4 +-
 skin/classic/treestyletab/WINNT-styled.css         |   8 +-
 skin/classic/treestyletab/base.css                 |   8 +-
 skin/classic/treestyletab/metal/base.css           |   8 +-
 skin/classic/treestyletab/metal/tab.css            |  88 +--
 skin/classic/treestyletab/sidebar/sidebar.css      |  98 +--
 skin/classic/treestyletab/square/Darwin.css        |   4 +-
 skin/classic/treestyletab/square/base.css          |  82 +-
 .../treestyletab/square/disable-closebox-bg.css    |   2 +-
 skin/classic/treestyletab/square/mixed.css         |  26 +-
 skin/classic/treestyletab/square/tab-surface.css   |   4 +-
 skin/classic/treestyletab/square/vertigo.css       |  42 +-
 skin/classic/treestyletab/tmp.css                  |   2 +-
 skin/classic/treestyletab/twisty/twisty.css        |   6 +-
 skin/classic/treestyletab/ui-australis.css         |   6 +
 skin/classic/treestyletab/ui-base.css              | 119 +--
 55 files changed, 1822 insertions(+), 613 deletions(-)

diff --git a/META-INF/manifest.mf b/META-INF/manifest.mf
new file mode 100644
index 0000000..8cd9d38
--- /dev/null
+++ b/META-INF/manifest.mf
@@ -0,0 +1,838 @@
+Manifest-Version: 1.0
+
+Name: install.rdf
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: XmdqNUkTM6QdwsQ5YvcjPw==
+SHA1-Digest: YAn17jTjifr/5uDzOWuTMkgbS24=
+
+Name: chrome.manifest
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: MGoVXpTug24gycfhAQt3yQ==
+SHA1-Digest: 6ajkbSBG0SEgLuGzxZ+ZxXaUhoo=
+
+Name: icon.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: b26p1vuhLB2vYtkJ0EpFZg==
+SHA1-Digest: T9f7i8A7iAz/ElpA361lLRpnbWc=
+
+Name: components/AboutGroup.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: D+AXOvn4yNMXf8GhIKbFrA==
+SHA1-Digest: XLM7zjvCkIi09SoAGOVOZdeQofY=
+
+Name: content/treestyletab/bookmarksOverlay.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: a1UScbFacLdf3bGkQHgZVg==
+SHA1-Digest: akG9SMpPnjkZ2aci1msbsa34ymc=
+
+Name: content/treestyletab/bookmarksOverlay.xul
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: aw8atg7bu14/W1Crfty5/Q==
+SHA1-Digest: W20IiyleTVAkp1ui/2jZZLRJPvU=
+
+Name: content/treestyletab/bookmarksOverlayEditable.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: y+8JAVdPMb4so6IEvtgzTw==
+SHA1-Digest: /V6d117O8c9Qgt7NoCuVRN2bOF0=
+
+Name: content/treestyletab/bookmarksOverlayEditable.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 1OUCn+P21t3cQaO4Zjc3fw==
+SHA1-Digest: LMw7a9VHhMRD5D+gBKwYQBNQjWE=
+
+Name: content/treestyletab/bookmarksOverlayEditable.xul
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: xw2+1EFpMj/QoZzNOit9iw==
+SHA1-Digest: DoFHkl8xDTFaUnc9oQcEXOTSg+A=
+
+Name: content/treestyletab/config.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: CQeMI6LnYw01DCeicW8Zaw==
+SHA1-Digest: ougZFbteusnzVn8djm/xTObCf4Y=
+
+Name: content/treestyletab/config.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: VIC4VobVhIjyRGReHCEikw==
+SHA1-Digest: LSm4XQfNAqRWieDG2oKRk54Rrh8=
+
+Name: content/treestyletab/config.xul
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 5ra/v6hW+mpMAh4cvWiz3Q==
+SHA1-Digest: OUv3S1ilPAxoEsF/3yw6g0Gh9OA=
+
+Name: content/treestyletab/content-utils-autohide.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 5LerXpT+fFUV2k1YOWLOCw==
+SHA1-Digest: UoiQ5kghSuZB2O1NOtmcO82G6ZY=
+
+Name: content/treestyletab/group.xul
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 36AhehtnHOpGrElzTkAIzQ==
+SHA1-Digest: rrjIlOUkUzJsucg+fWIEE+E87n8=
+
+Name: content/treestyletab/hide-embed.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: sm1uHHT3GIl7tIYUz8oS5A==
+SHA1-Digest: dVIKETt9CnpIKynmf5iCpf1jDNo=
+
+Name: content/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ks0H9N1HwtHOGFBceqqXLA==
+SHA1-Digest: EeTFV+ifwWkwaWvQiix88l8YDtw=
+
+Name: content/treestyletab/multipletabConfigOverlay.xul
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: AI3+5oxDcuSxtrEn0S4kpQ==
+SHA1-Digest: TQBJwrZ+GwwBSHbAvzc4nnoSahw=
+
+Name: content/treestyletab/treestyletab-tmp.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Kyvx7VXMs8hS4lchMJpfFg==
+SHA1-Digest: dUnh9cVls70LC0cO+AzOTyJ+7Bc=
+
+Name: content/treestyletab/treestyletab.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ckNWCVVeVUwyAE8Ks4gRgA==
+SHA1-Digest: BmB3htcfoWnSKj7KE5BB7Cu9Sec=
+
+Name: content/treestyletab/treestyletab.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ld2sTGlJa+As/xraL/CwOQ==
+SHA1-Digest: LA2MSt95ft6Mt7ufc53o/qq0oew=
+
+Name: content/treestyletab/treestyletab.xml
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 0AJ4PM4kkHzJ6Skr4X5XwQ==
+SHA1-Digest: yI4r2a9JmBDqDI8qcvvn6R1wG4M=
+
+Name: content/treestyletab/treestyletab.xul
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: xLfM8fCGLnpJnylSe29EeA==
+SHA1-Digest: UL5BD1Q3QU5lrlyvVrvvYzxKzpM=
+
+Name: content/treestyletab/windowHelper.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: jNbQDZNTag3AkbZ5qUfYmA==
+SHA1-Digest: C/mp3RdS4rQjkmrKZNS8X0Nly7I=
+
+Name: content/treestyletab/windowHelperHacks.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: +s/LgIomma9/3/NXA4xK1Q==
+SHA1-Digest: rAB+c6L9HAPpCxWS5vcbvorWmNk=
+
+Name: content/treestyletab/res/bookmarkMultipleTabs.xul
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: BxexkR9ZJCUNcfDfbTeB+Q==
+SHA1-Digest: 60fRvXNQIxZszW6dVBK8RGi/StQ=
+
+Name: content/treestyletab/res/bookmarkMultipleTabs_bookmarkPropertiesOv
+ erlay.xul
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: hn+GVG2KuEdIcR6cd+cPVg==
+SHA1-Digest: zvKA9WdbSHU79zF+CwuH41FYeyU=
+
+Name: content/treestyletab/res/icon.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: b26p1vuhLB2vYtkJ0EpFZg==
+SHA1-Digest: T9f7i8A7iAz/ElpA361lLRpnbWc=
+
+Name: content/treestyletab/res/style-flat.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: yJ5Ng9fWzjXWr6rkY5XnxQ==
+SHA1-Digest: 21fjzektvczaL6gg46YsCnDRAoA=
+
+Name: content/treestyletab/res/style-metal.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: VLW3m1DnBgCJe/CwhatjKQ==
+SHA1-Digest: bDERNcMn+q9be5Hl5vpsOTv9+TA=
+
+Name: content/treestyletab/res/style-mixed.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: LQ+cJ4ypxMeOtrIeNb4zow==
+SHA1-Digest: fwP0Sh/HTfPlNLk8Yo4tbQurrHo=
+
+Name: content/treestyletab/res/style-plain.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: V0aScxDL7YeEz66bvCcdcw==
+SHA1-Digest: cGJJiw5nOPZqyXyvliHjM6vUXeY=
+
+Name: content/treestyletab/res/style-sidebar.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: izAqXI+MBl9HnnvYFEElqA==
+SHA1-Digest: APWbsVjSUEXhi5VaXKH7Pxcasn4=
+
+Name: content/treestyletab/res/style-vertigo.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: mC/u1MvEZzc5Nh+0nMb7aQ==
+SHA1-Digest: peni4eoolSuDI/XvU/G+i1dxU9k=
+
+Name: content/treestyletab/res/tabEffects.svg
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 2kuE/MgWKXof3NwEtoMSsw==
+SHA1-Digest: WzGw9OlK27u2qgwpylJvL+GMB9k=
+
+Name: content/treestyletab/res/tabsDragUtils.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: HiAUx9j5fAnkXeYyqQsnTQ==
+SHA1-Digest: GcN7PicYjUYq8jnq5FsdCfJXOvA=
+
+Name: content/treestyletab/res/twisty-modern-b.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ID6G7gfZgFGmzZwpoeCllA==
+SHA1-Digest: MFCsvyhs0G1660rX6nr4BWL3j04=
+
+Name: content/treestyletab/res/twisty-modern-w.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: QnmThqcAkwd6z0QfD0KO+A==
+SHA1-Digest: FkPnIvOMGo/VlOT+KQ3ZqLqi67E=
+
+Name: content/treestyletab/res/twisty-osx.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: fqz2wOoq980SOp/541fdxg==
+SHA1-Digest: ItmS1DcUMeOj+uEjj4c8EIUV664=
+
+Name: content/treestyletab/res/twisty-retro.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: el+RHYOnbah9NusYiqI0wQ==
+SHA1-Digest: q0mYa40sk7KoHzdmK6voR/OuGF8=
+
+Name: defaults/preferences/treestyletab.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 9biMjtnraI40dhAz4IJYYg==
+SHA1-Digest: MkVnqunBxYKr7c8ZcQQ9B0CDcDA=
+
+Name: locale/cs/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: zszUhNCZbsuXrvk0MyGtqw==
+SHA1-Digest: AmPIaBSAXJtd03ZD/LGrxu3FN3Y=
+
+Name: locale/cs/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 9sfrumYnt7wxbY1xgGIYUw==
+SHA1-Digest: xkvWRvqzxe2Ty769R5dCDO/3z7I=
+
+Name: locale/cs/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 1OpIC14m6S/qgYW69Eye+Q==
+SHA1-Digest: WsOdDNLMXoAK20xYSsHEn3TQEmw=
+
+Name: locale/da-DK/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 9OgEctYlcrncB79Zp3Xsyw==
+SHA1-Digest: vjay7k00E2Dhmo0XsTlEeFTRPXI=
+
+Name: locale/da-DK/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Cs5mhbziShKwE3sj9n0HUQ==
+SHA1-Digest: 8MO0+HSwHgb7p7XCn3WCrSHfXso=
+
+Name: locale/da-DK/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Is2C/T/4urDxTo+QeKFPrw==
+SHA1-Digest: ST1q6G8rHvDj78R+2ob8U7WMBdo=
+
+Name: locale/de-DE/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: P1OFa2/VTsD9tBpI1qCeSA==
+SHA1-Digest: CQr1mkH//MpqNCWbLou/CJX2aDk=
+
+Name: locale/de-DE/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Y7bvv6AflqW/1YpSH/y0EA==
+SHA1-Digest: 2uzb1LBxD8JwX5jylDwUfqFqNb8=
+
+Name: locale/de-DE/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 2xWdE6vpVKQOuO4OMCsD7A==
+SHA1-Digest: WaEIjebxJPfTO63MAdAc868HYWQ=
+
+Name: locale/en-US/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: mBjJFiEbKENaR38v2Zi3nw==
+SHA1-Digest: /vNGGzRR58QK5AOQjlorkE5GCAI=
+
+Name: locale/en-US/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ldc81dCNxvzqLjJSmCOTNg==
+SHA1-Digest: suzdF/d1DEkJBDpvaRjChgHD/Ew=
+
+Name: locale/en-US/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: L17tCQGtPt5xUfMg2yEoIA==
+SHA1-Digest: Sc94PktWKzBULitXzUk++VP0TY0=
+
+Name: locale/es-ES/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 4J565KU4rP1YW2Z7FwAmVw==
+SHA1-Digest: OeORv30Cbr8ylQKVbM0O9Y5n+4Y=
+
+Name: locale/es-ES/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: AIljkxD0WFor3cAs7w8VvA==
+SHA1-Digest: KloS63+wkJ7jJ2sqlnAhXjOrEMk=
+
+Name: locale/es-ES/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: fhSY0PSLS1+LW++TcWeCTQ==
+SHA1-Digest: wFbxgi5Ta2nDFmpxoaPTzItQ4uw=
+
+Name: locale/fr-FR/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: QnFbkycbnW1Gsz2FBnB1yg==
+SHA1-Digest: eSqlFr5OnT5gIpY1PF7f/E3bHas=
+
+Name: locale/fr-FR/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 5I8CWMNxf5PHV/yZogeLlA==
+SHA1-Digest: /Qomr6IpER0UvCK/4RmGqe+09HA=
+
+Name: locale/fr-FR/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: x5Pr+hhfhYBMvi7ef+mCyg==
+SHA1-Digest: a72vTBccSDPwd5oGIw1sOAemr6Y=
+
+Name: locale/it-IT/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: fzikcfeUYYGLBHSPKxs+ZQ==
+SHA1-Digest: DqBJQrV8f3tss7fKSnCdeXNIxYs=
+
+Name: locale/it-IT/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Bq7hRx8kdK+bXqOUt0BCmQ==
+SHA1-Digest: iegxPDoHaEHX3tJFp6WZnL3EMCM=
+
+Name: locale/it-IT/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: QR38Juc6mCm6solQWa2xBA==
+SHA1-Digest: bv3khdm86jVIVgEofDTtjZsHIuk=
+
+Name: locale/ja/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: mBjJFiEbKENaR38v2Zi3nw==
+SHA1-Digest: /vNGGzRR58QK5AOQjlorkE5GCAI=
+
+Name: locale/ja/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: O9O7y27oDqxBl8XVjNH5/g==
+SHA1-Digest: AjGpsCyCRsCrYLWO7aOdYadj6X8=
+
+Name: locale/ja/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ty4qq150WIIqHOA4dQL72g==
+SHA1-Digest: tg0cXe32VqIqrm6fXFf2ocalihw=
+
+Name: locale/pl/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: btlopE6fxtFm6BGl2WqSag==
+SHA1-Digest: JwRGjnhAsrasY46ktL+EtP3fxDI=
+
+Name: locale/pl/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: aB7MFn3PfYAa+ojgvYYwGA==
+SHA1-Digest: xlbcom9kY4kLJcsbJy3BrwSLg0s=
+
+Name: locale/pl/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: aXOCIJVBmBnybDOnPlhGRA==
+SHA1-Digest: ydBiJ4Ihh7jxe6uxPl+y+ryyIAE=
+
+Name: locale/ru/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: optA3x911mM29m/ilijA9Q==
+SHA1-Digest: Ewz5/CWtInQDfBCQoje+iGZbjEE=
+
+Name: locale/ru/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: jx81SEEjhZqqTetxx/GvNg==
+SHA1-Digest: qLa7QqLWsojnIkiR7oWo48qhvyA=
+
+Name: locale/ru/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: RvE1DFsb3pKW2EnPbQGwfQ==
+SHA1-Digest: iHK9XGw25Bu3yZgFRrR6IxYRM/Y=
+
+Name: locale/sv-SE/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: u/nBCeYTsPmbIi9OLhk6Bg==
+SHA1-Digest: Zfn4AKRpBe4E44Sg1HIuoxFmif0=
+
+Name: locale/sv-SE/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: sz96FEbaimft0Yh3+b9v8Q==
+SHA1-Digest: fw5oM4sbnYjiBIm0ibMLJQMWq0o=
+
+Name: locale/sv-SE/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ON1qN8ZBQJ+GuSlvljkvPA==
+SHA1-Digest: Ldbw+O4wPpTHxzQYYOI+EnXeGVs=
+
+Name: locale/zh-CN/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Z5mJDGXEoCOvu6WdrlfiBQ==
+SHA1-Digest: CxdX2iIT5cw2WR+1eMh9AA78n+U=
+
+Name: locale/zh-CN/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: zmmEY8SwT0Z8qe2uJ3pjCw==
+SHA1-Digest: LroRpN63Jwc5k4B/ZQFw03Xm9NE=
+
+Name: locale/zh-CN/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Uqt5+pq/jg2Vx2ar82oOkQ==
+SHA1-Digest: gVahm7yzs/TRB+CMvQLFBNT+PEM=
+
+Name: locale/zh-TW/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Ub9HxVsPH7UbfT/o6UPmxg==
+SHA1-Digest: XVqJMKhADCM73LtM7OFthNdECYo=
+
+Name: locale/zh-TW/treestyletab/treestyletab.dtd
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: JvAXUOVeEhu84k3Y0UDGmg==
+SHA1-Digest: Brmd1yAUe7SwDPB97WEZtAFzIwY=
+
+Name: locale/zh-TW/treestyletab/treestyletab.properties
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: bop162cseEmMo1bykaAIYA==
+SHA1-Digest: 820CmLC9fE1O0AAZaeKrzW0ER0g=
+
+Name: modules/autoHide.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: T9SAawe0+UOMjMQizNLHDA==
+SHA1-Digest: 8KQ0JqLSzHH1tOjz/1jwh62zwxk=
+
+Name: modules/base.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: q+mYhiRSG/v4AAbkIT4uCQ==
+SHA1-Digest: s804P4dgT5r0jnMU7tBb1JY85p8=
+
+Name: modules/browser.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 992iLJmymDwfBlCenFMYxw==
+SHA1-Digest: HNf1gNRzLl9m9aWjpv6BUf8sOFk=
+
+Name: modules/browserUIShowHideObserver.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 8MSAEZpP7EhsHmIXnjzG7g==
+SHA1-Digest: M3SCb58qeNORSPot1UHe63vyftM=
+
+Name: modules/constants.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 6mbfJ7B8IX8ScrJgjSBh4g==
+SHA1-Digest: LekJDB7P9PtP/J5a+8+FANZtikM=
+
+Name: modules/contentBridge.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: AZB2jQAnxsjypV1umhfEBw==
+SHA1-Digest: HFsqlRnRFb+hIdV7G5+MG3R0QUI=
+
+Name: modules/fullscreenObserver.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: mf/V54u6CtD6V2RFW/WF0Q==
+SHA1-Digest: v6+507G5urrawGK8lQh8JRdrcPo=
+
+Name: modules/fullTooltip.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ShAuksj5Si0Sb0kEe1NwrQ==
+SHA1-Digest: 4DKc57PO/dO2V3oo0aNBOu7Dfkk=
+
+Name: modules/groupTab.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: GdIHZgj3aQMqHtvRhbjv1w==
+SHA1-Digest: LhC5EqN9up0tyG7mzsxUD6ZxxUA=
+
+Name: modules/pseudoTreeBuilder.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 4q0nQ4CIjqaKtkWM3aHsZQ==
+SHA1-Digest: FzFEKrsUgN3ctHxnapuDMhdRXUQ=
+
+Name: modules/tabAttributesObserver.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: V2bHwKcnECwSU9tiBq6oMA==
+SHA1-Digest: s0dTBYAbHaHJl1qosnFeq09v3wE=
+
+Name: modules/tabbarDNDObserver.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: uFs6iCDzp8ZlGMTsVMHM0Q==
+SHA1-Digest: JK+000vzvtosIaUhtvOl+yE5d2Y=
+
+Name: modules/tabpanelDNDObserver.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: D2vLeI9JjyTH0dxUd3YjWw==
+SHA1-Digest: Ev0jhVn62wkkjNSOO5QHtGKBWXU=
+
+Name: modules/themeManager.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: AtFiQr5iJ7aRAIpw3ISe2w==
+SHA1-Digest: qxskOiLU34Yfh6Gxp/2rBD06gIQ=
+
+Name: modules/utils.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: zZ/+U7Sd8RvruD0Mknpl8A==
+SHA1-Digest: sdflsWuengne5M5scHCKGQ2KIWE=
+
+Name: modules/window.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: wxooRnHV0nCp3Bn7DQbN8g==
+SHA1-Digest: CiPCoI2sXL0Yt2kswj/w45/MU38=
+
+Name: modules/lib/animationManager.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: tCTp1R/fbEHkC/s6LAJ+wQ==
+SHA1-Digest: gOzZIMkc9xO9PfqsTDhP2ViCyVw=
+
+Name: modules/lib/autoScroll.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: wR8RRvyDf3rUzLjBt1bsnA==
+SHA1-Digest: pCuyv9MjP2/vihtyX7wv5Uxk/2o=
+
+Name: modules/lib/confirmWithPopup.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: XffmLkDOfTuIK+48IAM4sw==
+SHA1-Digest: aXUJCn5AlQpCzmZRQ/I3czVSNAk=
+
+Name: modules/lib/extensions.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: KNafZne30SXdzyfoGXca6w==
+SHA1-Digest: 3IbYcqoRV/tpDPKB+iE5Y9iCjCo=
+
+Name: modules/lib/inherit.jsm
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: SESkSedzqkncyLXHABiaog==
+SHA1-Digest: NqtEgb7S1xm1jXEOznskOfZk/Sk=
+
+Name: modules/lib/namespace.jsm
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: mkAS2xBrt57mK5w9IuAxdg==
+SHA1-Digest: fr/zTLjmtBm4oo58uVCZUBv+PPs=
+
+Name: modules/lib/prefs.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: kPuMGdq2ki9wgzsdDkHyQw==
+SHA1-Digest: j4nk7SjmRPBtfA9anGuvpEhf4eo=
+
+Name: modules/lib/stringBundle.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: hLRUNAIgENilF2Gnw7P7WQ==
+SHA1-Digest: ajJwI8sQcc4YyKl9ih/Fqzfr0+Q=
+
+Name: modules/lib/UninstallationListener.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: W6mO+4W/jnW4asgnMpJfGA==
+SHA1-Digest: ILq1s7W1VsjNidfgoGrnlHqnp1M=
+
+Name: modules/lib/visuallyselectedTabs.jsm
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: iwd/kfZCQaJsjIkO/emj/A==
+SHA1-Digest: 8xOI2kAUhlzs7UzFQRh5ibWEhDQ=
+
+Name: skin/classic/treestyletab/base.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: k1uSZ/eZnD3dd7dsgBlq2A==
+SHA1-Digest: 52slwwaJwRWyCIa4TWXxoZ2nQBk=
+
+Name: skin/classic/treestyletab/config.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ISwBByAPfmonJOHp/ZiYxw==
+SHA1-Digest: QeZLao3kGNtER/glzLQoSqpzL64=
+
+Name: skin/classic/treestyletab/Darwin-base.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 5CgXLAOGtw6IqY0tQH4FFA==
+SHA1-Digest: /IPmBc5AJPyaoOrhreWArekX2N8=
+
+Name: skin/classic/treestyletab/Darwin-styled.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: hao95egtOAfEnBBZbhKIrg==
+SHA1-Digest: cWHEYEPCm9gaVVwa/EgpfOm09N8=
+
+Name: skin/classic/treestyletab/dummy.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: gQUbzCzxvt83giSwqT4odw==
+SHA1-Digest: uoq1oCgLlTqpdDX/iUbLy7J1Wic=
+
+Name: skin/classic/treestyletab-group-aero/group.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: WAaFV+uAyxEllkfp3nUzOg==
+SHA1-Digest: SfUa64w243Tsw5GuN3o8JahyFjI=
+
+Name: skin/classic/treestyletab-group-basic/group.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: fVTjGUTsV86sIh2ideYUNQ==
+SHA1-Digest: DvaxcjAmPsnt7a1LFCcI+kZ8O4U=
+
+Name: skin/classic/treestyletab/group.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 90uxLtKKwShXcpxAlDs44A==
+SHA1-Digest: z7qNzCAhtrmIXtkGllbGhDnXKDg=
+
+Name: skin/classic/treestyletab/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: YNMSU+FEmPbD4l7BlE+1eg==
+SHA1-Digest: SkZhMKbeatV48RFx9AROoyuLalc=
+
+Name: skin/classic/treestyletab/Linux-base.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: qcqsCQR2mdKUIuZFf9EEgA==
+SHA1-Digest: aQmL/lqslBMfWjHLumKMmUERwjo=
+
+Name: skin/classic/treestyletab/Linux-config.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 4GgEa2Q4LfzLmtkB8N4mGA==
+SHA1-Digest: wpeaGpY/43D1mlvqaTnaC6LQOxk=
+
+Name: skin/classic/treestyletab/Linux-styled.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: zsFVyDG8KmOpsn81LOf0oA==
+SHA1-Digest: qeeZLagzbORE5b8b1TAxnZVS998=
+
+Name: skin/classic/treestyletab/pseudo-tree.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: vladq5shyYibE7GNT5fh0Q==
+SHA1-Digest: oS++SxHpJBVwPdVbO7VHkoGDom4=
+
+Name: skin/classic/treestyletab/tmp.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: G5wUtcKXudEZJ/wSGxmKOw==
+SHA1-Digest: 4P2cq4d8IQDoO1Q8TxiQMbJDvH8=
+
+Name: skin/classic/treestyletab/ui-australis.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: oGWteOCIdGeJh4s1CrodBQ==
+SHA1-Digest: /CcGFdIzQT8ebf8twW9s6P1rRRI=
+
+Name: skin/classic/treestyletab/ui-base.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 5G3HB6CjHahNZTUpbtJsOQ==
+SHA1-Digest: jipVd7r7T1LUwqdguo6WxjwTdkY=
+
+Name: skin/classic/treestyletab/WINNT-base.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: fGHJbWeArBzHuxSsxMgFrA==
+SHA1-Digest: C3bc9mMl9hHyEMFT613jBKtvOqY=
+
+Name: skin/classic/treestyletab/WINNT-styled.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ZpxqhUBoR0T7h7s0EmVSlQ==
+SHA1-Digest: a+t1B8umsGCEeoQW7I3Wc4jajZM=
+
+Name: skin/classic/treestyletab/metal/aero.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: A7jxPPPNUL0FokiUuMG2mA==
+SHA1-Digest: OeNgpLNuSgMsZsZ2yp1YXdy3Fg8=
+
+Name: skin/classic/treestyletab/metal/base.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: VOvt6P5FBvR/oN9iUdQxtQ==
+SHA1-Digest: i2FdF8PL0OCo1dgAI9S+zJmcKn8=
+
+Name: skin/classic/treestyletab/metal/Darwin.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: TZb3EA3nszWCtkHD9aWR5g==
+SHA1-Digest: YQCNXwVHDahH9S9SCdLFvm2afGs=
+
+Name: skin/classic/treestyletab/metal/icon-bg.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: dPlzlNuH44lFR2S41hhIXA==
+SHA1-Digest: RVQ5erPZ39JFpyMJy+JVEPHIHiI=
+
+Name: skin/classic/treestyletab/metal/shadow-active-l.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: mmzCLfQAQMHghi7NL51Slw==
+SHA1-Digest: M7TqKBGWXT9bW34NN+bwM898UJE=
+
+Name: skin/classic/treestyletab/metal/shadow-active-r.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: mB5tgnES7Pkp/lmdd8zwWg==
+SHA1-Digest: b0DAUbFO0NmlfY25pXRZVWFashs=
+
+Name: skin/classic/treestyletab/metal/shadow-inactive-l.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: y9CW0XGWsvn9WejkzjMB7g==
+SHA1-Digest: FsXsOA/7DGUor3REbDYVXknJLn4=
+
+Name: skin/classic/treestyletab/metal/shadow-inactive-r.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 9yag/NWzVKsCaa6jAfraTA==
+SHA1-Digest: TdgxoicqWnwwbzLq+jyiuBGT94M=
+
+Name: skin/classic/treestyletab/metal/tab-active-l.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: B9BZFX0F6XgN1hNnDekmGA==
+SHA1-Digest: n2B+BGWTc7mPc45JyBlQ5HVhoJY=
+
+Name: skin/classic/treestyletab/metal/tab-active-r.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: xr50vqrLVqxSy6uXBjqtvw==
+SHA1-Digest: I18/nxs9m5/ctfU0e7Scn7T710s=
+
+Name: skin/classic/treestyletab/metal/tab-active-selected-l.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: aM+vjSb9B1Hc1dcHzXjPlQ==
+SHA1-Digest: H+w+lhUI3Zdsmuk9YnjkYKtyB6Y=
+
+Name: skin/classic/treestyletab/metal/tab-active-selected-r.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Pb5PisMUoHyG4c6h40AUrw==
+SHA1-Digest: NuatlkwTAYnuy3aXS0ZUgYXjyvI=
+
+Name: skin/classic/treestyletab/metal/tab-inactive-l.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 4SYlZnEf3p5i0nUnP/yQaA==
+SHA1-Digest: +JvVEjfOE9REL23ElSe+Pd6y3Sk=
+
+Name: skin/classic/treestyletab/metal/tab-inactive-r.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: HjcLuFl2y8cHmbVx6AxxEw==
+SHA1-Digest: VAXbrcfJdPh73hhh98Gqd8pZPHo=
+
+Name: skin/classic/treestyletab/metal/tab-inactive-selected-l.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: hlC7QI1Jppv27pbGUB9h1A==
+SHA1-Digest: QqBxmezksTxjCpQ4U4MJAIGUtlU=
+
+Name: skin/classic/treestyletab/metal/tab-inactive-selected-r.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: C/y9xKa3tfUwPLvpR8fUng==
+SHA1-Digest: u2GHUKdU+s+jbRmxFO5motzr4+0=
+
+Name: skin/classic/treestyletab/metal/tab.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: YmpFmTxB1zpZsREL4keWCQ==
+SHA1-Digest: Tb21M1BRk39XZlAirlB+8obOGvg=
+
+Name: skin/classic/treestyletab/sidebar/aero.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: F9WScbg2zch223DQcGT04w==
+SHA1-Digest: JyNb0crV7EsAtaK5f5b9ijNxuek=
+
+Name: skin/classic/treestyletab/sidebar/closetab-white.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: ciO9HszpuusTRyytCi0h7w==
+SHA1-Digest: zIIsZqEoP7r2dFivr6FdPbOpx+g=
+
+Name: skin/classic/treestyletab/sidebar/closetab.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: SkYytZq4wqVcKz9SKHSLJA==
+SHA1-Digest: hYhVFQRyWevCLcBSTW1t8dg3cP4=
+
+Name: skin/classic/treestyletab/sidebar/dropmarker.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: G7uqA6OvOUP5hQWk1Dd2Ow==
+SHA1-Digest: 3ySucjnqrJTu7fWRs6EehENF6mk=
+
+Name: skin/classic/treestyletab/sidebar/license.txt
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: v9Eq0lPqaRSdBuATG2+oxg==
+SHA1-Digest: VNJPj9nckqPyRb2Ff3HWiGPQE58=
+
+Name: skin/classic/treestyletab/sidebar/sidebar.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: xgizmjMioe0U8jjR60gvCA==
+SHA1-Digest: cb+98YrSrq/rVbSDoYhKTVwMKQw=
+
+Name: skin/classic/treestyletab/square/base.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 7elXQXx/AV+21AEq+84dAw==
+SHA1-Digest: T7j8PUzg8peCmHWYmY26cyrDi2w=
+
+Name: skin/classic/treestyletab/square/Darwin.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Sz6fUNU3tE04ONiRaWWnXw==
+SHA1-Digest: zdWU4lsMupZEO1jfw+Uf5/Gmvm0=
+
+Name: skin/classic/treestyletab/square/disable-closebox-bg.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 8LDHw5xvv9yXYLDJCd3SnQ==
+SHA1-Digest: Sw5lpRR7NRMFYCOrR5ghaVmIqNU=
+
+Name: skin/classic/treestyletab/square/dropshadow.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: gH7jMyo0F+YXqQNMCllSOQ==
+SHA1-Digest: JFXwAAnJv/wYcL0MHhTGAnjuV3s=
+
+Name: skin/classic/treestyletab/square/Linux.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: PmtWBEeufSTU3Y5sXve0Xw==
+SHA1-Digest: 49zyBhf9aiIHZ49IHBS8MynbynA=
+
+Name: skin/classic/treestyletab/square/mixed.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 8sL566Kb3Z8Jvn2CiXpzzA==
+SHA1-Digest: AJDQbZMRY8rRlZTXcBV7i2E3sik=
+
+Name: skin/classic/treestyletab/square/newtab-shadow.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: /0+n+HVPH0by9VBCgNuHfA==
+SHA1-Digest: n/wGfo7dGvxTCtwJY8PhOE3bng8=
+
+Name: skin/classic/treestyletab/square/tab-bg-highlighted.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: T6mzHM9ZoEIITc8gz6ZQzA==
+SHA1-Digest: GZWz47jaTHZqDeuxhEev+hIa9/s=
+
+Name: skin/classic/treestyletab/square/tab-bg-hover.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 7adFA8ElKdBMgDrKt8kJMQ==
+SHA1-Digest: s/iupPpsNzXxzBpfnp46eIHe6lI=
+
+Name: skin/classic/treestyletab/square/tab-bg-selected-hover.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: MKuAAKJcABsHs40VUjTYIA==
+SHA1-Digest: Nm/r/tn7kT3Djy8JXfcXpVuBUHY=
+
+Name: skin/classic/treestyletab/square/tab-bg.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 4J6xqMjhCK3wSS7F3A9y0w==
+SHA1-Digest: CTg4j0P/755VUethbwqkLbDrXcI=
+
+Name: skin/classic/treestyletab/square/tab-surface.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: py4qLMM7RcXH+RwIHJE/Xw==
+SHA1-Digest: Ei6AJVrIrnKAL/qew2jLvNgXjWw=
+
+Name: skin/classic/treestyletab/square/vertigo.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: x5bWTAcM++UPB3EJFA3J3A==
+SHA1-Digest: 08KztOOzgQ0M+D/3ayVlOxnPaw4=
+
+Name: skin/classic/treestyletab/twisty/twisty-modern-b-l.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: Ye0CPTVUEFYWL+QuYWAxig==
+SHA1-Digest: RdJUOwLPIMtDepUSe2V2rdy8aio=
+
+Name: skin/classic/treestyletab/twisty/twisty-modern-b-r.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: SwrqMx9DnoCHhCBNRLcW6A==
+SHA1-Digest: rVi62rNVpdlxrMcSNDP7DT2xJEs=
+
+Name: skin/classic/treestyletab/twisty/twisty-modern-w-l.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: xBvmfLgkFKRbEi213k5OPA==
+SHA1-Digest: aTZeSy4hEWKS0oG3t6MFl6zhzso=
+
+Name: skin/classic/treestyletab/twisty/twisty-modern-w-r.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: h9jqwqr8/ru4ggQHfesoyQ==
+SHA1-Digest: VaiUeO2f5HpJ8gRSkEBXvoNQL14=
+
+Name: skin/classic/treestyletab/twisty/twisty-osx-l.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: PVWQVxSX840AHjIw1vJIrQ==
+SHA1-Digest: x6xlwSveib8J18nwDFCikmE4zGA=
+
+Name: skin/classic/treestyletab/twisty/twisty-osx-r.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: WtoZwIp1hXyoGoMw7aCd/Q==
+SHA1-Digest: 8pXvMI1cCh1ON69K20rdHOfesMo=
+
+Name: skin/classic/treestyletab/twisty/twisty-retro.png
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: 5jRhJ+QQ0POMUddYnVCTOw==
+SHA1-Digest: eNNNko96Xro/9rJtX8odGQznSq0=
+
+Name: skin/classic/treestyletab/twisty/twisty.css
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: M05iN3cITW6rRBXYi2jr9w==
+SHA1-Digest: c+CreKZYaFzJ2AacK/QEjvipQ5Y=
+
diff --git a/META-INF/mozilla.rsa b/META-INF/mozilla.rsa
new file mode 100644
index 0000000..3602901
Binary files /dev/null and b/META-INF/mozilla.rsa differ
diff --git a/META-INF/mozilla.sf b/META-INF/mozilla.sf
new file mode 100644
index 0000000..77eea90
--- /dev/null
+++ b/META-INF/mozilla.sf
@@ -0,0 +1,4 @@
+Signature-Version: 1.0
+MD5-Digest-Manifest: b7fHst3iS1XpUeOAFDG0UA==
+SHA1-Digest-Manifest: icaPq7Iu/pZ1EMF/GPzMkCbIWFc=
+
diff --git a/content/treestyletab/bookmarksOverlay.js b/content/treestyletab/bookmarksOverlay.js
index 8bf362a..1270725 100644
--- a/content/treestyletab/bookmarksOverlay.js
+++ b/content/treestyletab/bookmarksOverlay.js
@@ -243,7 +243,7 @@ var TreeStyleTabBookmarksService = inherit(TreeStyleTabService, {
 						'$1, aFolderTitle$2'
 					).replace(
 						'{',
-						'{ var TSTTreeStructure = null, TSTPreviousTabs, TSTOpenGroupBookmarkBehavior;'
+						'{ var TSTTreeStructure = null, TSTPreviousTabs, TSTTreeStructureApplied = true, TSTOpenGroupBookmarkBehavior;'
 					).replace(
 						'var urls = [];',
 						'$& var ids = [];'
@@ -258,6 +258,7 @@ var TreeStyleTabBookmarksService = inherit(TreeStyleTabService, {
 						'var TSTResult = browserWindow.TreeStyleTabBookmarksService.handleTabsOpenProcess(where, aEvent, browserWindow, ids, urls, aFolderTitle);\n' +
 						'TSTTreeStructure = TSTResult.treeStructure;\n' +
 						'TSTPreviousTabs = TSTResult.previousTabs;\n' +
+						'TSTTreeStructureApplied = TSTResult.treeStructureApplied;\n' +
 						'TSTOpenGroupBookmarkBehavior = TSTResult.behavior;\n' +
 						'if (typeof replaceCurrentTab != "undefined")\n' +
 						'  replaceCurrentTab = TSTResult.replaceCurrentTab;\n' +
@@ -266,7 +267,13 @@ var TreeStyleTabBookmarksService = inherit(TreeStyleTabService, {
 						/(\}\)?)$/,
 						'  if (TSTTreeStructure && TSTPreviousTabs) {\n' +
 						'    let tabs = browserWindow.TreeStyleTabService.getNewTabsFromPreviousTabsInfo(browserWindow.gBrowser, TSTPreviousTabs);\n' +
-						'    browserWindow.TreeStyleTabService.applyTreeStructureToTabs(tabs, TSTTreeStructure, TSTOpenGroupBookmarkBehavior & browserWindow.TreeStyleTabBookmarksService.kGROUP_BOOKMARK_EXPAND_ALL_TREE);\n' +
+						'    if (!TSTTreeStructureApplied)\n' +
+						'      browserWindow.TreeStyleTabService.applyTreeStructureToTabs(tabs, TSTTreeStructure, TSTOpenGroupBookmarkBehavior & browserWindow.TreeStyleTabBookmarksService.kGROUP_BOOKMARK_EXPAND_ALL_TREE);\n' +
+						'    if (!loadInBackground) {\n' +
+						'      browserWindow.setTimeout(function() {\n' +
+						'        browserWindow.gBrowser.treeStyleTab.scrollToTabs(tabs);\n' +
+						'      }, browserWindow.gBrowser.treeStyleTab.collapseDuration); // start scroll after expanding animation is finished\n' +
+						'    }\n' +
 						'  }\n' +
 						'$1'
 					));
@@ -384,7 +391,8 @@ var TreeStyleTabBookmarksService = inherit(TreeStyleTabService, {
 		var result = {
 				behavior      : undefined,
 				treeStructure : undefined,
-				previousTabs  : undefined
+				previousTabs  : undefined,
+				treeStructureApplied : false
 			};
 		if (
 			aEvent.type != 'drop' &&
@@ -444,14 +452,17 @@ var TreeStyleTabBookmarksService = inherit(TreeStyleTabService, {
 				}
 			}
 
+			result.treeStructure = treeStructure;
+			result.previousTabs = aBrowserWindow.TreeStyleTabService.getTabsInfo(aBrowserWindow.gBrowser);
+
 			if (TreeStyleTabUtils.getTreePref('compatibility.TMP') &&
 				'TMP_Places' in aBrowserWindow &&
 				'openGroup' in aBrowserWindow.TMP_Places) {
-				result.treeStructure = treeStructure;
-				result.previousTabs = aBrowserWindow.TreeStyleTabService.getTabsInfo(aBrowserWindow.gBrowser);
+				result.treeStructureApplied = false;
 			}
 			else {
 				sv.readyToOpenNewTabGroup(null, treeStructure, result.behavior & sv.kGROUP_BOOKMARK_EXPAND_ALL_TREE);
+				result.treeStructureApplied = true;
 			}
 		}
 		return result;
diff --git a/content/treestyletab/bookmarksOverlayEditable.js b/content/treestyletab/bookmarksOverlayEditable.js
index 9fd1f32..8bf57d7 100644
--- a/content/treestyletab/bookmarksOverlayEditable.js
+++ b/content/treestyletab/bookmarksOverlayEditable.js
@@ -47,26 +47,23 @@ var TreeStyleTabBookmarksServiceEditable = inherit(TreeStyleTabBookmarksService,
 
 		// main browser window
 		if ('StarUI' in window) {
-			TreeStyleTabUtils.doPatching(StarUI._doShowEditBookmarkPanel, 'StarUI._doShowEditBookmarkPanel', function(aName, aSource) {
-				return eval(aName+' = '+aSource.replace(
-					'{',
-					'{ TreeStyleTabBookmarksServiceEditable.initEditUI();'
-				));
-			}, 'TreeStyleTab');
-
-			TreeStyleTabUtils.doPatching(StarUI.quitEditMode, 'StarUI.quitEditMode', function(aName, aSource) {
-				return eval(aName+' = '+aSource.replace(
-					'{',
-					'{ TreeStyleTabBookmarksServiceEditable.saveParentFor(this._itemId);'
-				));
-			}, 'TreeStyleTab');
-
-			TreeStyleTabUtils.doPatching(StarUI.cancelButtonOnCommand, 'StarUI.cancelButtonOnCommand', function(aName, aSource) {
-				return eval(aName+' = '+aSource.replace(
-					'{',
-					'{ TreeStyleTabBookmarksServiceEditable.canceled = true;'
-				));
-			}, 'TreeStyleTab');
+			StarUI.__treestyletab___doShowEditBookmarkPanel = StarUI.__treestyletab___doShowEditBookmarkPanel || StarUI._doShowEditBookmarkPanel;
+			StarUI._doShowEditBookmarkPanel = function(...args) {
+				TreeStyleTabBookmarksServiceEditable.initEditUI();
+				return this.__treestyletab___doShowEditBookmarkPanel.apply(this, args);
+			};
+
+			StarUI.__treestyletab__quitEditMode = StarUI.__treestyletab__quitEditMode || StarUI.quitEditMode;
+			StarUI.quitEditMode = function(...args) {
+				TreeStyleTabBookmarksServiceEditable.saveParentFor(this._itemId);
+				return this.__treestyletab__quitEditMode.apply(this, args);
+			};
+
+			StarUI.__treestyletab__cancelButtonOnCommand = StarUI.__treestyletab__cancelButtonOnCommand || StarUI.cancelButtonOnCommand;
+			StarUI.cancelButtonOnCommand = function(...args) {
+				TreeStyleTabBookmarksServiceEditable.canceled = true;
+				return this.__treestyletab__cancelButtonOnCommand.apply(this, args);
+			};
 		}
 
 		// Bookmarks Property dialog
@@ -121,21 +118,35 @@ var TreeStyleTabBookmarksServiceEditable = inherit(TreeStyleTabBookmarksService,
 		document.getElementById('treestyletab-parent-label').setAttribute('value', TreeStyleTabUtils.treeBundle.getString('bookmarkProperty.parent.label'));
 		this.blankItem.setAttribute('label', TreeStyleTabUtils.treeBundle.getString('bookmarkProperty.parent.blank.label'));
 
+		if (Services.vc.compare(Services.appinfo.platformVersion, '40') >= 0) {
+			// for Firefox 40 and later, after Bug 951651
+			TreeStyleTabUtils.doPatching(gEditItemOverlay.initPanel, 'gEditItemOverlay.initPanel', function(aName, aSource) {
+				return eval(aName+' = '+aSource.replace(
+					/(\}\)?)$/,
+					'  TreeStyleTabBookmarksServiceEditable.parentRow.collapsed = this._element("keywordRow").collapsed && this._element("folderRow").collapsed;\n' +
+					'  if (!TreeStyleTabBookmarksServiceEditable.parentRow.collapsed)\n' +
+					'    TreeStyleTabBookmarksServiceEditable.initParentMenuList();\n' +
+					'$1'
+				));
+			}, 'TreeStyleTab');
+		}
+		else {
+			// for Firefox 39 and olders
+			TreeStyleTabUtils.doPatching(gEditItemOverlay.initPanel, 'gEditItemOverlay.initPanel', function(aName, aSource) {
+				return eval(aName+' = '+aSource.replace(
+					'if (this._itemType == Ci.nsINavBookmarksService.TYPE_BOOKMARK) {',
+					'$& TreeStyleTabBookmarksServiceEditable.initParentMenuList();'
+				));
+			}, 'TreeStyleTab');
 
-		TreeStyleTabUtils.doPatching(gEditItemOverlay._showHideRows, 'gEditItemOverlay._showHideRows', function(aName, aSource) {
-			return eval(aName+' = '+aSource.replace(
-				/(\}\)?)$/,
-				'  TreeStyleTabBookmarksServiceEditable.parentRow.collapsed = this._element("keywordRow").collapsed && this._element("folderRow").collapsed;\n' +
-				'$1'
-			));
-		}, 'TreeStyleTab');
-
-		TreeStyleTabUtils.doPatching(gEditItemOverlay.initPanel, 'gEditItemOverlay.initPanel', function(aName, aSource) {
-			return eval(aName+' = '+aSource.replace(
-				'if (this._itemType == Ci.nsINavBookmarksService.TYPE_BOOKMARK) {',
-				'$& TreeStyleTabBookmarksServiceEditable.initParentMenuList();'
-			));
-		}, 'TreeStyleTab');
+			TreeStyleTabUtils.doPatching(gEditItemOverlay._showHideRows, 'gEditItemOverlay._showHideRows', function(aName, aSource) {
+				return eval(aName+' = '+aSource.replace(
+					/(\}\)?)$/,
+					'  TreeStyleTabBookmarksServiceEditable.parentRow.collapsed = this._element("keywordRow").collapsed && this._element("folderRow").collapsed;\n' +
+					'$1'
+				));
+			}, 'TreeStyleTab');
+		}
 
 		TreeStyleTabUtils.doPatching(gEditItemOverlay.onItemMoved, 'gEditItemOverlay.onItemMoved', function(aName, aSource) {
 			return eval(aName+' = '+aSource.replace(
diff --git a/content/treestyletab/config.js b/content/treestyletab/config.js
index 3f7c9b6..db33c8f 100644
--- a/content/treestyletab/config.js
+++ b/content/treestyletab/config.js
@@ -110,6 +110,25 @@ function initAppearancePane()
 	});
 }
 
+function readOverrideSize(aFieldId)
+{
+	var field = document.getElementById(aFieldId);
+	var overrideKey = field.getAttribute('preference');
+	var regularKey = overrideKey.replace(/\.override$/, '');
+	var regularPref = document.getElementById(regularKey);
+	return regularPref.value;
+}
+
+function writeOverrideSize(aFieldId)
+{
+	var field = document.getElementById(aFieldId);
+	var overrideKey = field.getAttribute('preference');
+	var regularKey = overrideKey.replace(/\.override$/, '');
+	var regularPref = document.getElementById(regularKey);
+	regularPref.value = field.value;
+	return field.value;
+}
+
 
 var gDropLinksOnRadioSet,
 	gGroupBookmarkRadioSet,
@@ -202,22 +221,31 @@ function onChangeTabbarPosition()
 	else
 		invertClosebox.setAttribute('collapsed', true);
 
-	var maxTreeLevelH   = document.getElementById('maxTreeLevel-horizontal');
-	var maxTreeLevelV   = document.getElementById('maxTreeLevel-vertical');
-	var collapseCheckH = document.getElementById('extensions.treestyletab.allowSubtreeCollapseExpand.horizontal-check');
-	var collapseCheckV = document.getElementById('extensions.treestyletab.allowSubtreeCollapseExpand.vertical-check');
-
+	var horizontalElements = [
+		'maxTreeLevel-horizontal',
+		'extensions.treestyletab.allowSubtreeCollapseExpand.horizontal-check',
+		'fixedTabbar-horizontal'
+	];
+	var verticalElements = [
+		'maxTreeLevel-vertical',
+		'extensions.treestyletab.allowSubtreeCollapseExpand.vertical-check',
+		'fixedTabbar-vertical'
+	];
 	if (pos == 'left' || pos == 'right') {
-		maxTreeLevelH.setAttribute('collapsed', true);
-		maxTreeLevelV.removeAttribute('collapsed');
-		collapseCheckH.setAttribute('collapsed', true);
-		collapseCheckV.removeAttribute('collapsed');
+		horizontalElements.forEach(function(aId) {
+			document.getElementById(aId).setAttribute('collapsed', true);
+		});
+		verticalElements.forEach(function(aId) {
+			document.getElementById(aId).removeAttribute('collapsed');
+		});
 	}       
 	else {
-		maxTreeLevelH.removeAttribute('collapsed');
-		maxTreeLevelV.setAttribute('collapsed', true);
-		collapseCheckH.removeAttribute('collapsed');
-		collapseCheckV.setAttribute('collapsed', true);
+		horizontalElements.forEach(function(aId) {
+			document.getElementById(aId).removeAttribute('collapsed');
+		});
+		verticalElements.forEach(function(aId) {
+			document.getElementById(aId).setAttribute('collapsed', true);
+		});
 	}
 
 	gTabbarPlacePositionInitialized = true;
diff --git a/content/treestyletab/config.xul b/content/treestyletab/config.xul
index 0854fa8..c790f84 100644
--- a/content/treestyletab/config.xul
+++ b/content/treestyletab/config.xul
@@ -21,6 +21,21 @@
 		<preference id="extensions.treestyletab.tabbar.fixed.horizontal"
 			name="extensions.treestyletab.tabbar.fixed.horizontal"
 			type="bool"/>
+		<preference id="extensions.treestyletab.tabbar.fixed.vertical"
+			name="extensions.treestyletab.tabbar.fixed.vertical"
+			type="bool"/>
+		<preference id="extensions.treestyletab.tabbar.height"
+			name="extensions.treestyletab.tabbar.height"
+			type="int"/>
+		<preference id="extensions.treestyletab.tabbar.height.override"
+			name="extensions.treestyletab.tabbar.height.override"
+			type="int"/>
+		<preference id="extensions.treestyletab.tabbar.width"
+			name="extensions.treestyletab.tabbar.width"
+			type="int"/>
+		<preference id="extensions.treestyletab.tabbar.width.override"
+			name="extensions.treestyletab.tabbar.width.override"
+			type="int"/>
 		<preference id="extensions.treestyletab.tabbar.syncRelatedPrefsForDynamicPosition"
 			name="extensions.treestyletab.tabbar.syncRelatedPrefsForDynamicPosition"
 			type="bool"/>
@@ -99,6 +114,40 @@
 		</radiogroup>
 		<spacer flex="1"/>
 		</hbox>
+		<hbox id="fixedTabbar-horizontal" align="center">
+			<checkbox id="extensions.treestyletab.tabbar.fixed.horizontal-check"
+				preference="extensions.treestyletab.tabbar.fixed.horizontal"
+				label="&context.toggleFixed.label.horizontal;"/>
+			<label id="tabbarSize-before-horizontal"
+				control="tabbarSize-horizontal"
+				value="&config.tabbarSize.before-horizontal;"/>
+			<textbox id="tabbarSize-horizontal"
+				preference="extensions.treestyletab.tabbar.height.override"
+				onsyncfrompreference="return readOverrideSize('tabbarSize-horizontal');"
+				onsynctopreference="return writeOverrideSize('tabbarSize-horizontal');"
+				type="number"
+				min="1" increment="1" style="width:6em;"/>
+			<label id="tabbarSize-after-horizontal"
+				control="tabbarSize-horizontal"
+				value="&config.tabbarSize.after-horizontal;"/>
+		</hbox>
+		<hbox id="fixedTabbar-vertical" align="center">
+			<checkbox id="extensions.treestyletab.tabbar.fixed.vertical-check"
+				preference="extensions.treestyletab.tabbar.fixed.vertical"
+				label="&context.toggleFixed.label.vertical;"/>
+			<label id="tabbarSize-before-vertical"
+				control="tabbarSize-vertical"
+				value="&config.tabbarSize.before-vertical;"/>
+			<textbox id="tabbarSize-vertical"
+				preference="extensions.treestyletab.tabbar.width.override"
+				onsyncfrompreference="return readOverrideSize('tabbarSize-vertical');"
+				onsynctopreference="return writeOverrideSize('tabbarSize-vertical');"
+				type="number"
+				min="1" increment="1" style="width:6em;"/>
+			<label id="tabbarSize-after-vertical"
+				control="tabbarSize-vertical"
+				value="&config.tabbarSize.after-vertical;"/>
+		</hbox>
 		<hbox align="center">
 			<checkbox id="extensions.treestyletab.tabbar.invertTabContents-check"
 				preference="extensions.treestyletab.tabbar.invertTabContents"
diff --git a/content/treestyletab/content-utils-autohide.js b/content/treestyletab/content-utils-autohide.js
index f5e20e2..af4ed48 100644
--- a/content/treestyletab/content-utils-autohide.js
+++ b/content/treestyletab/content-utils-autohide.js
@@ -38,7 +38,7 @@
 	}
 
 	var messageListener = function(aMessage) {
-		mydump('CONTENT MESSAGE LISTENED <'+global.content.location+'>');
+		mydump('CONTENT MESSAGE LISTENED <'+(global.content && global.content.location)+'>');
 		mydump(JSON.stringify(aMessage.json));
 		switch (aMessage.json.command)
 		{
diff --git a/content/treestyletab/license.txt b/content/treestyletab/license.txt
index 0a245b0..62dcd4b 100644
--- a/content/treestyletab/license.txt
+++ b/content/treestyletab/license.txt
@@ -19,6 +19,7 @@ the Initial Developer. All Rights Reserved.
 
 Contributor(s): YUKI "Piro" Hiroshi <piro.outsider.reflex at gmail.com>
                 Alice0775 (fixes some compatibility problems)
+                Xidorn Quan <https://github.com/upsuper> (Firefox 40+ support)
 
 Alternatively, the contents of these files may be used under the terms of
 either the GNU General Public License Version 2 or later (the "GPL"), or
diff --git a/content/treestyletab/treestyletab.js b/content/treestyletab/treestyletab.js
index 16c3041..cd47d71 100644
--- a/content/treestyletab/treestyletab.js
+++ b/content/treestyletab/treestyletab.js
@@ -1,7 +1,7 @@
 (function() {
 	/**
 	 * On secondary (and later) window, SSWindowStateBusy event can be fired
-	 * before DOMContentLoad, on "domwindowopened".
+	 * before DOMContentLoaded, on "domwindowopened".
 	 */
 	var SSWindowStateBusyListener = function TSTSSWindowStateBusyListener(aEvent) {
 			window.removeEventListener(aEvent.type, TSTSSWindowStateBusyListener, false);
@@ -9,10 +9,10 @@
 			SSWindowStateBusyListener = undefined;
 		};
 	window.addEventListener('SSWindowStateBusy', SSWindowStateBusyListener, false);
-	window.addEventListener('DOMContentLoad', function onDOMContentLoad(aEvent) {
-		window.removeEventListener(aEvent.type, onDOMContentLoad, false);
+	window.addEventListener('DOMContentLoaded', function onDOMContentLoaded(aEvent) {
+		window.removeEventListener(aEvent.type, onDOMContentLoaded, false);
 		if (SSWindowStateBusyListener) {
-			window.removeEventListener('SSWindowStateBusy', TSTSSWindowStateBusyListener, false);
+			window.removeEventListener('SSWindowStateBusy', SSWindowStateBusyListener, false);
 			SSWindowStateBusyListener = undefined;
 		}
 	}, false);
diff --git a/content/treestyletab/windowHelper.js b/content/treestyletab/windowHelper.js
index 7095eb9..9ece3be 100644
--- a/content/treestyletab/windowHelper.js
+++ b/content/treestyletab/windowHelper.js
@@ -171,8 +171,8 @@ var TreeStyleTabWindowHelper = {
 		var viewImageMethod = ('viewImage' in nsContextMenu.prototype) ? 'viewImage' : 'viewMedia' ;
 		TreeStyleTabUtils.doPatching(nsContextMenu.prototype[viewImageMethod], 'nsContextMenu.prototype.'+viewImageMethod, function(aName, aSource) {
 			return eval(aName+' = '+aSource.replace(
-				'openUILink(',
-				'TreeStyleTabService.onBeforeViewMedia(e, this.target.ownerDocument.defaultView); $&'
+				/(openUILink\()/g,
+				'TreeStyleTabService.onBeforeViewMedia(e, this.target.ownerDocument.defaultView); $1'
 			));
 		}, 'TreeStyleTab');
 
@@ -259,17 +259,33 @@ var TreeStyleTabWindowHelper = {
 			));
 		}, 'TreeStyleTab');
 
-		TreeStyleTabUtils.doPatching(FullScreen.mouseoverToggle, 'FullScreen.mouseoverToggle', function(aName, aSource) {
-			return eval(aName+' = '+aSource.replace(
-				'this._isChromeCollapsed = !aShow;',
-				'gBrowser.treeStyleTab.updateFloatingTabbar(gBrowser.treeStyleTab.kTABBAR_UPDATE_BY_FULLSCREEN); $&'
-			));
-		}, 'treeStyleTab');
+		if ('showNavToolbox' in FullScreen) { // for Firefox 40 or later
+			TreeStyleTabUtils.doPatching(FullScreen.showNavToolbox, 'FullScreen.showNavToolbox', function(aName, aSource) {
+				return eval(aName+' = '+aSource.replace(
+					'this._isChromeCollapsed = false;',
+					'gBrowser.treeStyleTab.updateFloatingTabbar(gBrowser.treeStyleTab.kTABBAR_UPDATE_BY_FULLSCREEN); $&'
+				));
+			}, 'treeStyleTab');
+			TreeStyleTabUtils.doPatching(FullScreen.hideNavToolbox, 'FullScreen.hideNavToolbox', function(aName, aSource) {
+				return eval(aName+' = '+aSource.replace(
+					'this._isChromeCollapsed = true;',
+					'gBrowser.treeStyleTab.updateFloatingTabbar(gBrowser.treeStyleTab.kTABBAR_UPDATE_BY_FULLSCREEN); $&'
+				));
+			}, 'treeStyleTab');
+		}
+		else if ('mouseoverToggle' in FullScreen) { // for Firefox 39 or older
+			TreeStyleTabUtils.doPatching(FullScreen.mouseoverToggle, 'FullScreen.mouseoverToggle', function(aName, aSource) {
+				return eval(aName+' = '+aSource.replace(
+					'this._isChromeCollapsed = !aShow;',
+					'gBrowser.treeStyleTab.updateFloatingTabbar(gBrowser.treeStyleTab.kTABBAR_UPDATE_BY_FULLSCREEN); $&'
+				));
+			}, 'treeStyleTab');
+		}
 
 		TreeStyleTabUtils.doPatching(FullScreen.toggle, 'FullScreen.toggle', function(aName, aSource) {
 			return eval(aName+' = '+aSource.replace(
-				'{',
-				'{ gBrowser.treeStyleTab.onBeforeFullScreenToggle(); '
+				'if (enterFS) {',
+				'gBrowser.treeStyleTab.onBeforeFullScreenToggle(enterFS); $&'
 			));
 		}, 'treeStyleTab');
 
@@ -550,24 +566,24 @@ var TreeStyleTabWindowHelper = {
 
 		/**
 		 * The default implementation fails to scroll to tab if it is expanding.
-		 * So we have to inject codes to override its effect.
+		 * So we have to override its effect.
 		 */
 		{
 			let scrollbox = aTabBrowser.treeStyleTab.scrollBox;
-			TreeStyleTabUtils.doPatching(scrollbox.ensureElementIsVisible, 'scrollbox.ensureElementIsVisible', function(aName, aSource) {
-				return eval(aName+' = '+aSource.replace(
-					'{',
-					'{\n' +
-					'  var treeStyleTab = TreeStyleTabService.getTabBrowserFromChild(this).treeStyleTab;\n' +
-					'  if (treeStyleTab && treeStyleTab.shouldCancelEnsureElementIsVisible())\n' +
-					'    return;\n' +
-					'  if (\n' +
-					'      treeStyleTab &&\n' +
-					'      (arguments.length == 1 || arguments[1])\n' +
-					'    )\n' +
-					'    return treeStyleTab.scrollToTab(arguments[0]);'
-				));
-			}, /treeStyleTab|ensureTabIsVisible/); // if there is a string "ensureTabIsVisible", it is replaced by Tab Mix Plus!
+				if (!scrollbox.__treestyletab__ensureElementIsVisible) {
+				scrollbox.__treestyletab__ensureElementIsVisible = scrollbox.ensureElementIsVisible;
+				scrollbox.ensureElementIsVisible = function(...aArgs) {
+					var treeStyleTab = TreeStyleTabService.getTabBrowserFromChild(this).treeStyleTab;
+					if (treeStyleTab) {
+						if (treeStyleTab.shouldCancelEnsureElementIsVisible())
+							return;
+						let shouldScrollNow = aArgs[1] === false;
+						if (treeStyleTab.animationEnabled && !shouldScrollNow)
+							return treeStyleTab.scrollToTab(aArgs[0]);
+					}
+					this.__treestyletab__ensureElementIsVisible.apply(this, aArgs);
+				};
+			}
 		}
 
 		{
diff --git a/content/treestyletab/windowHelperHacks.js b/content/treestyletab/windowHelperHacks.js
index 167de96..fd28c5d 100644
--- a/content/treestyletab/windowHelperHacks.js
+++ b/content/treestyletab/windowHelperHacks.js
@@ -246,10 +246,10 @@ TreeStyleTabWindowHelper.overrideExtensionsPreInit = function TSTWH_overrideExte
 		globDndtb.setTheStuff &&
 		TreeStyleTabUtils.getTreePref('compatibility.DragNDropToolbars')) {
 		let reinitTabbar = function() {
-				gBrowser.treeStyleTab.syncDestroyTabbar();
-				window.setTimeout(function() {
-					gBrowser.treeStyleTab.syncReinitTabbar();
-				}, 100);
+				gBrowser.treeStyleTab.destroyTabbar()
+					.then(function() {
+						gBrowser.treeStyleTab.reinitTabbar();
+					});
 			};
 		globDndtb.__treestyletab__setOrder = globDndtb.setOrder;
 		globDndtb.setOrder = function() {
@@ -1323,10 +1323,10 @@ TreeStyleTabWindowHelper.overrideExtensionsDelayed = function TSTWH_overrideExte
 								aEvent.attrName == 'hidden' &&
 								gBrowser.tabContainer.parentNode.id == (aEvent.newValue == 'true' ? 'toolbar-menubar' : 'personal-titlebar' )
 								) {
-								gBrowser.treeStyleTab.syncDestroyTabbar();
-								window.setTimeout(function() {
-									gBrowser.treeStyleTab.syncReinitTabbar();
-								}, 0);
+								gBrowser.treeStyleTab.destroyTabbar()
+									.then(function() {
+										gBrowser.treeStyleTab.reinitTabbar();
+									});
 							}
 							break;
 
@@ -1461,23 +1461,22 @@ TreeStyleTabWindowHelper.overrideExtensionsDelayed = function TSTWH_overrideExte
 							let manager = service.engineManager || service.Engines /* old name */;
 							let engine = manager.get('tabs');
 
-							let uri = tab.getAttribute('label');
-							if (engine.locallyOpenTabMatchesURL(uri))
-								return;
-
-							for (let [guid, client] in Iterator(engine.getAllClients()))
-							{
-								if (client.tabs.some(function({ urlHistory }) {
-										return urlHistory[0] == uri;
-									})) {
-									let parent = b.selectedTab;
-									window.setTimeout(function() {
-										if (tab.parentNode && !b.treeStyleTab.getParentTab(tab))
+							let parent = b.selectedTab;
+							window.setTimeout(function() {
+								let uri = tab.linkedBrowser.userTypedValue || tab.linkedBrowser.currentURI.spec;
+								for (let [guid, client] in Iterator(engine.getAllClients()))
+								{
+									if (client.tabs.some(function({ urlHistory }) {
+											return urlHistory[0] == uri;
+										})) {
+										if (parent.parentNode &&
+											tab.parentNode &&
+											!b.treeStyleTab.getParentTab(tab))
 											b.treeStyleTab.attachTabTo(tab, parent);
-									}, 0);
-									return;
+										return;
+									}
 								}
-							}
+							}, 0);
 							return;
 
 						case 'unload':
diff --git a/defaults/preferences/treestyletab.js b/defaults/preferences/treestyletab.js
index a4b81f9..168311f 100644
--- a/defaults/preferences/treestyletab.js
+++ b/defaults/preferences/treestyletab.js
@@ -18,6 +18,8 @@ pref("extensions.treestyletab.tabbar.height",                32);
 pref("extensions.treestyletab.tabbar.height.default",        32);
 pref("extensions.treestyletab.tabbar.shrunkenWidth",         80);
 pref("extensions.treestyletab.tabbar.shrunkenWidth.default", 80);
+pref("extensions.treestyletab.tabbar.width.override",        200);
+pref("extensions.treestyletab.tabbar.height.override",       200);
 
 /**
  * Position of the tab bar, possible values are:
diff --git a/install.rdf b/install.rdf
index d3de2ab..d293fcd 100644
--- a/install.rdf
+++ b/install.rdf
@@ -5,7 +5,7 @@
   <RDF:Description RDF:about="urn:mozilla:install-manifest"
                    em:id="treestyletab at piro.sakura.ne.jp"
                    em:name="Tree Style Tab"
-                   em:version="0.15.2015030601"
+                   em:version="0.15.20150902901"
                    em:creator="YUKI "Piro" Hiroshi"
                    em:description="Show tabs like a tree."
                    em:homepageURL="http://piro.sakura.ne.jp/xul/_treestyletab.html.en"
@@ -31,6 +31,7 @@
           <em:contributor>wanabe (some bug fixes)</em:contributor>
           <em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
           <em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+          <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
       </RDF:Description>
     </em:localized>
     <em:localized>
@@ -45,6 +46,7 @@
           <em:contributor>wanabe (some bug fixes)</em:contributor>
           <em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
           <em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+          <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
       </RDF:Description>
     </em:localized>
     <em:localized>
@@ -59,6 +61,7 @@
           <em:contributor>wanabe (some bug fixes)</em:contributor>
           <em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
           <em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+          <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
           <em:translator>Godai71.Extenzilla (it-IT locale)</em:translator>
       </RDF:Description>
     </em:localized>
@@ -74,6 +77,7 @@
           <em:contributor>wanabe (some bug fixes)</em:contributor>
           <em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
           <em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+          <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
           <em:translator>Fatiaomao (zh-CN locale)</em:translator>
           <em:translator>hzhbest (zh-CN locale)</em:translator>
       </RDF:Description>
@@ -90,6 +94,7 @@
           <em:contributor>wanabe (some bug fixes)</em:contributor>
           <em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
           <em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+          <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
           <em:translator>tito (es-ES locale)</em:translator>
       </RDF:Description>
     </em:localized>
@@ -105,6 +110,7 @@
           <em:contributor>wanabe (some bug fixes)</em:contributor>
           <em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
           <em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+          <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
           <em:translator>Andy Pillip (de-DE locale)</em:translator>
       </RDF:Description>
     </em:localized>
@@ -120,6 +126,7 @@
           <em:contributor>wanabe (some bug fixes)</em:contributor>
           <em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
           <em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+          <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
           <em:translator>HkYtrewq (zh-TW locale)</em:translator>
           <em:translator>Tsprajna (zh-TW locale)</em:translator>
           <em:translator>bootleq (zh-TW locale)</em:translator>
@@ -137,6 +144,7 @@
           <em:contributor>wanabe (some bug fixes)</em:contributor>
           <em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
           <em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+          <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
           <em:translator>L'Autour (ru locale)</em:translator>
           <em:translator>Infocatcher (ru locale)</em:translator>
       </RDF:Description>
@@ -153,6 +161,7 @@
           <em:contributor>wanabe (some bug fixes)</em:contributor>
           <em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
           <em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+          <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
           <em:translator>Leszek(teo)Życzkowski (pl locale)</em:translator>
       </RDF:Description>
     </em:localized>
@@ -168,6 +177,7 @@
           <em:contributor>wanabe (some bug fixes)</em:contributor>
           <em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
           <em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+          <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
           <em:translator>Laurent Haas (fr-FR locale)</em:translator>
           <em:translator>AxlMun (fr-FR locale)</em:translator>
       </RDF:Description>
@@ -184,6 +194,7 @@
           <em:contributor>wanabe (some bug fixes)</em:contributor>
           <em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
           <em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+          <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
           <em:translator>Mikael Hiort af Ornäs (sv-SE)</em:translator>
       </RDF:Description>
     </em:localized>
@@ -199,6 +210,7 @@
           <em:contributor>wanabe (some bug fixes)</em:contributor>
           <em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
           <em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+          <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
           <em:translator>Regmos (da-DK)</em:translator>
       </RDF:Description>
     </em:localized>
@@ -214,6 +226,7 @@
             <em:contributor>wanabe (some bug fixes)</em:contributor>
             <em:contributor>Tetsuharu OHZEKI (code cleanup)</em:contributor>
           <em:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+          <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
             <em:translator>Vlastimil Ovčáčík (cs)</em:translator>
         </RDF:Description>
     </em:localized>
@@ -221,8 +234,8 @@
 
     <em:targetApplication>
       <RDF:Description em:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
-                       em:minVersion="31.0"
-                       em:maxVersion="39.0a1" />
+                       em:minVersion="38.0"
+                       em:maxVersion="44.0a1" />
     </em:targetApplication>
   </RDF:Description>
 </RDF:RDF>
diff --git a/locale/cs/treestyletab/treestyletab.dtd b/locale/cs/treestyletab/treestyletab.dtd
index d232c52..63ab372 100644
--- a/locale/cs/treestyletab/treestyletab.dtd
+++ b/locale/cs/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
 <!ENTITY config.maxTreeLevel.before "až do">
 <!ENTITY config.maxTreeLevel.after  "úrovní">
 <!ENTITY config.allowSubtreeCollapseExpand  "Umožnit sbalení/rozbalení stromu panelů">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal  "px height">
+<!ENTITY config.tabbarSize.before-vertical   ":">
+<!ENTITY config.tabbarSize.after-vertical    "px width">
 
 
 <!ENTITY config.tabs.style "Styl">
diff --git a/locale/da-DK/treestyletab/treestyletab.dtd b/locale/da-DK/treestyletab/treestyletab.dtd
index 19d8412..1b9834b 100644
--- a/locale/da-DK/treestyletab/treestyletab.dtd
+++ b/locale/da-DK/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
 <!ENTITY config.maxTreeLevel.before "op til">
 <!ENTITY config.maxTreeLevel.after "niveauer">
 <!ENTITY config.allowSubtreeCollapseExpand "Tillad sammenfold/udvid fanetræ">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal  "px height">
+<!ENTITY config.tabbarSize.before-vertical   ":">
+<!ENTITY config.tabbarSize.after-vertical    "px width">
 
 
 <!ENTITY config.tabs.style "Udseende">
diff --git a/locale/de-DE/treestyletab/treestyletab.dtd b/locale/de-DE/treestyletab/treestyletab.dtd
index 631852c..e93436f 100644
--- a/locale/de-DE/treestyletab/treestyletab.dtd
+++ b/locale/de-DE/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
 <!ENTITY config.maxTreeLevel.before "bis">
 <!ENTITY config.maxTreeLevel.after  "Level">
 <!ENTITY config.allowSubtreeCollapseExpand  "Auf- und Einklappen von Zweigen erlauben">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal  "px height">
+<!ENTITY config.tabbarSize.before-vertical   ":">
+<!ENTITY config.tabbarSize.after-vertical    "px width">
 
 
 <!ENTITY config.tabs.style "Style">
diff --git a/locale/en-US/treestyletab/treestyletab.dtd b/locale/en-US/treestyletab/treestyletab.dtd
index e3bd0ab..09f93f9 100644
--- a/locale/en-US/treestyletab/treestyletab.dtd
+++ b/locale/en-US/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
 <!ENTITY config.maxTreeLevel.before "until">
 <!ENTITY config.maxTreeLevel.after  "level(s)">
 <!ENTITY config.allowSubtreeCollapseExpand  "Allow to collapse/expand tree of tabs">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal  "px height">
+<!ENTITY config.tabbarSize.before-vertical   ":">
+<!ENTITY config.tabbarSize.after-vertical    "px width">
 
 
 <!ENTITY config.tabs.style "Style">
diff --git a/locale/es-ES/treestyletab/treestyletab.dtd b/locale/es-ES/treestyletab/treestyletab.dtd
index 2cfee79..8519d53 100644
--- a/locale/es-ES/treestyletab/treestyletab.dtd
+++ b/locale/es-ES/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
 <!ENTITY config.maxTreeLevel.before "hasta">
 <!ENTITY config.maxTreeLevel.after  "nivel(es)">
 <!ENTITY config.allowSubtreeCollapseExpand  "Permitir colapsar/expandir los sub-árboles de las pestañas">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal  "px height">
+<!ENTITY config.tabbarSize.before-vertical   ":">
+<!ENTITY config.tabbarSize.after-vertical    "px width">
 
 
 <!ENTITY config.tabs.style "Estilo">
diff --git a/locale/fr-FR/treestyletab/treestyletab.dtd b/locale/fr-FR/treestyletab/treestyletab.dtd
index 12917f1..5d80487 100644
--- a/locale/fr-FR/treestyletab/treestyletab.dtd
+++ b/locale/fr-FR/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
 <!ENTITY config.maxTreeLevel.before "jusqu'à">
 <!ENTITY config.maxTreeLevel.after  "niveau(x)">
 <!ENTITY config.allowSubtreeCollapseExpand  "Autoriser le repliage/dépliage des arborescences d'onglets">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal  "px height">
+<!ENTITY config.tabbarSize.before-vertical   ":">
+<!ENTITY config.tabbarSize.after-vertical    "px width">
 
 
 <!ENTITY config.tabs.style "Style">
diff --git a/locale/it-IT/treestyletab/treestyletab.dtd b/locale/it-IT/treestyletab/treestyletab.dtd
index 78cf62b..eb4e656 100644
--- a/locale/it-IT/treestyletab/treestyletab.dtd
+++ b/locale/it-IT/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
 <!ENTITY config.maxTreeLevel.before "until">
 <!ENTITY config.maxTreeLevel.after  "level(s)">
 <!ENTITY config.allowSubtreeCollapseExpand  "Permetti di contrarre/espandere sottoalberi delle schede">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal  "px height">
+<!ENTITY config.tabbarSize.before-vertical   ":">
+<!ENTITY config.tabbarSize.after-vertical    "px width">
 
 
 <!ENTITY config.tabs.style "Style">
diff --git a/locale/ja/treestyletab/treestyletab.dtd b/locale/ja/treestyletab/treestyletab.dtd
index 3a21030..be13147 100644
--- a/locale/ja/treestyletab/treestyletab.dtd
+++ b/locale/ja/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
 <!ENTITY config.maxTreeLevel.before "(">
 <!ENTITY config.maxTreeLevel.after  "階層まで)">
 <!ENTITY config.allowSubtreeCollapseExpand  "ツリーを折りたためるようにする">
+<!ENTITY config.tabbarSize.before-horizontal "高さ:">
+<!ENTITY config.tabbarSize.after-horizontal  "ピクセル">
+<!ENTITY config.tabbarSize.before-vertical   "幅:">
+<!ENTITY config.tabbarSize.after-vertical    "ピクセル">
 
 
 <!ENTITY config.tabs.style "スタイル">
diff --git a/locale/pl/treestyletab/treestyletab.dtd b/locale/pl/treestyletab/treestyletab.dtd
index 5bf988d..6bece92 100644
--- a/locale/pl/treestyletab/treestyletab.dtd
+++ b/locale/pl/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
 <!ENTITY config.maxTreeLevel.before "until">
 <!ENTITY config.maxTreeLevel.after  "level(s)">
 <!ENTITY config.allowSubtreeCollapseExpand  "Zezwalaj na zwijanie/rozwijanie drzewa kart">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal  "px height">
+<!ENTITY config.tabbarSize.before-vertical   ":">
+<!ENTITY config.tabbarSize.after-vertical    "px width">
 
 <!ENTITY config.tabs.style "Style">
 
diff --git a/locale/ru/treestyletab/treestyletab.dtd b/locale/ru/treestyletab/treestyletab.dtd
index e786b2a..67895fc 100755
--- a/locale/ru/treestyletab/treestyletab.dtd
+++ b/locale/ru/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
 <!ENTITY config.maxTreeLevel.before "пока уровней меньше">
 <!ENTITY config.maxTreeLevel.after  "">
 <!ENTITY config.allowSubtreeCollapseExpand  "Разрешить сворачивать/разворачивать поддеревья вкладок">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal  "px height">
+<!ENTITY config.tabbarSize.before-vertical   ":">
+<!ENTITY config.tabbarSize.after-vertical    "px width">
 
 
 <!ENTITY config.tabs.style "Стиль">
diff --git a/locale/sv-SE/treestyletab/treestyletab.dtd b/locale/sv-SE/treestyletab/treestyletab.dtd
index af8f972..bc7ccd7 100644
--- a/locale/sv-SE/treestyletab/treestyletab.dtd
+++ b/locale/sv-SE/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
 <!ENTITY config.maxTreeLevel.before "t.o.m. den">
 <!ENTITY config.maxTreeLevel.after  "nivån">
 <!ENTITY config.allowSubtreeCollapseExpand  "Tillåt att flikträd kan minimeras/expanderas">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal  "px height">
+<!ENTITY config.tabbarSize.before-vertical   ":">
+<!ENTITY config.tabbarSize.after-vertical    "px width">
 
 
 <!ENTITY config.tabs.style "Format">
diff --git a/locale/zh-CN/treestyletab/treestyletab.dtd b/locale/zh-CN/treestyletab/treestyletab.dtd
index a5d581f..1b3dd50 100644
--- a/locale/zh-CN/treestyletab/treestyletab.dtd
+++ b/locale/zh-CN/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
 <!ENTITY config.maxTreeLevel.before "最多">
 <!ENTITY config.maxTreeLevel.after  "层">
 <!ENTITY config.allowSubtreeCollapseExpand  "允许折叠/展开标签子树">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal  "px height">
+<!ENTITY config.tabbarSize.before-vertical   ":">
+<!ENTITY config.tabbarSize.after-vertical    "px width">
 
 
 <!ENTITY config.tabs.style "样式">
diff --git a/locale/zh-TW/treestyletab/treestyletab.dtd b/locale/zh-TW/treestyletab/treestyletab.dtd
index ac63530..247ed9f 100644
--- a/locale/zh-TW/treestyletab/treestyletab.dtd
+++ b/locale/zh-TW/treestyletab/treestyletab.dtd
@@ -20,6 +20,10 @@
 <!ENTITY config.maxTreeLevel.before "(最多">
 <!ENTITY config.maxTreeLevel.after  "層)">
 <!ENTITY config.allowSubtreeCollapseExpand  "允許摺疊 / 展開樹狀子目錄">
+<!ENTITY config.tabbarSize.before-horizontal ":">
+<!ENTITY config.tabbarSize.after-horizontal  "px height">
+<!ENTITY config.tabbarSize.before-vertical   ":">
+<!ENTITY config.tabbarSize.after-vertical    "px width">
 
 
 <!ENTITY config.tabs.style "樣式">
diff --git a/modules/autoHide.js b/modules/autoHide.js
index 694c728..6665e8a 100644
--- a/modules/autoHide.js
+++ b/modules/autoHide.js
@@ -297,9 +297,7 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
 			aValue = newWidth.expanded;
 		}
 		this.treeStyleTab.setWindowValue(this.kTABBAR_EXPANDED_WIDTH, aValue);
-		this.treeStyleTab.setPrefForActiveWindow(function() {
-			utils.setTreePref('tabbar.width', aValue);
-		});
+		utils.setTreePref('tabbar.width', aValue);
 		return aValue;
 	},
 	get shrunkenWidth()
@@ -320,9 +318,7 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
 			aValue = newWidth.shrunken;
 		}
 		this.treeStyleTab.setWindowValue(this.kTABBAR_SHRUNKEN_WIDTH, aValue);
-		this.treeStyleTab.setPrefForActiveWindow(function() {
-			utils.setTreePref('tabbar.shrunkenWidth', aValue);
-		});
+		utils.setTreePref('tabbar.shrunkenWidth', aValue);
 		return aValue;
 	},
 
@@ -470,6 +466,7 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
 		this.treeStyleTab.tabStripPlaceHolder.addEventListener('mousemove', this, true);
 		this.treeStyleTab.tabStrip.addEventListener('mousemove', this, true);
 		this.toggler.addEventListener('mousemove', this, true);
+		this.window.addEventListener('TabRemotenessChange', this, false);
 
 		this.mouseMoveListening = true;
 
@@ -485,6 +482,7 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
 		this.treeStyleTab.tabStripPlaceHolder.removeEventListener('mousemove', this, true);
 		this.treeStyleTab.tabStrip.removeEventListener('mousemove', this, true);
 		this.toggler.removeEventListener('mousemove', this, true);
+		this.window.removeEventListener('TabRemotenessChange', this, false);
 
 		this.mouseMoveListening = false;
 
@@ -842,19 +840,13 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
 		}
 
 		if (DEBUG) {
-			let humanReadableReason =
-				(aReason & this.kSHOWN_BY_SHORTCUT ? 'shortcut ' : '' ) +
-				(aReason & this.kSHOWN_BY_MOUSEMOVE ? 'mousemove ' : '' ) +
-				(aReason & this.kSHOWN_BY_FEEDBACK ? 'feedback ' : '' ) +
-				(aReason & this.kSHOWHIDE_BY_START ? 'start ' : '' ) +
-				(aReason & this.kSHOWHIDE_BY_END ? 'end ' : '' ) +
-				(aReason & this.kSHOWHIDE_BY_POSITION_CHANGE ? 'positionchange ' : '' ) +
-				(aReason & this.kSHOWHIDE_BY_RESIZE ? 'resize ' : '' ) +
-				(aReason & this.kHIDDEN_BY_CLICK ? 'click ' : '' );
+			let givenReason = this._getHumanReadableReason(aReason);
+			let unifiedReason = this._getHumanReadableReason(this.showHideReason);
 			if (this.expanded)
-				dump('autoHide: show by ' + humanReadableReason + '\n');
+				dump('autoHide: show by ' + aReason + '(' + givenReason + ' / ' + unifiedReason + ')\n');
 			else
-				dump('autoHide: hide by ' + humanReadableReason + '\n');
+				dump('autoHide: hide by ' + aReason + '(' + givenReason + ' / ' + unifiedReason + ')\n');
+			dump((new Error()).stack.replace(/^/gm, '  ').replace(/\s+$/, '') + '\n');
 		}
 
 		this.fireStateChangingEvent();
@@ -869,6 +861,19 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
 			aSelf.showHideContentsAreaScreen();
 		}, 0, this);
 	},
+	_getHumanReadableReason: function AHB_getHumanReadableReason(aReason)
+	{
+		let humanReadableReason =
+			(aReason & this.kSHOWN_BY_SHORTCUT ? 'shortcut ' : '' ) +
+			(aReason & this.kSHOWN_BY_MOUSEMOVE ? 'mousemove ' : '' ) +
+			(aReason & this.kSHOWN_BY_FEEDBACK ? 'feedback ' : '' ) +
+			(aReason & this.kSHOWHIDE_BY_START ? 'start ' : '' ) +
+			(aReason & this.kSHOWHIDE_BY_END ? 'end ' : '' ) +
+			(aReason & this.kSHOWHIDE_BY_POSITION_CHANGE ? 'positionchange ' : '' ) +
+			(aReason & this.kSHOWHIDE_BY_RESIZE ? 'resize ' : '' ) +
+			(aReason & this.kHIDDEN_BY_CLICK ? 'click ' : '' );
+		return humanReadableReason.replace(/\s+$/, '');
+	},
 	showHideContentsAreaScreen : function AHB_showHideContentsAreaScreen()
 	{
 		if (
@@ -927,7 +932,7 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
 			this.showHideReason |= aReason;
 		}
 		if (!this.expanded)
-			this.showHideInternal();
+			this.showHideInternal(aReason);
 	},
  
 	hide : function AHB_hide(aReason) /* PUBLIC API */ 
@@ -947,7 +952,7 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
 				return;
 		}
 		if (this.expanded)
-			this.showHideInternal();
+			this.showHideInternal(aReason);
 	},
  
 	onShowing : function AHB_onShowing() 
@@ -1083,14 +1088,14 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
 		switch (aPrefName)
 		{
 			case 'extensions.treestyletab.tabbar.autoHide.mode':
-				if (!this.window.TreeStyleTabService.shouldApplyNewPref)
+				if (!this.window.TreeStyleTabService.shouldApplyNewPref('tabbar.autoHide.mode'))
 					return;
 				this.browser.setAttribute(this.kMODE+'-normal', value);
 				this.updateMode(value);
 				return;
 
 			case 'extensions.treestyletab.tabbar.autoHide.mode.fullscreen':
-				if (!this.window.TreeStyleTabService.shouldApplyNewPref)
+				if (!this.window.TreeStyleTabService.shouldApplyNewPref('tabbar.autoHide.mode.fullscreen'))
 					return;
 				this.browser.setAttribute(this.kMODE+'-fullscreen', value);
 				this.updateMode(value);
@@ -1156,6 +1161,9 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
 			case 'mousemove':
 				return this.handleMouseMove(aEvent);
 
+            case 'TabRemotenessChange':
+				return this.notifyStatusToAllTabs(aEvent.target);
+
 			case 'TabOpen':
 			case 'TabClose':
 				return this.showForFeedback();
@@ -1484,11 +1492,9 @@ AutoHideWindow.prototype = inherit(AutoHideBase.prototype, {
 				utils.getTreePref(toggleKey) :
 				AutoHideBrowser.prototype.kMODE_DISABLED ;
 
-		this.treeStyleTab.setPrefForActiveWindow(function() {
-			utils.setTreePref(key, mode);
-			b.setAttribute(AutoHideBrowser.prototype.kMODE+'-'+(w.fullScreen ? 'fullscreen' : 'normal' ), mode);
-			b.treeStyleTab.autoHide.updateMode(mode);
-		});
+		utils.setTreePref(key, mode);
+		b.setAttribute(AutoHideBrowser.prototype.kMODE+'-'+(w.fullScreen ? 'fullscreen' : 'normal' ), mode);
+		b.treeStyleTab.autoHide.updateMode(mode);
 	},
  
 	initMode : function AHW_initMode()
diff --git a/modules/base.js b/modules/base.js
index 9bbaab1..3b0e385 100644
--- a/modules/base.js
+++ b/modules/base.js
@@ -496,72 +496,6 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, {
   
 /* utilities */ 
 	
-	doAndWaitDOMEvent : function TSTBase_doAndWaitDOMEvent(...aArgs) 
-	{
-		var type, target, delay, task;
-		for (let i = 0, maxi = aArgs.length; i < maxi; i++)
-		{
-			let arg = aArgs[i];
-			switch(typeof arg)
-			{
-				case 'string':
-					type = arg;
-					continue;
-
-				case 'number':
-					delay = arg;
-					continue;
-
-				case 'function':
-					task = arg;
-					continue;
-
-				default:
-					target = arg;
-					continue;
-			}
-		}
-
-		if (!target || !type) {
-			if (task)
-				task();
-			return;
-		}
-
-		var done = false;
-		var listener = function(aEvent) {
-				setTimeout(function() {
-					done = true;
-				}, delay || 0);
-				target.removeEventListener(type, listener, false);
-			};
-
-		if (task)
-			setTimeout((function() {
-				try {
-					task();
-				}
-				catch(e) {
-					dump(e+'\n');
-					target.removeEventListener(type, listener, false);
-					done = true;
-					this.defaultErrorHandler(e);
-				}
-			}).bind(this), 0);
-
-		target.addEventListener(type, listener, false);
-
-		var thread = Components
-						.classes['@mozilla.org/thread-manager;1']
-						.getService()
-						.mainThread;
-		while (!done)
-		{
-			//dump('WAIT '+type+' '+Date.now()+'\n');
-			thread.processNextEvent(true);
-		}
-	},
- 
 	findOffsetParent : function TSTBase_findOffsetParent(aNode) 
 	{
 		var parent = aNode.parentNode;
@@ -1014,8 +948,13 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, {
 	setTabStripAttribute : function TSTBase_setTabStripAttribute(aAttr, aValue) 
 	{
 		var strip = this.tabStrip;
-		if (!strip)
+		if (!strip) {
+			if (DEBUG) {
+				dump('FAILED TO SET TABSTRIP ATTRIBUTE ' + aAttr + '=' + aValue + '\n');
+				dump((new Error()).stack + '\n');
+			}
 			return;
+		}
 		var isFeatureAttribute = aAttr.indexOf('treestyletab-') == 0;
 		if (aValue) {
 			if (this._tabStripPlaceHolder)
@@ -1120,7 +1059,8 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, {
 		for (let i = 0, maxi = tabs.length; i < maxi; i++)
 		{
 			let tab = tabs[i];
-			if (tab.linkedBrowser.contentWindow == top)
+			let isInProcessTab = tab.linkedBrowser.getAttribute('remote') != 'true';
+			if (isInProcessTab && tab.linkedBrowser.contentWindow == top)
 				return tab;
 		}
 		return null;
@@ -2598,24 +2538,13 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, {
 		return size;
 	},
 
-	get shouldApplyNewPref()
+	shouldApplyNewPref : function TSTBase_shouldApplyNewPref(aKey)
 	{
 		return (
-					!this.applyOnlyForActiveWindow ||
-					this.window == this.topBrowserWindow
-				) &&
-				!this.inWindowDestoructionProcess;
-	},
- 
-	applyOnlyForActiveWindow : false, 
-	setPrefForActiveWindow : function TSTBase_setPrefForActiveWindow(aTask) {
-		TreeStyleTabBase.applyOnlyForActiveWindow = true;
-		try {
-			aTask.call(this);
-		}
-		finally {
-			TreeStyleTabBase.applyOnlyForActiveWindow = false;
-		}
+			!utils.isTreePrefChanging(aKey) &&
+			this.window == this.topBrowserWindow &&
+			!this.inWindowDestoructionProcess
+		);
 	}
    
 }); 
diff --git a/modules/browser.js b/modules/browser.js
index 8029094..be34f07 100644
--- a/modules/browser.js
+++ b/modules/browser.js
@@ -20,6 +20,7 @@
  * Contributor(s): YUKI "Piro" Hiroshi <piro.outsider.reflex at gmail.com>
  *                 wanabe <https://github.com/wanabe>
  *                 Tetsuharu OHZEKI <https://github.com/saneyuki>
+ *                 Xidorn Quan <https://github.com/upsuper> (Firefox 40+ support)
  *
  * Alternatively, the contents of this file may be used under the terms of
  * either the GNU General Public License Version 2 or later (the "GPL"), or
@@ -56,6 +57,7 @@ XPCOMUtils.defineLazyModuleGetter(this, 'TabpanelDNDObserver', 'resource://trees
 XPCOMUtils.defineLazyModuleGetter(this, 'AutoHideBrowser', 'resource://treestyletab-modules/autoHide.js');
 XPCOMUtils.defineLazyModuleGetter(this, 'ContentBridge', 'resource://treestyletab-modules/contentBridge.js');
 XPCOMUtils.defineLazyModuleGetter(this, 'BrowserUIShowHideObserver', 'resource://treestyletab-modules/browserUIShowHideObserver.js');
+XPCOMUtils.defineLazyModuleGetter(this, 'visuallyselectedTabs', 'resource://treestyletab-modules/lib/visuallyselectedTabs.jsm');
 
 XPCOMUtils.defineLazyGetter(this, 'window', function() {
 	Cu.import('resource://treestyletab-modules/lib/namespace.jsm');
@@ -213,9 +215,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 	set tabbarWidth(aValue)
 	{
 		this.setWindowValue(this.kTABBAR_WIDTH, aValue);
-		this.setPrefForActiveWindow(function() {
-			utils.setTreePref('tabbar.width', aValue);
-		});
+		utils.setTreePref('tabbar.width', aValue);
 		return aValue;
 	},
 */
@@ -230,9 +230,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 	set tabbarHeight(aValue)
 	{
 		this.setWindowValue(this.kTABBAR_HEIGHT, aValue);
-		this.setPrefForActiveWindow(function() {
-			utils.setTreePref('tabbar.height', aValue);
-		});
+		utils.setTreePref('tabbar.height', aValue);
 		return aValue;
 	},
  
@@ -358,7 +356,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 			this.window.UndoTabService.doOperation(
 				function() {
 					self._changeTabbarPosition(position);
-					delete self._temporaryPosition;
 				},
 				{
 					label  : utils.treeBundle.getString('undo_changeTabbarPosition_label'),
@@ -373,7 +370,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		}
 		else {
 			this._changeTabbarPosition(position);
-			delete this._temporaryPosition;
 		}
 		return position;
 	},
@@ -475,6 +471,11 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		return label;
 	},
  
+	getTabSoundButton : function TSTBrowser_getTabSoundButton(aTab) 
+	{
+		return this.document.getAnonymousElementByAttribute(aTab, 'anonid', 'soundplaying-icon');
+	},
+ 
 	getTabClosebox : function TSTBrowser_getTabClosebox(aTab) 
 	{
 		var d = this.document;
@@ -752,20 +753,16 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 			let width = this.tabbarWidth;
 			let minWidth = Math.max(this.MIN_TABBAR_WIDTH, this.scrollBox.boxObject.width);
 			if (minWidth > width) {
-				this.setPrefForActiveWindow((function() {
-					this.tabbarWidth = minWidth;
-					this.updateFloatingTabbar(this.kTABBAR_UPDATE_BY_PREF_CHANGE);
-				}).bind(this));
+				this.tabbarWidth = minWidth;
+				this.updateFloatingTabbar(this.kTABBAR_UPDATE_BY_PREF_CHANGE);
 			}
 		}
 		else {
 			let height = this.tabbarHeight;
 			let minHeight = Math.max(this.MIN_TABBAR_HEIGHT, this.scrollBox.boxObject.height);
 			if (minHeight > height) {
-				this.setPrefForActiveWindow((function() {
-					this.tabbarHeight = minHeight;
-					this.updateFloatingTabbar(this.kTABBAR_UPDATE_BY_PREF_CHANGE);
-				}).bind(this));
+				this.tabbarHeight = minHeight;
+				this.updateFloatingTabbar(this.kTABBAR_UPDATE_BY_PREF_CHANGE);
 			}
 		}
 	},
@@ -779,6 +776,8 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		var b = this.mTabBrowser;
 		b.tabContainer.treeStyleTab = this;
 
+		visuallyselectedTabs(b);
+
 		this.tabsHash = {};
 
 		if (b.tabContainer.parentNode.localName == 'toolbar')
@@ -1179,6 +1178,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 
 		var namedNodes = {
 				label        : this.getTabLabel(aTab),
+				sound        : this.getTabSoundButton(aTab),
 				close        : this.getTabClosebox(aTab),
 				twistyAnchor : this.getTabTwistyAnchorNode(aTab),
 				twisty       : this.getTabTwisty(aTab),
@@ -1246,6 +1246,16 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 				nodes.splice(nodes.indexOf(aNamedNodes.closeAnchor)+1, 0, aNamedNodes.close);
 		}
 
+		index = nodes.indexOf(aNamedNodes.sound);
+		if (index > -1) {
+			nodes.splice(index, 1);
+			let closeIndex = nodes.indexOf(aNamedNodes.close);
+			if (closeIndex < 0)
+				nodes.push(aNamedNodes.sound);
+			else
+				nodes.splice(closeIndex, 0, aNamedNodes.sound);
+		}
+
 		index = nodes.indexOf(aNamedNodes.twisty);
 		if (index > -1) {
 			nodes.splice(index, 1);
@@ -1355,9 +1365,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		if (!aIsTemporaryChange) {
 			let positionName = this.normalizeTabbarPosition(pos);
 			this.setWindowValue(this.kTABBAR_POSITION, positionName);
-			this.setPrefForActiveWindow(function() {
-				utils.setTreePref('tabbar.position', positionName);
-			});
+			utils.setTreePref('tabbar.position', positionName);
 		}
 
 		aOldPosition = aOldPosition || pos;
@@ -1559,6 +1567,11 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 			}
 		}
 
+		// init() can fail to set the tab-strip-element attribute for the internal box,
+		// because the custom binding can be not applied yet at the time.
+		// We have to set it certainly.
+		this.setTabStripAttribute(this.kTAB_STRIP_ELEMENT, true);
+
 		var tabs = this.getAllTabs(b);
 		for (let i = 0, maxi = tabs.length; i < maxi; i++)
 		{
@@ -1616,6 +1629,16 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		toolboxContainer = null;
 		scrollInnerBox = null;
 		scrollInnerBox = null;
+
+		return new Promise((function(aResolve, aReject) {
+			var onInitialized = (function() {
+				this.mTabBrowser.removeEventListener(this.kEVENT_TYPE_TABBAR_INITIALIZED, onInitialized, false);
+				if (!aIsTemporaryChange)
+					delete this._temporaryPosition;
+				aResolve();
+			}).bind(this);
+			this.mTabBrowser.addEventListener(this.kEVENT_TYPE_TABBAR_INITIALIZED, onInitialized, false);
+		}).bind(this));
 	},
 	
 	_startListenTabbarEvents : function TSTBrowser_startListenTabbarEvents() 
@@ -1642,7 +1665,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		strip.addEventListener('MozMouseHittest', this, true); // to block default behaviors of the tab bar
 		strip.addEventListener('mousedown',       this, true);
 		strip.addEventListener('click',           this, true);
-		strip.addEventListener('DOMMouseScroll',  this, true);
 
 		this.scrollBox.addEventListener('overflow', this, true);
 		this.scrollBox.addEventListener('underflow', this, true);
@@ -2240,7 +2262,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
   
 	destroy : function TSTBrowser_destroy() 
 	{
-		this.animationManager.removeTask(this.smoothScrollTask);
+		this.stopSmoothScroll();
 
 		Object.keys(this.timers).forEach(function(key) {
 			if (!this.timers[key])
@@ -2368,7 +2390,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		strip.removeEventListener('MozMouseHittest', this, true);
 		strip.removeEventListener('mousedown',       this, true);
 		strip.removeEventListener('click',           this, true);
-		strip.removeEventListener('DOMMouseScroll',  this, true);
 
 		this.scrollBox.removeEventListener('overflow', this, true);
 		this.scrollBox.removeEventListener('underflow', this, true);
@@ -2392,25 +2413,34 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
    
 /* toolbar customization */ 
 	
-	syncDestroyTabbar : function TSTBrowser_syncDestroyTabbar() 
+	destroyTabbar : function TSTBrowser_destroyTabbar() 
 	{
+		this._endListenTabbarEvents();
+		this.tabbarDNDObserver.endListenEvents();
+
 		this._lastTreeViewEnabledBeforeDestroyed = this.treeViewEnabled;
 		this.treeViewEnabled = false;
 		this.maxTreeLevel = 0;
 
 		this._lastTabbarPositionBeforeDestroyed = this.position;
 		if (this.position != 'top') {
-			let self = this;
-			this.doAndWaitDOMEvent(
-				this.kEVENT_TYPE_TABBAR_POSITION_CHANGED,
-				this.window,
-				100,
-				function() {
-					self.temporaryPosition = 'top';
-				}
-			);
+			this.temporaryPosition = 'top';
+			return new Promise((function(aResolve, aReject) {
+				var onRestored = (function() {
+					this.mTabBrowser.removeEventListener(this.kEVENT_TYPE_TABBAR_POSITION_CHANGED, onRestored, false);
+					aResolve();
+				}).bind(this);
+				this.mTabBrowser.addEventListener(this.kEVENT_TYPE_TABBAR_POSITION_CHANGED, onRestored, false);
+			}).bind(this))
+				.then(this.destroyTabbarPostProcess.bind(this));
 		}
-
+		else {
+			this.destroyTabbarPostProcess();
+			return Promise.resolve();
+		}
+	},
+	destroyTabbarPostProcess : function TSTBrowser_destroyTabbarPostProcess()
+	{
 		this.fixed = true;
 
 		var tabbar = this.mTabBrowser.tabContainer;
@@ -2427,10 +2457,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		this.destroyTabStrip(toolbar);
 		toolbar.classList.add(this.kTABBAR_TOOLBAR_READY);
 
-		this._endListenTabbarEvents();
-
-		this.tabbarDNDObserver.endListenEvents();
-
 		this.window.setTimeout(function(aSelf) {
 			aSelf.updateCustomizedTabsToolbar();
 		}, 100, this);
@@ -2445,7 +2471,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		aTabStrip.removeAttribute('orient');
 	},
  
-	syncReinitTabbar : function TSTBrowser_syncReinitTabbar() 
+	reinitTabbar : function TSTBrowser_reinitTabbar() 
 	{
 		this.ownerToolbar.classList.add(this.kTABBAR_TOOLBAR);
 		this.ownerToolbar.classList.remove(this.kTABBAR_TOOLBAR_READY);
@@ -2455,23 +2481,16 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		var position = this._lastTabbarPositionBeforeDestroyed || this.position;
 		delete this._lastTabbarPositionBeforeDestroyed;
 
-		var self = this;
-		this.doAndWaitDOMEvent(
-			this.kEVENT_TYPE_TABBAR_INITIALIZED,
-			this.window,
-			100,
-			function() {
-				self.initTabbar(position, 'top');
-			}
-		);
-		this.reinitAllTabs(true);
+		this.initTabbar(position, 'top').then((function() {
+			this.reinitAllTabs(true);
 
-		this.tabbarDNDObserver.startListenEvents();
+			this.tabbarDNDObserver.startListenEvents();
 
-		this.treeViewEnabled = this._lastTreeViewEnabledBeforeDestroyed;
-		delete this._lastTreeViewEnabledBeforeDestroyed;
+			this.treeViewEnabled = this._lastTreeViewEnabledBeforeDestroyed;
+			delete this._lastTreeViewEnabledBeforeDestroyed;
 
-		this.updateFloatingTabbar(this.kTABBAR_UPDATE_BY_RESET);
+			this.updateFloatingTabbar(this.kTABBAR_UPDATE_BY_RESET);
+		}).bind(this));
 	},
  
 	updateCustomizedTabsToolbar : function TSTBrowser_updateCustomizedTabsToolbar() 
@@ -2579,7 +2598,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		switch (aPrefName)
 		{
 			case 'extensions.treestyletab.tabbar.position':
-				if (this.shouldApplyNewPref)
+				if (this.shouldApplyNewPref('tabbar.position'))
 					this.position = value;
 				return;
 
@@ -2621,7 +2640,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 				return this.setTabbrowserAttribute(this.kFIRSTTAB_BORDER, value);
 
 			case 'extensions.treestyletab.tabbar.fixed.horizontal':
-				if (!this.shouldApplyNewPref)
+				if (!this.shouldApplyNewPref('tabbar.fixed.horizontal'))
 					return;
 				this.setTabbrowserAttribute(this.kFIXED+'-horizontal', value ? 'true' : null, b);
 			case 'extensions.treestyletab.maxTreeLevel.horizontal':
@@ -2631,7 +2650,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 				return;
 
 			case 'extensions.treestyletab.tabbar.fixed.vertical':
-				if (!this.shouldApplyNewPref)
+				if (!this.shouldApplyNewPref('tabbar.fixed.vertical'))
 					return;
 				this.setTabbrowserAttribute(this.kFIXED+'-vertical', value ? 'true' : null, b);
 			case 'extensions.treestyletab.maxTreeLevel.vertical':
@@ -2642,10 +2661,12 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 
 			case 'extensions.treestyletab.tabbar.width':
 			case 'extensions.treestyletab.tabbar.shrunkenWidth':
-				if (!this.shouldApplyNewPref)
+				if (!this.shouldApplyNewPref('tabbar.width'))
 					return;
+			case 'extensions.treestyletab.tabbar.width.override':
 				if (!this.autoHide.isResizing && this.isVertical) {
 					this.removeTabStripAttribute('width');
+					this.tabbarWidth = value;
 					this.setTabStripAttribute('width', this.autoHide.placeHolderWidthFromMode);
 					this.updateFloatingTabbar(this.kTABBAR_UPDATE_BY_PREF_CHANGE);
 				}
@@ -2653,9 +2674,11 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 				return;
 
 			case 'extensions.treestyletab.tabbar.height':
-				if (!this.shouldApplyNewPref)
+				if (!this.shouldApplyNewPref('tabbar.height'))
 					return;
+			case 'extensions.treestyletab.tabbar.height.override':
 				this._horizontalTabMaxIndentBase = 0;
+				this.tabbarHeight = value;
 				this.checkTabsIndentOverflow();
 				return;
 
@@ -2850,9 +2873,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 			case 'mousedown':
 				return this.onMouseDown(aEvent);
 
-			case 'DOMMouseScroll':
-				return this.onDOMMouseScroll(aEvent);
-
 			case 'scroll':
 				return this.onScroll(aEvent);
 
@@ -2910,7 +2930,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 			// toolbar customizing
 			case 'beforecustomization':
 				this.toolbarCustomizing = true;
-				return this.syncDestroyTabbar();
+				return this.destroyTabbar();
 			case 'aftercustomization':
 				// Ignore it, because 'aftercustomization' fired not
 				// following to 'beforecustomization' is invalid.
@@ -2919,7 +2939,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 				if (!this.toolbarCustomizing)
 					return;
 				this.toolbarCustomizing = false;
-				return this.syncReinitTabbar();
+				return this.reinitTabbar();
 			case 'customizationchange':
 				return this.updateCustomizedTabsToolbar();
 
@@ -2957,14 +2977,16 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		var lastX = this.lastScrollX;
 		var lastY = this.lastScrollY;
 		this.clearLastScrollPosition();
-		if (!this.smoothScrollTask &&
-			!this.scrollBox._smoothScrollTimer) { // don't restore scroll position if another scroll is already running.
-			let x = {}, y = {};
-			let scrollBoxObject = this.scrollBoxObject;
-			scrollBoxObject.getPosition(x, y);
-			if (x.value != lastX || y.value != lastY)
-				scrollBoxObject.scrollTo(lastX, lastY);
-		}
+
+		// don't restore scroll position if another scroll is already running.
+		if (this.isSmoothScrolling())
+			return;
+
+		let x = {}, y = {};
+		let scrollBoxObject = this.scrollBoxObject;
+		scrollBoxObject.getPosition(x, y);
+		if (x.value != lastX || y.value != lastY)
+			scrollBoxObject.scrollTo(lastX, lastY);
 	},
  
 	clearLastScrollPosition : function TSTBrowser_clearLastScrollPosition() 
@@ -2987,10 +3009,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
  
 	cancelPerformingAutoScroll : function TSTBrowser_cancelPerformingAutoScroll(aOnlyCancel) 
 	{
-		if (this.smoothScrollTask) {
-			this.animationManager.removeTask(this.smoothScrollTask);
-			this.smoothScrollTask = null;
-		}
+		this.stopSmoothScroll();
 		this.clearLastScrollPosition();
 
 		if (this.timers['cancelPerformingAutoScroll']) {
@@ -3868,7 +3887,8 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		}).bind(this), 0);
 
 		if (!tab.selected &&
-			this.mTabBrowser.currentURI.spec == 'about:sessionrestore') {
+			this.mTabBrowser.currentURI.spec == 'about:sessionrestore' &&
+			this.mTabBrowser.selectedBrowser.getAttribute('remote') != 'true') {
 			// because this is a chrome document, E10S is not applied.
 			let frame = this.mTabBrowser.contentWindow;
 			frame = frame.wrappedJSObject || frame;
@@ -4850,11 +4870,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		}
 	},
  
-	onDOMMouseScroll : function TSTBrowser_onDOMMouseScroll(aEvent) 
-	{
-		this.cancelPerformingAutoScroll();
-	},
- 
 	onScroll : function TSTBrowser_onScroll(aEvent) 
 	{
 		// restore scroll position when a tab is closed.
@@ -4898,7 +4913,8 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 
 		var resizedTopFrame = aEvent.originalTarget.top;
 		// for E10S tabs, isContentResize is always false.
-		var isContentResize = resizedTopFrame == this.mTabBrowser.contentWindow;
+		var isInProcessTab = this.mTabBrowser.selectedBrowser.getAttribute('remote') != 'true';
+		var isContentResize = isInProcessTab && resizedTopFrame == this.mTabBrowser.contentWindow;
 		var isChromeResize = resizedTopFrame == this.window;
 
 		if (isChromeResize && aEvent.originalTarget != resizedTopFrame) {
@@ -5121,17 +5137,16 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		}).bind(this), 0);
 	},
  
-	onBeforeFullScreenToggle : function TSTBrowser_onBeforeFullScreenToggle() 
+	onBeforeFullScreenToggle : function TSTBrowser_onBeforeFullScreenToggle(aEnterFS)
 	{
 		if (this.position != 'top') {
-			var isEnteringFullScreenMode = !this.window.fullScreen;
 			// entering to the DOM-fullscreen (ex. YouTube Player)
-			if (this.document.mozFullScreen && isEnteringFullScreenMode) {
+			if (this.document.mozFullScreen) {
 				this.setTabbrowserAttribute(this.kDOM_FULLSCREEN_ACTIVATED, true);
 			}
 			else {
 				if (this.document.documentElement.getAttribute(this.kDOM_FULLSCREEN_ACTIVATED) != 'true') {
-					if (isEnteringFullScreenMode)
+					if (aEnterFS)
 						this.autoHide.startForFullScreen();
 					else
 						this.autoHide.endForFullScreen();
@@ -6549,13 +6564,13 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
   
 /* scroll */ 
 	
-	scrollTo : function TSTBrowser_scrollTo(aEndX, aEndY) 
+	scrollTo : function TSTBrowser_scrollTo(aEndX, aEndY, aTargetElement) 
 	{
 		if (this.timers['cancelPerformingAutoScroll'])
 			return;
 
 		if (this.animationEnabled || this.smoothScrollEnabled) {
-			this.smoothScrollTo(aEndX, aEndY);
+			this.smoothScrollTo(aEndX, aEndY, null, aTargetElement);
 		}
 		else {
 			try {
@@ -6567,7 +6582,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		}
 	},
 	
-	smoothScrollTo : function TSTBrowser_smoothScrollTo(aEndX, aEndY, aDuration) 
+	smoothScrollTo : function TSTBrowser_smoothScrollTo(aEndX, aEndY, aDuration, aTargetElement) 
 	{
 		this.cancelPerformingAutoScroll(true);
 
@@ -6580,6 +6595,14 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		var deltaX = aEndX - startX;
 		var deltaY = aEndY - startY;
 
+		// Use Firefox's native smooth scroll if possible
+		// because it can be accelerated.
+		if (typeof this.scrollBox._smoothScrollByPixels == 'function') {
+			let amountToScroll = this.isVertical ? deltaY : deltaX ;
+			return this.scrollBox._smoothScrollByPixels(amountToScroll, aTargetElement);
+		}
+		// Otherwise fallback to TST's custom one.
+
 		var arrowscrollbox = scrollBoxObject.element.parentNode;
 		if (
 			arrowscrollbox &&
@@ -6646,7 +6669,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		};
 		this.animationManager.addTask(
 			this.smoothScrollTask,
-			0, 0, this.smoothScrollDuration || aDuration, this.window
+			0, 0, aDuration || this.smoothScrollDuration, this.window
 		);
 	},
 	_getMaxScrollSize : function(aScrollBoxObject) {
@@ -6659,10 +6682,38 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		return [maxX, maxY];
 	},
 	smoothScrollTask : null,
+ 
+	isSmoothScrolling : function TSTBrowser_isSmoothScrolling() 
+	{
+		return Boolean(
+			// Firefox's native scroll
+			this.scrollBox._smoothScrollTimer ||
+			// TST's custom one
+			this.smoothScrollTask
+		);
+	},
+ 
+	stopSmoothScroll : function TSTBrowser_stopSmoothScroll() 
+	{
+		// Firefox's native scroll
+		if (typeof this.scrollBox._stopSmoothScroll == 'function')
+			this.scrollBox._stopSmoothScroll();
+
+		// TST's custom one
+		if (this.smoothScrollTask) {
+			this.animationManager.removeTask(this.smoothScrollTask);
+			this.smoothScrollTask = null;
+		}
+	},
   
 	scrollToTab : function TSTBrowser_scrollToTab(aTab, aOnlyWhenCurrentTabIsInViewport) 
 	{
-		if (!aTab || !aTab.parentNode || this.isTabInViewport(aTab))
+		if (!aTab || !aTab.parentNode)
+			return;
+
+		this.cancelPerformingAutoScroll(true);
+
+		if (this.isTabInViewport(aTab))
 			return;
 
 		var b = this.mTabBrowser;
@@ -6694,25 +6745,34 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 				return;
 		}
 
-		this.scrollTo(targetX, targetY);
+		this.scrollTo(targetX, targetY, aTab);
 	},
  
 	scrollToTabSubtree : function TSTBrowser_scrollToTabSubtree(aTab) 
 	{
 		if (!aTab.parentNode) // do nothing for closed tab!
 			return;
-		var b          = this.mTabBrowser;
-		var descendant = this.getDescendantTabs(aTab);
-		var parentTabBox = aTab.boxObject;
+		var descendants = this.getDescendantTabs(aTab);
+		return this.scrollToTabs([aTab].concat(descendants));
+	},
+ 
+	scrollToTabs : function TSTBrowser_scrollToTabs(aTabs) 
+	{
+		var firstTab = aTabs[0];
+		if (!firstTab.parentNode) // do nothing for closed tab!
+			return;
+
+		var b            = this.mTabBrowser;
+		var parentTabBox = this.getFutureBoxObject(firstTab);
 
 		var containerPosition = this.tabStrip.boxObject[this.screenPositionProp];
 		var containerSize     = this.tabStrip.boxObject[this.sizeProp];
 		var parentPosition    = parentTabBox[this.screenPositionProp];
 
-		var lastVisible = aTab;
-		for (let i = descendant.length-1; i > -1; i--)
+		var lastVisible = firstTab;
+		for (let i = aTabs.length-1; i > -1; i--)
 		{
-			let tab = descendant[i];
+			let tab = aTabs[i];
 			if (this.isCollapsed(tab))
 				continue;
 
@@ -6724,26 +6784,31 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 			break;
 		}
 
-		if (this.isTabInViewport(aTab) && this.isTabInViewport(lastVisible))
+		this.cancelPerformingAutoScroll(true);
+
+		if (this.isTabInViewport(firstTab) && this.isTabInViewport(lastVisible))
 			return;
 
-		var lastPosition = lastVisible.boxObject[this.screenPositionProp];
-		var tabSize      = lastVisible.boxObject[this.sizeProp];
+		var lastVisibleBox = this.getFutureBoxObject(lastVisible);
+		var lastPosition = lastVisibleBox[this.screenPositionProp];
+		var tabSize      = lastVisibleBox[this.sizeProp];
 
-		if (lastPosition - parentPosition + tabSize > containerSize - tabSize) { // out of screen
+		var treeHeight = lastPosition - parentPosition + tabSize;
+		var treeIsLargerThanViewport = treeHeight > containerSize - tabSize;
+		if (treeIsLargerThanViewport) {
 			var endPos = parentPosition - this.getFirstNormalTab(b).boxObject[this.screenPositionProp] - tabSize * 0.5;
 			var endX = this.isVertical ? 0 : endPos ;
 			var endY = this.isVertical ? endPos : 0 ;
 			this.scrollTo(endX, endY);
 		}
-		else if (!this.isTabInViewport(aTab) && this.isTabInViewport(lastVisible)) {
-			this.scrollToTab(aTab);
+		else if (!this.isTabInViewport(firstTab) && this.isTabInViewport(lastVisible)) {
+			this.scrollToTab(firstTab);
 		}
-		else if (this.isTabInViewport(aTab) && !this.isTabInViewport(lastVisible)) {
+		else if (this.isTabInViewport(firstTab) && !this.isTabInViewport(lastVisible)) {
 			this.scrollToTab(lastVisible);
 		}
 		else if (parentPosition < containerPosition) {
-			this.scrollToTab(aTab);
+			this.scrollToTab(firstTab);
 		}
 		else {
 			this.scrollToTab(lastVisible);
diff --git a/modules/browserUIShowHideObserver.js b/modules/browserUIShowHideObserver.js
index 652b507..df1bae0 100644
--- a/modules/browserUIShowHideObserver.js
+++ b/modules/browserUIShowHideObserver.js
@@ -14,7 +14,7 @@
  * The Original Code is the Tree Style Tab.
  *
  * The Initial Developer of the Original Code is YUKI "Piro" Hiroshi.
- * Portions created by the Initial Developer are Copyright (C) 2014
+ * Portions created by the Initial Developer are Copyright (C) 2014-2015
  * the Initial Developer. All Rights Reserved.
  *
  * Contributor(s): YUKI "Piro" Hiroshi <piro.outsider.reflex at gmail.com>
@@ -36,6 +36,8 @@
 
 const EXPORTED_SYMBOLS = ['BrowserUIShowHideObserver']; 
 
+var DEBUG = false;
+
 Components.utils.import('resource://treestyletab-modules/constants.js');
 
 function BrowserUIShowHideObserver(aOwner, aBox) {
@@ -61,6 +63,7 @@ BrowserUIShowHideObserver.prototype = {
 			childList       : true,
 			attributes      : true,
 			subtree         : true,
+			attributeOldValue: DEBUG,
 			attributeFilter : [
 				'hidden',
 				'collapsed',
@@ -103,41 +106,73 @@ BrowserUIShowHideObserver.prototype = {
 		if (this.handlingAttrChange)
 			return;
 
-		var size = this.serializeBoxSize();
-		if (this.lastSize == size)
+		var target = aMutation.target;
+		var state = this.serializeBoxState(target);
+		if (target.__treestyletab_mutationObserver_lastState == state)
 			return;
 
 		var TST = this.owner.browser.treeStyleTab;
 		if (
+			// ignore modifications of each tab
+			TST.getTabFromChild(target) ||
+			// ignore modifications in the location bar (ex. identity icon)
+			TST.evaluateXPath(
+				'ancestor-or-self::xul:textbox',
+				target,
+				Components.interfaces.nsIDOMXPathResult.FIRST_ORDERED_NODE_TYPE
+			).singleNodeValue
+			)
+			return;
+
+		var toolbarVisible     = !TST.ownerToolbar.collapsed;
+		var tabbarVisible      = this.owner.browser.tabContainer.visible;
+		var placeHolderVisible = !TST.tabStripPlaceHolder.collapsed;
+		var tabbarVisibilityMismatching = (
+			toolbarVisible != placeHolderVisible ||
+			tabbarVisible  != placeHolderVisible
+		);
+
+		if (
 			// I must ignore show/hide of elements managed by TST,
 			// to avoid infinity loop.
-			aMutation.target.hasAttribute(TreeStyleTabConstants.kTAB_STRIP_ELEMENT) &&
+			target.hasAttribute(TreeStyleTabConstants.kTAB_STRIP_ELEMENT) &&
 			// However, I have to synchronize visibility of the real
 			// tab bar and the placeholder's one. If they have
 			// different visibility, then the tab bar is shown or
 			// hidden by "auto hide tab bar" feature of someone
 			// (Pale Moon, Tab Mix Plus, etc.)
-			this.owner.browser.tabContainer.visible != TST.tabStripPlaceHolder.collapsed
+			!tabbarVisibilityMismatching
 			)
 			return;
 
+		if (DEBUG) {
+			dump('BrowserUIShowHideObserver_onAttributeModified ' +
+			     target.localName + '#' + target.id + '.' + target.className + ', ' +
+			     aMutation.attributeName + ', ' +
+			     aMutation.oldValue + ' => ' +
+			     target.getAttribute(aMutation.attributeName) + '\n');
+		}
+
 		this.handlingAttrChange = true;
 
 		TST.updateFloatingTabbar(TreeStyleTabConstants.kTABBAR_UPDATE_BY_WINDOW_RESIZE);
 
 		var w = this.box.ownerDocument.defaultView;
 		w.setTimeout((function() {
-			this.lastSize = this.serializeBoxSize();
+			target.__treestyletab_mutationObserver_lastState = this.serializeBoxState(target);
 			this.handlingAttrChange = false;
 		}).bind(this), 10);
 	},
 
-	serializeBoxSize : function BrowserUIShowHideObserver_serializeBoxSize(aBox)
+	serializeBoxState : function BrowserUIShowHideObserver_serializeBoxState(aElement)
 	{
-		aBox = aBox || this.box.boxObject;
+		aElement = aElement || this.box;
+		var box = aElement.boxObject || {}; // Some times there is no boxObject (ex. HTML element)
 		return JSON.stringify({
-			width  : aBox.width,
-			height : aBox.height
+			width  : box.width || 0,
+			height : box.height || 0,
+			hidden : Boolean(aElement.hidden),
+			collapsed : Boolean(aElement.collapsed)
 		});
 	}
 };
diff --git a/modules/contentBridge.js b/modules/contentBridge.js
index 3bc0143..8a90fd7 100644
--- a/modules/contentBridge.js
+++ b/modules/contentBridge.js
@@ -14,7 +14,7 @@
  * The Original Code is the Tree Style Tab.
  *
  * The Initial Developer of the Original Code is YUKI "Piro" Hiroshi.
- * Portions created by the Initial Developer are Copyright (C) 2014
+ * Portions created by the Initial Developer are Copyright (C) 2014-2015
  * the Initial Developer. All Rights Reserved.
  *
  * Contributor(s): YUKI "Piro" Hiroshi <piro.outsider.reflex at gmail.com>
@@ -50,6 +50,16 @@ function ContentBridge(aTab, aTabBrowser)
 {
 	this.init(aTab, aTabBrowser);
 }
+
+ContentBridge.install = function CB_installScript(aWindow) {
+	aWindow.messageManager.loadFrameScript(TreeStyleTabConstants.CONTENT_SCRIPT_AUTOHIDE, true);
+};
+
+ContentBridge.uninstall = function CB_installScript(aWindow) {
+	aWindow.messageManager.broadcastAsyncMessage(TreeStyleTabConstants.MESSAGE_TYPE, {
+		command : TreeStyleTabConstants.COMMAND_SHUTDOWN
+	});
+};
  
 ContentBridge.prototype = inherit(TreeStyleTabConstants, { 
 	mTab : null,
@@ -62,16 +72,13 @@ ContentBridge.prototype = inherit(TreeStyleTabConstants, {
 		this.handleMessage = this.handleMessage.bind(this);
 		this.checkPluginAreaExistenceResolvers = {};
 
-		var manager = this.mTab.linkedBrowser.messageManager;
-		// manager.loadFrameScript(this.CONTENT_SCRIPT, true);
-		manager.loadFrameScript(this.CONTENT_SCRIPT_AUTOHIDE, true);
+		var manager = this.mTab.ownerDocument.defaultView.messageManager;
 		manager.addMessageListener(this.MESSAGE_TYPE, this.handleMessage);
 	},
 	destroy : function CB_destroy()
 	{
-		var manager = this.mTab.linkedBrowser.messageManager;
+		var manager = this.mTab.ownerDocument.defaultView.messageManager;
 		manager.removeMessageListener(this.MESSAGE_TYPE, this.handleMessage);
-		this.sendAsyncCommand(this.COMMAND_SHUTDOWN);
 
 		delete this.mTab;
 		delete this.mTabBrowser;
@@ -97,7 +104,13 @@ ContentBridge.prototype = inherit(TreeStyleTabConstants, {
 	},
 	handleMessage : function CB_handleMessage(aMessage)
 	{
-		// dump(JSON.stringify(aMessage.json)+'\n');
+//		dump('*********************handleMessage*******************\n');
+//		dump('TARGET IS: '+aMessage.target.localName+'\n');
+//		dump(JSON.stringify(aMessage.json)+'\n');
+
+		if (aMessage.target != this.mTab.linkedBrowser)
+		  return;
+
 		switch (aMessage.json.command)
 		{
 			case this.COMMAND_REPORT_MOUSEDOWN:
diff --git a/modules/lib/animationManager.js b/modules/lib/animationManager.js
index c8572cb..7dd03f6 100644
--- a/modules/lib/animationManager.js
+++ b/modules/lib/animationManager.js
@@ -19,7 +19,7 @@
    // restart after doing something
    window['piro.sakura.ne.jp'].animationManager.start();
 
- license: The MIT License, Copyright (c) 2009-2014 YUKI "Piro" Hiroshi
+ license: The MIT License, Copyright (c) 2009-2015 YUKI "Piro" Hiroshi
  original:
    http://github.com/piroor/fxaddonlib-animation-manager
 */
@@ -41,7 +41,7 @@ if (typeof window == 'undefined' ||
 }
 
 (function() {
-	const currentRevision = 18;
+	const currentRevision = 20;
 
 	if (!('piro.sakura.ne.jp' in window)) window['piro.sakura.ne.jp'] = {};
 
@@ -78,9 +78,13 @@ if (typeof window == 'undefined' ||
 			if (this._windows.indexOf(aRelatedWindow) < 0)
 				this._windows.push(aRelatedWindow);
 
+			var startTime = aRelatedWindow ? aRelatedWindow.mozAnimationStartTime : undefined;
+			// mozAnimationStartTime is removed at Firefox 42.
+			// see: https://bugzilla.mozilla.org/show_bug.cgi?id=909154
+			startTime = startTime || Date.now();
 			this.tasks.push({
 				task      : aTask,
-				start     : aRelatedWindow ? aRelatedWindow.mozAnimationStartTime : Date.now(),
+				start     : startTime,
 				beginning : aBeginningValue,
 				change    : aTotalChange,
 				duration  : aDuration,
@@ -120,7 +124,7 @@ if (typeof window == 'undefined' ||
 					return;
 				this._animatingWindows.push(aWindow);
 				let self = this;
-				aWindow.mozRequestAnimationFrame(function() {
+				aWindow.requestAnimationFrame(function() {
 					self.processAnimationFrame(aWindow);
 				});
 			}, this);
@@ -168,7 +172,7 @@ if (typeof window == 'undefined' ||
 			this._cleanUpWindows();
 			if (this._animatingWindows.indexOf(aWindow) > -1) {
 				let self = this;
-				aWindow.mozRequestAnimationFrame(function() {
+				aWindow.requestAnimationFrame(function() {
 					self.processAnimationFrame(aWindow);
 				});
 			}
diff --git a/modules/lib/visuallyselectedTabs.jsm b/modules/lib/visuallyselectedTabs.jsm
new file mode 100644
index 0000000..c636fc2
--- /dev/null
+++ b/modules/lib/visuallyselectedTabs.jsm
@@ -0,0 +1,67 @@
+/*
+ Backporting "visuallyselected" for Firefox 31-40
+
+ See also:
+   http://www.hackermusings.com/2015/06/electrolysis-a-tale-of-tab-switching-and-themes/
+
+ Usage:
+   Components.utils.import(".../path/to/visuallyselectedTabs.jsm");
+   visuallyselectedTabs(gBrowser);
+
+ license: The MIT License, Copyright (c) 2015 YUKI "Piro" Hiroshi
+ original:
+   http://github.com/piroor/fxaddonlib-visuallyselected-tabs
+*/
+
+var EXPORTED_SYMBOLS = ['visuallyselectedTabs'];
+
+Components.utils.import('resource://gre/modules/Services.jsm');
+
+function setVisuallySelected(aNode, aSelected) {
+  if (!aNode || typeof aNode.setAttribute != 'function')
+    return;
+
+  if (aSelected)
+    aNode.setAttribute('visuallyselected', true);
+  else
+    aNode.removeAttribute('visuallyselected');
+
+  Array.forEach(aNode.childNodes, function(aChild) {
+    setVisuallySelected(aChild, aSelected);
+  });
+
+  var anonymousChildren = aNode.ownerDocument.getAnonymousNodes(aNode);
+  if (anonymousChildren && anonymousChildren.length > 0)
+    Array.forEach(anonymousChildren, function(aAnonymousChild) {
+      setVisuallySelected(aAnonymousChild, aSelected);
+    });
+}
+
+function visuallyselectedTabs(aTabBrowser) {
+  if (!aTabBrowser ||
+      aTabBrowser.localName != 'tabbrowser' ||
+      aTabBrowser.__visuallyselectedTabsInstalled ||
+      Services.vc.compare(Services.appinfo.platformVersion, '41.0a1') >= 0)
+    return;
+
+  aTabBrowser.__visuallyselectedTabsInstalled = true;
+
+  function onTabSelect(aEvent) {
+    var prevTab = aEvent.detail && aEvent.detail.previousTab;
+    if (prevTab)
+      setVisuallySelected(prevTab, false);
+
+    setVisuallySelected(aEvent.originalTarget, true);
+  }
+
+  var tabsContainer = aTabBrowser.tabContainer;
+  tabsContainer.addEventListener('TabSelect', onTabSelect, false);
+
+  setVisuallySelected(aTabBrowser.selectedTab, true);
+
+  var document = aTabBrowser.ownerDocument;
+  document.addEventListener('unload', function onUnload(aEvent) {
+    document.removeEventListener('unload', onUnload, false);
+    tabsContainer.removeEventListener('TabSelect', onTabSelect, false);
+  }, false);
+}
diff --git a/modules/tabbarDNDObserver.js b/modules/tabbarDNDObserver.js
index d4204ac..dfd2598 100644
--- a/modules/tabbarDNDObserver.js
+++ b/modules/tabbarDNDObserver.js
@@ -1246,7 +1246,16 @@ catch(e) {
 		{
 			case 'text/x-moz-place':
 				{
-					let uri = JSON.parse(aData).uri;
+					let item = JSON.parse(aData);
+					if (item.type == 'text/x-moz-place-container') {
+						// When a blank folder is dropped, just open a dummy tab with the folder name.
+						let children = item.children;
+						if (children && children.length == 0) {
+							let uri = this.treeStyleTab.getGroupTabURI({ title: item.title });
+							return [uri];
+						}
+					}
+					let uri = item.uri;
 					if (uri)
 						return uri;
 					else
diff --git a/modules/utils.js b/modules/utils.js
index da96b50..a3a2f7b 100644
--- a/modules/utils.js
+++ b/modules/utils.js
@@ -43,6 +43,7 @@ const Ci = Components.interfaces;
 const Cu = Components.utils;
 
 Cu.import('resource://gre/modules/XPCOMUtils.jsm');
+Cu.import('resource://gre/modules/Timer.jsm');
 Cu.import('resource://treestyletab-modules/constants.js');
 
 XPCOMUtils.defineLazyGetter(this, 'window', function() {
@@ -82,11 +83,15 @@ let TreeStyleTabUtils = {
 
 	setTreePref : function TSTUtils_setTreePref(aPrefstring, aNewValue)
 	{
+		if (this.isPrefChanging(aPrefstring))
+			return aNewValue;
 		return prefs.setPref(TST_PREF_PREFIX + aPrefstring, aNewValue);
 	},
 
 	clearTreePref : function TSTUtils_clearTreePref(aPrefstring)
 	{
+		if (this.isPrefChanging(aPrefstring))
+			return null;
 		return prefs.clearPref(TST_PREF_PREFIX + aPrefstring);
 	},
 
@@ -332,5 +337,41 @@ let TreeStyleTabUtils = {
 			return source.indexOf(aMatcher) > -1;
 		else
 			return aMatcher.test(source);
+	},
+
+	isPrefChanging : function utils_isPrefChanging(aKey) 
+	{
+		return aKey in this.changingPrefs;
+	},
+	isTreePrefChanging : function utils_isPrefChanging(aKey) 
+	{
+		return (TST_PREF_PREFIX + aKey) in this.changingPrefs ||
+				this.isPrefChanging(aKey);
+	},
+
+/* Pref Listener */ 
+	domains : [ 
+		'extensions.treestyletab.'
+	],
+
+	observe : function utils_observe(aSubject, aTopic, aData) 
+	{
+		switch (aTopic)
+		{
+			case 'nsPref:changed':
+				this.onPrefChange(aData);
+				return;
+		}
+	},
+
+	changingPrefs : {},
+	onPrefChange : function utils_onPrefChange(aPrefName) 
+	{
+		this.changingPrefs[aPrefName] = true;
+		setTimeout((function() {
+			delete this.changingPrefs[aPrefName];
+		}).bind(this));
 	}
 };
+
+prefs.addPrefListener(TreeStyleTabUtils);
diff --git a/modules/window.js b/modules/window.js
index b807215..424f346 100644
--- a/modules/window.js
+++ b/modules/window.js
@@ -65,6 +65,7 @@ XPCOMUtils.defineLazyModuleGetter(this, 'AutoHideWindow', 'resource://treestylet
 XPCOMUtils.defineLazyModuleGetter(this, 'TreeStyleTabThemeManager', 'resource://treestyletab-modules/themeManager.js');
 XPCOMUtils.defineLazyModuleGetter(this, 'FullscreenObserver', 'resource://treestyletab-modules/fullscreenObserver.js');
 XPCOMUtils.defineLazyModuleGetter(this, 'BrowserUIShowHideObserver', 'resource://treestyletab-modules/browserUIShowHideObserver.js');
+XPCOMUtils.defineLazyModuleGetter(this, 'ContentBridge', 'resource://treestyletab-modules/contentBridge.js');
 
 XPCOMUtils.defineLazyServiceGetter(this, 'SessionStore',
   '@mozilla.org/browser/sessionstore;1', 'nsISessionStore');
@@ -108,12 +109,10 @@ TreeStyleTabWindow.prototype = inherit(TreeStyleTabBase, {
 	set position(aValue)
 	{
 		var setPosition = (function() {
-			this.setPrefForActiveWindow((function() {
-				if (this.preInitialized && this.browser.treeStyleTab)
-					this.browser.treeStyleTab.position = aValue;
-				else
-					this.base.position = aValue;
-			}).bind(this));
+			if (this.preInitialized && this.browser.treeStyleTab)
+				this.browser.treeStyleTab.position = aValue;
+			else
+				this.base.position = aValue;
 		}).bind(this);
 
 		if ('UndoTabService' in this.window && this.window.UndoTabService.isUndoable()) {
@@ -419,6 +418,8 @@ TreeStyleTabWindow.prototype = inherit(TreeStyleTabBase, {
 
 		this.initUninstallationListener();
 
+		ContentBridge.install(w);
+
 		w.TreeStyleTabWindowHelper.onBeforeBrowserInit();
 		this.initTabBrowser(this.browser);
 		w.TreeStyleTabWindowHelper.onAfterBrowserInit();
@@ -535,6 +536,8 @@ TreeStyleTabWindow.prototype = inherit(TreeStyleTabBase, {
 
 				w.messageManager.removeMessageListener('SessionStore:restoreTabContentStarted', this);
 
+				ContentBridge.uninstall(w);
+
 				this.fullscreenObserver.destroy();
 				delete this.fullscreenObserver;
 
@@ -1369,10 +1372,8 @@ TreeStyleTabWindow.prototype = inherit(TreeStyleTabBase, {
 
 		var newFixed = b.getAttribute(this.kFIXED+'-'+orient) != 'true';
 		this.setTabbrowserAttribute(this.kFIXED+'-'+orient, newFixed || null, b);
-		this.setPrefForActiveWindow(function() {
-			b.treeStyleTab.fixed = newFixed;
-			utils.setTreePref('tabbar.fixed.'+orient, newFixed);
-		});
+		b.treeStyleTab.fixed = newFixed;
+		utils.setTreePref('tabbar.fixed.'+orient, newFixed);
 
 		b.treeStyleTab.updateTabbarState();
 	},
diff --git a/skin/classic/treestyletab/Darwin-styled.css b/skin/classic/treestyletab/Darwin-styled.css
index f63070f..d2b111f 100644
--- a/skin/classic/treestyletab/Darwin-styled.css
+++ b/skin/classic/treestyletab/Darwin-styled.css
@@ -14,11 +14,11 @@
 
 #main-window
   .tabbrowser-tabs[treestyletab-mode="horizontal"][treestyletab-tabs-indented="true"]
-  .tabbrowser-tab:not([selected="true"])
+  .tabbrowser-tab:not([visuallyselected="true"])
   .tab-close-button,
 #main-window
   .tabbrowser-tabs[treestyletab-mode="horizontal"][treestyletab-tabs-indented="true"]
-  .tabbrowser-tab[selected="true"]
+  .tabbrowser-tab[visuallyselected="true"]
   .tab-close-button {
 	background-position: left bottom;
 	background-repeat: repeat-x;
@@ -26,15 +26,15 @@
 
 #main-window:-moz-window-inactive
   .tabbrowser-tabs[treestyletab-mode="horizontal"][treestyletab-tabs-indented="true"]
-  .tabbrowser-tab:not([selected="true"])
+  .tabbrowser-tab:not([visuallyselected="true"])
   .tab-close-button,
 #main-window:-moz-window-inactive
   .tabbrowser-tabs[treestyletab-mode="horizontal"][treestyletab-tabs-indented="true"]
-  .tabbrowser-tab[selected="true"]
+  .tabbrowser-tab[visuallyselected="true"]
   .tab-close-button,
 #main-window:-moz-window-inactive
   .tabbrowser-tabs[treestyletab-mode="horizontal"][treestyletab-tabs-indented="true"]
-  .tabbrowser-tab[selected="true"]
+  .tabbrowser-tab[visuallyselected="true"]
   .tab-close-button {
 	background-position: left bottom;
 	background-repeat: repeat-x;
diff --git a/skin/classic/treestyletab/Linux-config.css b/skin/classic/treestyletab/Linux-config.css
index 29df337..1644b2b 100644
--- a/skin/classic/treestyletab/Linux-config.css
+++ b/skin/classic/treestyletab/Linux-config.css
@@ -1,32 +1,32 @@
 @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
 
 radio[pane="prefpane-appearance"]:hover,
-radio[pane="prefpane-appearance"][selected="true"] {
+radio[pane="prefpane-appearance"][visuallyselected="true"] {
 	-moz-image-region: rect(0px, 32px, 32px, 0px);
 }
 
 radio[pane="prefpane-style"]:hover,
-radio[pane="prefpane-style"][selected="true"] {
+radio[pane="prefpane-style"][visuallyselected="true"] {
 	-moz-image-region: rect(0px, 32px, 32px, 0px);
 }
 
 radio[pane="prefpane-menu"]:hover,
-radio[pane="prefpane-menu"][selected="true"] {
+radio[pane="prefpane-menu"][visuallyselected="true"] {
 	-moz-image-region: rect(0px, 32px, 32px, 0px);
 }
 
 radio[pane="prefpane-tab"]:hover,
-radio[pane="prefpane-tab"][selected="true"] {
+radio[pane="prefpane-tab"][visuallyselected="true"] {
 	-moz-image-region: rect(0px, 64px, 32px, 32px);
 }
 
 radio[pane="prefpane-autohide"]:hover,
-radio[pane="prefpane-autohide"][selected="true"] {
+radio[pane="prefpane-autohide"][visuallyselected="true"] {
 	-moz-image-region: rect(0px, 64px, 32px, 32px);
 }
 
 radio[pane="prefpane-advanced"]:hover,
-radio[pane="prefpane-advanced"][selected="true"] {
+radio[pane="prefpane-advanced"][visuallyselected="true"] {
 	-moz-image-region: rect(0px, 224px, 32px, 192px);
 }
 
diff --git a/skin/classic/treestyletab/Linux-styled.css b/skin/classic/treestyletab/Linux-styled.css
index 57eb5b9..bd0dd49 100644
--- a/skin/classic/treestyletab/Linux-styled.css
+++ b/skin/classic/treestyletab/Linux-styled.css
@@ -4,9 +4,9 @@
 /* horizontal tree */
 
 .tabbrowser-tabs[treestyletab-tabbar-position="top"][treestyletab-tabs-indented="true"]
-  .tabbrowser-tab:not([selected="true"]),
+  .tabbrowser-tab:not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-tabbar-position="top"][treestyletab-tabs-indented="true"]
-  .tabbrowser-tab[selected="true"] {
+  .tabbrowser-tab[visuallyselected="true"] {
 	border-radius: 0 0 0 0;
 	-moz-border-radius: 0 0 0 0;
 	height: 1.5em;
diff --git a/skin/classic/treestyletab/WINNT-styled.css b/skin/classic/treestyletab/WINNT-styled.css
index f1e7257..c159009 100644
--- a/skin/classic/treestyletab/WINNT-styled.css
+++ b/skin/classic/treestyletab/WINNT-styled.css
@@ -1,13 +1,13 @@
 /* horizontal tree */
 
 .tabbrowser-tabs[treestyletab-tabbar-position="top"][treestyletab-tabs-indented="true"]
-  .tabbrowser-tab:not([selected="true"]),
+  .tabbrowser-tab:not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-tabbar-position="top"][treestyletab-tabs-indented="true"]
-  .tabbrowser-tab[selected="true"],
+  .tabbrowser-tab[visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-tabbar-position="top"][treestyletab-tabs-indented="true"]
-  .tabbrowser-tab:hover:not([selected="true"]),
+  .tabbrowser-tab:hover:not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-tabbar-position="top"][treestyletab-tabs-indented="true"]
-  .tabbrowser-tab:hover[selected="true"] {
+  .tabbrowser-tab:hover[visuallyselected="true"] {
 	border-radius: 0 0 0 0;
 	-moz-border-radius: 0 0 0 0;
 	border-top-width: 1px;
diff --git a/skin/classic/treestyletab/base.css b/skin/classic/treestyletab/base.css
index 6e69a51..7d70423 100644
--- a/skin/classic/treestyletab/base.css
+++ b/skin/classic/treestyletab/base.css
@@ -103,9 +103,9 @@
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])[movingtab]
   .tabbrowser-tab[beforeselected]:not([last-visible-tab])::after,
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab:not([selected]):not([afterselected-visible]):not([afterhovered]):not([first-visible-tab]):not(:hover)::before,
+  .tabbrowser-tab:not([visuallyselected]):not([afterselected-visible]):not([afterhovered]):not([first-visible-tab]):not(:hover)::before,
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"]):not([overflow])
-  .tabbrowser-tab[last-visible-tab]:not([selected]):not([beforehovered]):not(:hover)::after {
+  .tabbrowser-tab[last-visible-tab]:not([visuallyselected]):not([beforehovered]):not(:hover)::after {
 	/* hide it anyway!! */
 	content: none;
 	display: none;
@@ -126,8 +126,8 @@
     https://github.com/piroor/treestyletab/pull/843
  */
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab:not([selected="true"]),
+  .tabbrowser-tab:not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"] {
+  .tabbrowser-tab[visuallyselected="true"] {
 	z-index: auto;
 }
diff --git a/skin/classic/treestyletab/metal/base.css b/skin/classic/treestyletab/metal/base.css
index ae062b7..d38fe58 100644
--- a/skin/classic/treestyletab/metal/base.css
+++ b/skin/classic/treestyletab/metal/base.css
@@ -28,9 +28,9 @@
 .tabbrowser-tabs[treestyletab-mode="vertical"]
   .tabbrowser-tab:first-child:hover,
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab:first-child[selected="true"],
+  .tabbrowser-tab:first-child[visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab:first-child[selected="true"]:hover {
+  .tabbrowser-tab:first-child[visuallyselected="true"]:hover {
 	margin-top: 5px !important;
 }
 
@@ -146,7 +146,7 @@ tabbrowser[treestyletab-tabbar-position="right"]
   .tabbrowser-tab:hover
   .tab-icon,
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"]:hover
+  .tabbrowser-tab[visuallyselected="true"]:hover
   .tab-icon {
 	background: url("icon-bg.png") no-repeat right center !important;
 }
@@ -154,7 +154,7 @@ tabbrowser[treestyletab-tabbar-position="right"]
   .tabbrowser-tab:hover
   .tab-icon,
 .tabbrowser-tabs[treestyletab-tab-contents-inverted="true"]
-  .tabbrowser-tab[selected="true"]:hover
+  .tabbrowser-tab[visuallyselected="true"]:hover
   .tab-icon {
 	background-position: left center !important;
 }
diff --git a/skin/classic/treestyletab/metal/tab.css b/skin/classic/treestyletab/metal/tab.css
index e5e85bb..90a7953 100644
--- a/skin/classic/treestyletab/metal/tab.css
+++ b/skin/classic/treestyletab/metal/tab.css
@@ -5,9 +5,9 @@
 .tabbrowser-tabs[treestyletab-mode="vertical"]
   .tabbrowser-tab:hover,
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"],
+  .tabbrowser-tab[visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"]:hover {
+  .tabbrowser-tab[visuallyselected="true"]:hover {
 	appearance: none !important;
 	-moz-appearance: none !important;
 	border: 2px solid transparent !important;
@@ -34,9 +34,9 @@
   :-moz-any(.tabbrowser-tab:not([pinned]),
             .tabbrowser-tab[pinned]:not([titlechanged])):hover,
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"],
+  .tabbrowser-tab[visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"]:hover {
+  .tabbrowser-tab[visuallyselected="true"]:hover {
 	background: none transparent !important;
 }
 
@@ -58,44 +58,44 @@
 	width: 0;
 }
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab:hover .tab-background:not([selected="true"]) {
+  .tabbrowser-tab:hover .tab-background:not([visuallyselected="true"]) {
 	background-image: none;
 }
 
 /* for Mac OS X */
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  :-moz-any(.tab-content:not([pinned]):not([selected="true"]),
-            .tab-content[pinned]:not([titlechanged]):not([selected="true"]),
-            .tab-content:not([pinned])[selected="true"],
-            .tab-content[pinned]:not([titlechanged])[selected="true"],
-            .tab-background-start:not([selected="true"]),
-            .tab-background-middle:not([selected="true"]):not([pinned]),
-            .tab-background-middle:not([selected="true"])[pinned]:not([titlechanged]),
-            .tab-background-end:not([selected="true"]),
-            .tab-background-start[selected="true"],
-            .tab-background-middle[selected="true"],
-            .tab-background-end[selected="true"]) {
+  :-moz-any(.tab-content:not([pinned]):not([visuallyselected="true"]),
+            .tab-content[pinned]:not([titlechanged]):not([visuallyselected="true"]),
+            .tab-content:not([pinned])[visuallyselected="true"],
+            .tab-content[pinned]:not([titlechanged])[visuallyselected="true"],
+            .tab-background-start:not([visuallyselected="true"]),
+            .tab-background-middle:not([visuallyselected="true"]):not([pinned]),
+            .tab-background-middle:not([visuallyselected="true"])[pinned]:not([titlechanged]),
+            .tab-background-end:not([visuallyselected="true"]),
+            .tab-background-start[visuallyselected="true"],
+            .tab-background-middle[visuallyselected="true"],
+            .tab-background-end[visuallyselected="true"]) {
 	border: 0 none !important;
 	background: transparent !important;
 }
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  :-moz-any(.tab-background-start:not([selected="true"]),
-            .tab-background-middle:not([selected="true"]),
-            .tab-background-end:not([selected="true"]),
-            .tab-background-start[selected="true"],
-            .tab-background-middle[selected="true"],
-            .tab-background-end[selected="true"]) {
+  :-moz-any(.tab-background-start:not([visuallyselected="true"]),
+            .tab-background-middle:not([visuallyselected="true"]),
+            .tab-background-end:not([visuallyselected="true"]),
+            .tab-background-start[visuallyselected="true"],
+            .tab-background-middle[visuallyselected="true"],
+            .tab-background-end[visuallyselected="true"]) {
 	mask: none !important;
 }
 /* highlighted pinned tabs */
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[pinned][titlechanged]:not([selected="true"]) .tab-background {
+  .tabbrowser-tab[pinned][titlechanged]:not([visuallyselected="true"]) .tab-background {
 	background-image: radial-gradient(circle farthest-corner at 50% 3px,
 	                                  Highlight 3%,
 	                                  rgba(255, 255, 255, 0) 80%);
 }
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[pinned][titlechanged]:not([selected="true"]):hover .tab-background {
+  .tabbrowser-tab[pinned][titlechanged]:not([visuallyselected="true"]):hover .tab-background {
 	background-image: radial-gradient(circle farthest-corner at 50% 3px,
 	                                  Highlight 3%,
 	                                  rgba(255, 255, 255, 0) 100%);
@@ -165,7 +165,7 @@
 
 /* foreground, left */
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"]:not([pinned])
+  .tabbrowser-tab[visuallyselected="true"]:not([pinned])
   .tab-stack {
 	-moz-border-image: url("tab-active-selected-l.png") 10 5 10 10 / 10px 5px 10px 10px !important;
 	-moz-border-image-slice: 10 5 10 10 fill !important;
@@ -174,7 +174,7 @@
 
 /* foreground, right */
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-tab-inverted="true"]
-  .tabbrowser-tab[selected="true"]:not([pinned])
+  .tabbrowser-tab[visuallyselected="true"]:not([pinned])
   .tab-stack {
 	-moz-border-image: url("tab-active-selected-r.png") 10 10 10 5 / 10px 10px 10px 5px !important;
 	-moz-border-image-slice: 10 10 10 5 fill !important;
@@ -191,10 +191,10 @@
   .tabbrowser-tab:hover
   .tab-content[pinned],
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected]:not(:hover)
+  .tabbrowser-tab[visuallyselected]:not(:hover)
   .tab-content[pinned],
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected]:hover
+  .tabbrowser-tab[visuallyselected]:hover
   .tab-content[pinned] {
 	-moz-border-image: none !important;
 	border-image: none !important;
@@ -209,10 +209,10 @@
   .tab-content[pinned]:not([titlechanged]),
 .tabbrowser-tabs[treestyletab-mode="vertical"]
   .tabbrowser-tab:not(:hover)
-  .tab-content[pinned][selected],
+  .tab-content[pinned][visuallyselected],
 .tabbrowser-tabs[treestyletab-mode="vertical"]
   .tabbrowser-tab:hover
-  .tab-content[pinned][selected] {
+  .tab-content[pinned][visuallyselected] {
 	background: none !important;
 }
 
@@ -221,9 +221,9 @@
 .tabbrowser-tabs[treestyletab-mode="vertical"]
   .tabbrowser-tab[pinned]:hover,
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[pinned][selected="true"]:not(:hover),
+  .tabbrowser-tab[pinned][visuallyselected="true"]:not(:hover),
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[pinned][selected="true"]:hover {
+  .tabbrowser-tab[pinned][visuallyselected="true"]:hover {
 	border: none !important;
 	border-radius: 0 !important;
 	-moz-border-radius: 0 !important;
@@ -234,9 +234,9 @@
 .tabbrowser-tabs[treestyletab-mode="vertical"]
   .tabbrowser-tab[pinned]:not([titlechanged]):hover,
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[pinned][selected="true"]:not(:hover),
+  .tabbrowser-tab[pinned][visuallyselected="true"]:not(:hover),
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[pinned][selected="true"]:hover {
+  .tabbrowser-tab[pinned][visuallyselected="true"]:hover {
 	background: none !important;
 }
 
@@ -256,10 +256,10 @@
   .tab-content[pinned],
 .tabbrowser-tabs[treestyletab-mode="vertical"]
   .tabbrowser-tab:not(:hover)
-  .tab-content[pinned][selected="true"],
+  .tab-content[pinned][visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-mode="vertical"]
   .tabbrowser-tab:hover
-  .tab-content[pinned][selected="true"] {
+  .tab-content[pinned][visuallyselected="true"] {
 	line-height: 1 !important;
 	border: 1px solid #666666 !important;
 	border-radius: 4px !important;
@@ -275,19 +275,19 @@
   .tab-content[pinned]:not([titlechanged]),
 .tabbrowser-tabs[treestyletab-mode="vertical"]
   .tabbrowser-tab:not(:hover)
-  .tab-content[selected="true"][pinned],
+  .tab-content[visuallyselected="true"][pinned],
 .tabbrowser-tabs[treestyletab-mode="vertical"]
   .tabbrowser-tab:hover
-  .tab-content[selected="true"][pinned] {
+  .tab-content[visuallyselected="true"][pinned] {
 	background: #9d9d9d !important;
 }
 
 .tabbrowser-tabs[treestyletab-mode="vertical"]
   .tabbrowser-tab:not(:hover)
-  .tab-content[selected="true"][pinned],
+  .tab-content[visuallyselected="true"][pinned],
 .tabbrowser-tabs[treestyletab-mode="vertical"]
   .tabbrowser-tab:hover
-  .tab-content[selected="true"][pinned] {
+  .tab-content[visuallyselected="true"][pinned] {
 	background-color: #b3b2b3 !important;
 }
 
@@ -319,7 +319,7 @@
 /* foreground, left */
 :root:-moz-window-inactive
   .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"]:not([pinned])
+  .tabbrowser-tab[visuallyselected="true"]:not([pinned])
   .tab-stack{
 	-moz-border-image: url("tab-inactive-selected-l.png") 10 5 10 10 / 10px 5px 10px 10px !important;
 	-moz-border-image-slice: 10 5 10 10 fill !important;
@@ -329,7 +329,7 @@
 /* foreground, right */
 :root:-moz-window-inactive
   .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-tab-inverted="true"]
-  .tabbrowser-tab[selected="true"]:not([pinned])
+  .tabbrowser-tab[visuallyselected="true"]:not([pinned])
   .tab-stack{
 	-moz-border-image: url("tab-inactive-selected-r.png") 10 10 10 5 / 10px 10px 10px 5px !important;
 	-moz-border-image-slice: 10 10 10 5 fill !important;
@@ -353,11 +353,11 @@
 :root:-moz-window-inactive
   .tabbrowser-tabs[treestyletab-mode="vertical"]
   .tabbrowser-tab
-  .tab-content[pinned][selected="true"],
+  .tab-content[pinned][visuallyselected="true"],
 :root:-moz-window-inactive
   .tabbrowser-tabs[treestyletab-mode="vertical"]
   .tabbrowser-tab:hover
-  .tab-content[pinned][selected="true"] {
+  .tab-content[pinned][visuallyselected="true"] {
 	background: #e4e4e4 !important;
 }
 
diff --git a/skin/classic/treestyletab/sidebar/sidebar.css b/skin/classic/treestyletab/sidebar/sidebar.css
index 0e77691..16189a8 100644
--- a/skin/classic/treestyletab/sidebar/sidebar.css
+++ b/skin/classic/treestyletab/sidebar/sidebar.css
@@ -68,7 +68,7 @@
 	width: 0;
 }
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab:hover .tab-background:not([selected="true"]) {
+  .tabbrowser-tab:hover .tab-background:not([visuallyselected="true"]) {
 	background-image: none;
 }
 
@@ -126,9 +126,9 @@ tabbrowser[treestyletab-mode="vertical"]
 	-moz-border-left-colors: none !important;
 }
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab:not([pinned]):not([selected="true"]),
+  .tabbrowser-tab:not([pinned]):not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[pinned]:not([titlechanged]):not([selected="true"]) {
+  .tabbrowser-tab[pinned]:not([titlechanged]):not([visuallyselected="true"]) {
 	background: transparent !important;
 }
 .tabbrowser-tabs[treestyletab-mode="vertical"]
@@ -150,17 +150,17 @@ tabbrowser[treestyletab-mode="vertical"]
 }
 
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"] {
+  .tabbrowser-tab[visuallyselected="true"] {
 	border-top: 1px solid #94A1C0 !important;
 }
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"] {
+  .tabbrowser-tab[visuallyselected="true"] {
 	background: -moz-linear-gradient(top, #A0B0CF, #7386AB) repeat-x !important;
 }
 
 #main-window:-moz-window-inactive
   .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"] {
+  .tabbrowser-tab[visuallyselected="true"] {
 	border-top: 1px solid #979797 !important;
 	background: -moz-linear-gradient(top, #B4B4B4, #8A8A8A) repeat-x !important;  
 }
@@ -184,7 +184,7 @@ tabbrowser[treestyletab-mode="vertical"]
 	opacity: 0.46;  /* turn black into #8a8a8a */
 }
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"]
+  .tabbrowser-tab[visuallyselected="true"]
   .tab-close-button
   image {
 	list-style-image: url("closetab-white.png");
@@ -193,16 +193,16 @@ tabbrowser[treestyletab-mode="vertical"]
 
 /* Always display the favicon at 100% opacity */
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab:not(:hover):not([selected="true"])
+  .tabbrowser-tab:not(:hover):not([visuallyselected="true"])
   .tab-icon-image,
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab:not(:hover):not([selected="true"])
+  .tabbrowser-tab:not(:hover):not([visuallyselected="true"])
   .tab-throbber {
 	opacity: 1.0 !important;
 }
 
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab:not(:hover):not([selected="true"])
+  .tabbrowser-tab:not(:hover):not([visuallyselected="true"])
   .tab-close-button {
 	display: none !important;
 }
@@ -219,7 +219,7 @@ tabbrowser[treestyletab-mode="vertical"]
 	margin-bottom: 1px;
 }
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"] .tab-text {
+  .tabbrowser-tab[visuallyselected="true"] .tab-text {
 	font-weight: bold !important;
 	color: #ffffff !important;
 	text-shadow: 0 1px #404040 !important;
@@ -241,12 +241,12 @@ tabbrowser[treestyletab-mode="vertical"]
 	text-shadow: none !important;
 }
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"]
+  .tabbrowser-tab[visuallyselected="true"]
   .treestyletab-counter-container {
 	background-color: #ffffff !important;
 }
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"]
+  .tabbrowser-tab[visuallyselected="true"]
   .treestyletab-counter {
 	color: #91a0c0 !important;
 }
@@ -258,13 +258,13 @@ tabbrowser[treestyletab-mode="vertical"]
 }
 #main-window:-moz-window-inactive
   .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"]
+  .tabbrowser-tab[visuallyselected="true"]
   .treestyletab-counter-container {
 	background-color: #ffffff !important;
 }
 #main-window:-moz-window-inactive
   .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"]
+  .tabbrowser-tab[visuallyselected="true"]
   .treestyletab-counter {
 	color: #929292 !important;
 }
@@ -276,13 +276,13 @@ tabbrowser[treestyletab-mode="vertical"]
    First we need to disable the standard settings from TreeStyleTab.
    Its initial CSS rules are quite explicit. :( */
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"],
+  .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"]:hover,
+  .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"]:hover,
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]),
+  .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]):hover {
+  .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]):hover {
 	-moz-border-top-colors: none !important;
 	-moz-border-bottom-colors: none !important;
 	-moz-border-right-colors: none !important;
@@ -291,7 +291,7 @@ tabbrowser[treestyletab-mode="vertical"]
 
 /* Round blue rectangle around tabs that are dropping targets. */
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="self"]:not([selected="true"]) {
+  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="self"]:not([visuallyselected="true"]) {
 	background: #d0def5 !important;
 	border: 2px solid #577bf3 !important; /* not OSX's colour but Firefox's */
 	border-radius: 8px !important;
@@ -301,13 +301,13 @@ tabbrowser[treestyletab-mode="vertical"]
 
 /* White-blue-white separator for drop indicator. */
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"][selected="true"],
+  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"][visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"][selected="true"]:hover,
+  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"][visuallyselected="true"]:hover,
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"]:not([selected="true"]),
+  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"]:not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"]:not([selected="true"]):hover {
+  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"]:not([visuallyselected="true"]):hover {
 	-moz-border-image: url("dropmarker.png") 12 0 0 11 fill / 12px 0 0 11px !important;
 	-moz-border-image-outset: 6px 0 0 0 !important;
 	border-image: url("dropmarker.png") 12 0 0 11 fill / 12px 0 0 11px !important;
@@ -315,13 +315,13 @@ tabbrowser[treestyletab-mode="vertical"]
 }
 
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"][selected="true"],
+  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"][visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"][selected="true"]:hover,
+  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"][visuallyselected="true"]:hover,
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"]:not([selected="true"]),
+  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"]:not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"]:not([selected="true"]):hover {
+  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"]:not([visuallyselected="true"]):hover {
 	-moz-border-image: url("dropmarker.png") 0 0 12 11 fill / 0 0 12px 11px !important;
 	-moz-border-image-outset: 0 0 6px 0 !important;
 	border-image: url("dropmarker.png") 0 0 12 11 fill / 0 0 12px 11px !important;
@@ -376,7 +376,7 @@ tabbrowser[treestyletab-mode="vertical"]
 
 /* for rightside tab bar: "display:none" breaks the order of tab contents. */
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab:not(:hover):not([selected="true"])
+  .tabbrowser-tab:not(:hover):not([visuallyselected="true"])
   .tab-close-button {
 	display: -moz-box !important;
 	visibility: collapse !important;
@@ -393,7 +393,7 @@ tabbrowser[treestyletab-mode="vertical"]
   .tab-close-button:hover
   image,
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"]
+  .tabbrowser-tab[visuallyselected="true"]
   .tab-close-button
   image {
 	-moz-image-region: auto !important;
@@ -414,29 +414,29 @@ tabbrowser[treestyletab-mode="vertical"]
 
 /* for Mac OS X */
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  :-moz-any(.tab-content:not([selected="true"]):not([pinned]),
-            .tab-content:not([selected="true"])[pinned]:not([titlechanged]),
-            .tab-content[selected="true"]) {
+  :-moz-any(.tab-content:not([visuallyselected="true"]):not([pinned]),
+            .tab-content:not([visuallyselected="true"])[pinned]:not([titlechanged]),
+            .tab-content[visuallyselected="true"]) {
 	border: 0 none !important;
 	background: transparent !important;
 }
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  :-moz-any(.tab-background-start:not([selected="true"]),
-            .tab-background-middle:not([selected="true"]),
-            .tab-background-end:not([selected="true"]),
-            .tab-background-start[selected="true"],
-            .tab-background-middle[selected="true"],
-            .tab-background-end[selected="true"]) {
+  :-moz-any(.tab-background-start:not([visuallyselected="true"]),
+            .tab-background-middle:not([visuallyselected="true"]),
+            .tab-background-end:not([visuallyselected="true"]),
+            .tab-background-start[visuallyselected="true"],
+            .tab-background-middle[visuallyselected="true"],
+            .tab-background-end[visuallyselected="true"]) {
 	mask: none !important;
 }
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  :-moz-any(.tab-background-start:not([selected="true"]),
-            .tab-background-middle:not([selected="true"]):not([pinned]),
-            .tab-background-middle:not([selected="true"])[pinned]:not([titlechanged]),
-            .tab-background-end:not([selected="true"]),
-            .tab-background-start[selected="true"],
-            .tab-background-middle[selected="true"],
-            .tab-background-end[selected="true"]) {
+  :-moz-any(.tab-background-start:not([visuallyselected="true"]),
+            .tab-background-middle:not([visuallyselected="true"]):not([pinned]),
+            .tab-background-middle:not([visuallyselected="true"])[pinned]:not([titlechanged]),
+            .tab-background-end:not([visuallyselected="true"]),
+            .tab-background-start[visuallyselected="true"],
+            .tab-background-middle[visuallyselected="true"],
+            .tab-background-end[visuallyselected="true"]) {
 	background: transparent !important;
 }
 .tabbrowser-tabs[treestyletab-mode="vertical"]
@@ -463,13 +463,13 @@ tabbrowser[treestyletab-mode="vertical"]
 
 /* highlighted pinned tabs */
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[pinned][titlechanged]:not([selected="true"]) {
+  .tabbrowser-tab[pinned][titlechanged]:not([visuallyselected="true"]) {
 	background-image: radial-gradient(circle farthest-corner at 50% 3px,
 	                                  Highlight 3%,
 	                                  rgba(255, 255, 255, 0) 80%);
 }
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[pinned][titlechanged]:not([selected="true"]):hover {
+  .tabbrowser-tab[pinned][titlechanged]:not([visuallyselected="true"]):hover {
 	background-image: radial-gradient(circle farthest-corner at 50% 3px,
 	                                  Highlight 3%,
 	                                  rgba(255, 255, 255, 0) 100%);
@@ -478,7 +478,7 @@ tabbrowser[treestyletab-mode="vertical"]
 
 /* for Multiple Tab Handler */
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab:not(:hover):not([selected="true"])[multipletab-ready-to-close="true"]
+  .tabbrowser-tab:not(:hover):not([visuallyselected="true"])[multipletab-ready-to-close="true"]
   .tab-close-button {
 	visibility: visible !important;
 }
diff --git a/skin/classic/treestyletab/square/Darwin.css b/skin/classic/treestyletab/square/Darwin.css
index 0d9af46..75d135f 100644
--- a/skin/classic/treestyletab/square/Darwin.css
+++ b/skin/classic/treestyletab/square/Darwin.css
@@ -28,7 +28,7 @@ tabbrowser:not([treestyletab-style="vertigo"])[treestyletab-mode="vertical"]
   .tab-close-button,
 #main-window:-moz-window-inactive
   .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"]
+  .tabbrowser-tab[visuallyselected="true"]
   .tab-close-button,
 #main-window:-moz-window-inactive
   .tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
@@ -36,7 +36,7 @@ tabbrowser:not([treestyletab-style="vertigo"])[treestyletab-mode="vertical"]
   .tab-close-button,
 #main-window:-moz-window-inactive
   .tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
-  .tabbrowser-tab[selected="true"]
+  .tabbrowser-tab[visuallyselected="true"]
   .tab-close-button {
 	height: auto;
 	margin: 0 !important;
diff --git a/skin/classic/treestyletab/square/base.css b/skin/classic/treestyletab/square/base.css
index 75d2f1b..6d1adb2 100644
--- a/skin/classic/treestyletab/square/base.css
+++ b/skin/classic/treestyletab/square/base.css
@@ -78,7 +78,7 @@
 	width: 0;
 }
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab:hover .tab-background:not([selected="true"]) {
+  .tabbrowser-tab:hover .tab-background:not([visuallyselected="true"]) {
 	background-image: none;
 }
 
@@ -86,9 +86,9 @@
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
   .tabbrowser-tab,
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab[selected="true"],
+  .tabbrowser-tab[visuallyselected="true"],
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab:not([selected="true"]) {
+  .tabbrowser-tab:not([visuallyselected="true"]) {
 	appearance: none !important;
 	-moz-appearance: none !important;
 	min-height: 2em;
@@ -112,27 +112,27 @@
 /* override "-moz-menutext" color defined by the default theme, because it is too bright on Ubuntu */
 #TabsToolbar:not(:-moz-lwtheme):not([treestyletab-tabbar-position="top"])
   #tabbrowser-tabs
-  .tabbrowser-tab:not([selected]) {
+  .tabbrowser-tab:not([visuallyselected]) {
 	color: -moz-dialogtext !important;
 }
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
   .tabbrowser-tab:not([pinned]),
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab:not([pinned])[selected="true"],
+  .tabbrowser-tab:not([pinned])[visuallyselected="true"],
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab:not([pinned]):not([selected="true"]) {
+  .tabbrowser-tab:not([pinned]):not([visuallyselected="true"]) {
 	background: -moz-dialog repeat-x !important;
 }
 
 /* highlighted pinned tabs */
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[pinned][titlechanged]:not([selected="true"]) {
+  .tabbrowser-tab[pinned][titlechanged]:not([visuallyselected="true"]) {
 	background-image: radial-gradient(circle farthest-corner at 50% 3px,
 	                                  ThreeDHighlight 3%,
 	                                  Highlight 80%);
 }
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[pinned][titlechanged]:not([selected="true"]):hover {
+  .tabbrowser-tab[pinned][titlechanged]:not([visuallyselected="true"]):hover {
 	background-image: radial-gradient(circle farthest-corner at 50% 3px,
 	                                  ThreeDHighlight 3%,
 	                                  Highlight 100%);
@@ -140,11 +140,11 @@
 
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
   :-moz-any(.tabbrowser-tab[pinned]:not([titlechanged]),
-            .tabbrowser-tab[pinned]:not([titlechanged])[selected="true"],
-            .tabbrowser-tab[pinned]:not([titlechanged]):not([selected="true"]),
+            .tabbrowser-tab[pinned]:not([titlechanged])[visuallyselected="true"],
+            .tabbrowser-tab[pinned]:not([titlechanged]):not([visuallyselected="true"]),
             .tabbrowser-tab[pinned][titlechanged]:not(.treestyletab-faviconized),
-            .tabbrowser-tab[pinned][titlechanged]:not(.treestyletab-faviconized)[selected="true"],
-            .tabbrowser-tab[pinned][titlechanged]:not(.treestyletab-faviconized):not([selected="true"])),
+            .tabbrowser-tab[pinned][titlechanged]:not(.treestyletab-faviconized)[visuallyselected="true"],
+            .tabbrowser-tab[pinned][titlechanged]:not(.treestyletab-faviconized):not([visuallyselected="true"])),
 :root[tabFx2Compatible-flags~="mac"]
   .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
   :-moz-any(.tabbrowser-tab[pinned],
@@ -152,35 +152,35 @@
 	background: -moz-dialog repeat-x !important;
 }
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-firsttab-border="true"]
-  .tabbrowser-tab:not([pinned="true"]):not([selected="true"]):first-child {
+  .tabbrowser-tab:not([pinned="true"]):not([visuallyselected="true"]):first-child {
 	-moz-border-top-colors: ThreeDShadow transparent !important;
 }
 
 
 /* for Mac OS X */
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  :-moz-any(.tab-content:not([pinned="true"]):not([selected="true"]),
-            .tab-content:not([pinned="true"])[selected="true"]) {
+  :-moz-any(.tab-content:not([pinned="true"]):not([visuallyselected="true"]),
+            .tab-content:not([pinned="true"])[visuallyselected="true"]) {
 	border: 0 none !important;
 	background: transparent !important;
 }
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  :-moz-any(.tab-background-start:not([selected="true"]),
-            .tab-background-middle:not([selected="true"]),
-            .tab-background-end:not([selected="true"]),
-            .tab-background-start[selected="true"],
-            .tab-background-middle[selected="true"],
-            .tab-background-end[selected="true"]) {
+  :-moz-any(.tab-background-start:not([visuallyselected="true"]),
+            .tab-background-middle:not([visuallyselected="true"]),
+            .tab-background-end:not([visuallyselected="true"]),
+            .tab-background-start[visuallyselected="true"],
+            .tab-background-middle[visuallyselected="true"],
+            .tab-background-end[visuallyselected="true"]) {
 	mask: none !important;
 }
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  :-moz-any(.tab-background-start:not([selected="true"]),
-            .tab-background-middle:not([selected="true"]):not([pinned]),
-            .tab-background-middle:not([selected="true"])[pinned]:not([titlechanged]),
-            .tab-background-end:not([selected="true"]),
-            .tab-background-start[selected="true"],
-            .tab-background-middle[selected="true"],
-            .tab-background-end[selected="true"]) {
+  :-moz-any(.tab-background-start:not([visuallyselected="true"]),
+            .tab-background-middle:not([visuallyselected="true"]):not([pinned]),
+            .tab-background-middle:not([visuallyselected="true"])[pinned]:not([titlechanged]),
+            .tab-background-end:not([visuallyselected="true"]),
+            .tab-background-start[visuallyselected="true"],
+            .tab-background-middle[visuallyselected="true"],
+            .tab-background-end[visuallyselected="true"]) {
 	background: transparent !important;
 }
 .tabbrowser-tabs[treestyletab-mode="vertical"]
@@ -208,17 +208,19 @@
 }
 
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab[selected="true"] {
+  .tabbrowser-tab[visuallyselected="true"] {
 	margin: 0 !important;
 	-moz-border-top-colors: ThreeDHighlight transparent !important;
 	-moz-border-bottom-colors: ThreeDShadow transparent !important;
 }
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab[selected="true"]:not([pinned]) {
+  .tabbrowser-tab[visuallyselected="true"]:not([pinned]) {
 	padding: 0 0.2em !important;
 }
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab[selected="true"] {
+  .tabbrowser-tab:not([pinned])[visuallyselected="true"],
+.tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
+  .tabbrowser-tab[pinned][visuallyselected="true"] {
 	background-color: ThreeDHighlight !important;
 }
 
@@ -233,16 +235,16 @@
 .tabbrowser-tabs[treestyletab-mode="vertical"]
   .tabbrowser-tab,
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"],
+  .tabbrowser-tab[visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab:not([selected="true"]) {
+  .tabbrowser-tab:not([visuallyselected="true"]) {
 	border-left: 2px solid !important;
 	-moz-border-left-colors: ThreeDLightShadow transparent !important;
 	border-right: 2px solid !important;
 	-moz-border-right-colors: ThreeDLightShadow transparent !important;
 }
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[selected="true"] {
+  .tabbrowser-tab[visuallyselected="true"] {
 	-moz-border-left-colors: ThreeDLightShadow transparent !important;
 	-moz-border-right-colors: ThreeDLightShadow transparent !important;
 }
@@ -256,9 +258,9 @@
 .tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
   .tabbrowser-tab,
 .tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
-  .tabbrowser-tab[selected="true"],
+  .tabbrowser-tab[visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
-  .tabbrowser-tab:not([selected="true"]) {
+  .tabbrowser-tab:not([visuallyselected="true"]) {
 	border-right: 2px solid !important;
 	-moz-border-right-colors: ThreeDShadow transparent !important;
 	border-left: 2px solid !important;
@@ -277,15 +279,15 @@
 /* padding */
 
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab[selected="true"]:not([pinned]),
+  .tabbrowser-tab[visuallyselected="true"]:not([pinned]),
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab:not([selected="true"]):not([pinned]),
+  .tabbrowser-tab:not([visuallyselected="true"]):not([pinned]),
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
   .tabbrowser-tab
-  .tab-content[selected="true"]:not([pinned]),
+  .tab-content[visuallyselected="true"]:not([pinned]),
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
   .tabbrowser-tab
-  .tab-content:not([selected="true"]):not([pinned]) {
+  .tab-content:not([visuallyselected="true"]):not([pinned]) {
 	padding: 0 0.2em !important;
 }
 
diff --git a/skin/classic/treestyletab/square/disable-closebox-bg.css b/skin/classic/treestyletab/square/disable-closebox-bg.css
index 0b75ed8..c2c02a7 100644
--- a/skin/classic/treestyletab/square/disable-closebox-bg.css
+++ b/skin/classic/treestyletab/square/disable-closebox-bg.css
@@ -13,7 +13,7 @@
   .tabbrowser-tab
   .tab-close-button,
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab[selected="true"]
+  .tabbrowser-tab[visuallyselected="true"]
   .tab-close-button {
 	height: auto;
 	background: transparent;
diff --git a/skin/classic/treestyletab/square/mixed.css b/skin/classic/treestyletab/square/mixed.css
index 11afafc..a5fcfda 100644
--- a/skin/classic/treestyletab/square/mixed.css
+++ b/skin/classic/treestyletab/square/mixed.css
@@ -7,57 +7,57 @@
 }
 
 .tabbrowser-tabs[treestyletab-style~="color"]:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab:not([selected="true"]):hover {
+  .tabbrowser-tab:not([visuallyselected="true"]):hover {
 	-moz-border-top-colors: #e0e8f6 transparent !important;
 	-moz-border-left-colors: #e0e8f6 transparent !important;
 }
 .tabbrowser-tabs[treestyletab-style~="color"]:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab:not([selected="true"]):not([pinned]):hover,
+  .tabbrowser-tab:not([visuallyselected="true"]):not([pinned]):hover,
 .tabbrowser-tabs[treestyletab-style~="color"]:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab:not([selected="true"])[pinned]:not([titlechanged]):hover {
+  .tabbrowser-tab:not([visuallyselected="true"])[pinned]:not([titlechanged]):hover {
 	background-color: #e0e8f6 !important;
 }
 .tabbrowser-tabs[treestyletab-style~="color"][treestyletab-mode="vertical"][treestyletab-firsttab-border="true"]
-  .tabbrowser-tab:first-child:not([selected="true"]):hover {
+  .tabbrowser-tab:first-child:not([visuallyselected="true"]):hover {
 	-moz-border-top-colors: ThreeDShadow #e0e8f6 !important;
 }
 .tabbrowser-tabs[treestyletab-style~="color"][treestyletab-mode="vertical"][treestyletab-tab-inverted="true"]
-  .tabbrowser-tab:not([selected="true"]):hover {
+  .tabbrowser-tab:not([visuallyselected="true"]):hover {
 	-moz-border-right-colors: #e0e8f6 transparent !important;
 }
 
 .tabbrowser-tabs[treestyletab-style~="color"]:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab[selected="true"] {
+  .tabbrowser-tab[visuallyselected="true"] {
 	-moz-border-top-colors: #c1d2ee transparent !important;
 	-moz-border-left-colors: #c1d2ee transparent !important;
 }
 .tabbrowser-tabs[treestyletab-style~="color"]:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab[selected="true"] {
+  .tabbrowser-tab[visuallyselected="true"] {
 	background-color: #c1d2ee !important;
 }
 .tabbrowser-tabs[treestyletab-style~="color"][treestyletab-mode="vertical"][treestyletab-firsttab-border="true"]
-  .tabbrowser-tab:first-child[selected="true"] {
+  .tabbrowser-tab:first-child[visuallyselected="true"] {
 	-moz-border-top-colors: ThreeDShadow #c1d2ee !important;
 }
 .tabbrowser-tabs[treestyletab-style~="color"][treestyletab-mode="vertical"][treestyletab-tab-inverted="true"]
-  .tabbrowser-tab[selected="true"] {
+  .tabbrowser-tab[visuallyselected="true"] {
 	-moz-border-right-colors: #c1d2ee transparent !important;
 }
 
 .tabbrowser-tabs[treestyletab-style~="color"]:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab[selected="true"]:hover {
+  .tabbrowser-tab[visuallyselected="true"]:hover {
 	-moz-border-top-colors: #d1e2fe transparent !important;
 	-moz-border-left-colors: #d1e2fe transparent !important;
 }
 .tabbrowser-tabs[treestyletab-style~="color"]:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab[selected="true"]:hover {
+  .tabbrowser-tab[visuallyselected="true"]:hover {
 	background-color: #d1e2fe !important;
 }
 .tabbrowser-tabs[treestyletab-style~="color"][treestyletab-mode="vertical"][treestyletab-firsttab-border="true"]
-  .tabbrowser-tab:first-child[selected="true"]:hover {
+  .tabbrowser-tab:first-child[visuallyselected="true"]:hover {
 	-moz-border-top-colors: ThreeDShadow #d1e2fe !important;
 }
 .tabbrowser-tabs[treestyletab-style~="color"][treestyletab-mode="vertical"][treestyletab-tab-inverted="true"]
-  .tabbrowser-tab[selected="true"]:hover {
+  .tabbrowser-tab[visuallyselected="true"]:hover {
 	-moz-border-right-colors: #d1e2fe transparent !important;
 }
diff --git a/skin/classic/treestyletab/square/tab-surface.css b/skin/classic/treestyletab/square/tab-surface.css
index 068e1f4..b910e21 100644
--- a/skin/classic/treestyletab/square/tab-surface.css
+++ b/skin/classic/treestyletab/square/tab-surface.css
@@ -24,7 +24,7 @@
 
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
   .tabbrowser-tab
-  .tab-background[selected="true"] {
+  .tab-background[visuallyselected="true"] {
 	background-color: #c1d2ee !important;
 	background-image: -moz-linear-gradient(
 	                    top,
@@ -50,7 +50,7 @@
 
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
   .tabbrowser-tab:hover
-  .tab-background[selected="true"] {
+  .tab-background[visuallyselected="true"] {
 	background-color: #d1e2fe !important;
 	background-image: -moz-linear-gradient(
 	                    top,
diff --git a/skin/classic/treestyletab/square/vertigo.css b/skin/classic/treestyletab/square/vertigo.css
index 2edc2e2..68bd86b 100644
--- a/skin/classic/treestyletab/square/vertigo.css
+++ b/skin/classic/treestyletab/square/vertigo.css
@@ -4,12 +4,12 @@
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
   .tabbrowser-tab:not([pinned]),
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab:not([pinned]):not([selected="true"]),
+  .tabbrowser-tab:not([pinned]):not([visuallyselected="true"]),
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
   :-moz-any(.tabbrowser-tab[pinned]:not([titlechanged]),
-            .tabbrowser-tab[pinned]:not([titlechanged]):not([selected="true"]),
+            .tabbrowser-tab[pinned]:not([titlechanged]):not([visuallyselected="true"]),
             .tabbrowser-tab[pinned][titlechanged]:not(.treestyletab-faviconized),
-            .tabbrowser-tab[pinned][titlechanged]:not(.treestyletab-faviconized):not([selected="true"])),
+            .tabbrowser-tab[pinned][titlechanged]:not(.treestyletab-faviconized):not([visuallyselected="true"])),
 :root[tabFx2Compatible-flags~="mac"]
   .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
   :-moz-any(.tabbrowser-tab[pinned],
@@ -18,71 +18,71 @@
 }
 
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab:not([selected="true"]) {
+  .tabbrowser-tab:not([visuallyselected="true"]) {
 	-moz-border-top-colors: transparent transparent !important;
 	-moz-border-bottom-colors: transparent transparent !important;
 }
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab:not([selected="true"]):not([pinned]),
+  .tabbrowser-tab:not([visuallyselected="true"]):not([pinned]),
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab:not([selected="true"])[pinned]:not([titlechanged])) {
+  .tabbrowser-tab:not([visuallyselected="true"])[pinned]:not([titlechanged])) {
 	background: transparent !important;
 }
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab:not([selected="true"]):hover {
+  .tabbrowser-tab:not([visuallyselected="true"]):hover {
 	-moz-border-top-colors: #e0e8f6 #e0e8f6 !important;
 	-moz-border-bottom-colors: #e0e8f6 #e0e8f6 !important;
 }
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab:not([selected="true"]):not([pinned]):hover,
+  .tabbrowser-tab:not([visuallyselected="true"]):not([pinned]):hover,
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab:not([selected="true"])[pinned]:not([titlechanged]):hover {
+  .tabbrowser-tab:not([visuallyselected="true"])[pinned]:not([titlechanged]):hover {
 	background-color: #e0e8f6 !important;
 }
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab[selected="true"] {
+  .tabbrowser-tab[visuallyselected="true"] {
 	-moz-border-top-colors: #c1d2ee #c1d2ee !important;
 	-moz-border-bottom-colors: #c1d2ee #c1d2ee !important;
 }
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab[selected="true"] {
+  .tabbrowser-tab[visuallyselected="true"] {
 	background-color: #c1d2ee !important;
 }
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab[selected="true"]:hover {
+  .tabbrowser-tab[visuallyselected="true"]:hover {
 	-moz-border-top-colors: #d1e2fe #d1e2fe !important;
 	-moz-border-bottom-colors: #d1e2fe #d1e2fe !important;
 }
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab[selected="true"]:hover {
+  .tabbrowser-tab[visuallyselected="true"]:hover {
 	background-color: #d1e2fe !important;
 }
 
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab:not([selected="true"]),
+  .tabbrowser-tab:not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-tab-inverted="true"]
-  .tabbrowser-tab:not([selected="true"]) {
+  .tabbrowser-tab:not([visuallyselected="true"]) {
 	-moz-border-left-colors: transparent transparent !important;
 	-moz-border-right-colors: transparent transparent !important;
 }
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab:not([selected="true"]):hover,
+  .tabbrowser-tab:not([visuallyselected="true"]):hover,
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-tab-inverted="true"]
-  .tabbrowser-tab:not([selected="true"]):hover {
+  .tabbrowser-tab:not([visuallyselected="true"]):hover {
 	-moz-border-left-colors: #e0e8f6 #e0e8f6 !important;
 	-moz-border-right-colors: #e0e8f6 #e0e8f6 !important;
 }
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab[selected="true"],
+  .tabbrowser-tab[visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-tab-inverted="true"]
-  .tabbrowser-tab[selected="true"] {
+  .tabbrowser-tab[visuallyselected="true"] {
 	-moz-border-left-colors: #c1d2ee #c1d2ee !important;
 	-moz-border-right-colors: #c1d2ee #c1d2ee !important;
 }
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
-  .tabbrowser-tab[selected="true"]:hover,
+  .tabbrowser-tab[visuallyselected="true"]:hover,
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-tab-inverted="true"]
-  .tabbrowser-tab[selected="true"]:hover {
+  .tabbrowser-tab[visuallyselected="true"]:hover {
 	-moz-border-left-colors: #d1e2fe #d1e2fe !important;
 	-moz-border-right-colors: #d1e2fe #d1e2fe !important;
 }
diff --git a/skin/classic/treestyletab/tmp.css b/skin/classic/treestyletab/tmp.css
index 593d2fd..07dd4a0 100644
--- a/skin/classic/treestyletab/tmp.css
+++ b/skin/classic/treestyletab/tmp.css
@@ -88,6 +88,6 @@
 
 :root[treestyletab-enable-compatibility-tmp="true"]
   #tabbrowser-tabs[treestyletab-style]
-    .tabbrowser-tab:not([selected="true"]):not([pinned="true"]) {
+    .tabbrowser-tab:not([visuallyselected="true"]):not([pinned="true"]) {
 	background-image: none !important;
 }
diff --git a/skin/classic/treestyletab/twisty/twisty.css b/skin/classic/treestyletab/twisty/twisty.css
index c4d6195..2d4bd79 100644
--- a/skin/classic/treestyletab/twisty/twisty.css
+++ b/skin/classic/treestyletab/twisty/twisty.css
@@ -105,7 +105,7 @@
 .tabbrowser-tabs[treestyletab-twisty-style="osx"]
   .treestyletab-twisty:active,
 .tabbrowser-tabs[treestyletab-twisty-style="osx"]
-  .tabbrowser-tab[selected="true"] .treestyletab-twisty {
+  .tabbrowser-tab[visuallyselected="true"] .treestyletab-twisty {
 	opacity: 1;
 }
 
@@ -116,13 +116,13 @@
 .tabbrowser-tabs:not([treestyletab-twisty-style="osx"])
   .tabbrowser-tab[treestyletab-twisty-hover="true"] .treestyletab-twisty,
 .tabbrowser-tabs[treestyletab-twisty-style="osx"]
-  .tabbrowser-tab[selected="true"] .treestyletab-twisty {
+  .tabbrowser-tab[visuallyselected="true"] .treestyletab-twisty {
 	-moz-image-region: rect(16px, 32px, 32px, 16px);
 }
 .tabbrowser-tabs:not([treestyletab-twisty-style="osx"])
   .tabbrowser-tab[treestyletab-subtree-collapsed="true"][treestyletab-twisty-hover="true"] .treestyletab-twisty,
 .tabbrowser-tabs[treestyletab-twisty-style="osx"]
-  .tabbrowser-tab[treestyletab-subtree-collapsed="true"][selected="true"] .treestyletab-twisty {
+  .tabbrowser-tab[treestyletab-subtree-collapsed="true"][visuallyselected="true"] .treestyletab-twisty {
 	-moz-image-region: rect(16px, 16px, 32px, 0);
 }
 
diff --git a/skin/classic/treestyletab/ui-australis.css b/skin/classic/treestyletab/ui-australis.css
index 4ca6ec4..ff65eb4 100644
--- a/skin/classic/treestyletab/ui-australis.css
+++ b/skin/classic/treestyletab/ui-australis.css
@@ -6,3 +6,9 @@
 #main-window:not([treestyletab-tabbar-position="top"])[chromemargin]:not([tabsintitlebar]):not([chromemargin^="0,"]) > #titlebar {
 	display: none;
 }
+
+ at media(-moz-windows-glass) {
+	#TabsToolbar:not([treestyletab-tabbar-position="top"]):not(:-moz-lwtheme)::after {
+		display: none !important;
+	}
+}
diff --git a/skin/classic/treestyletab/ui-base.css b/skin/classic/treestyletab/ui-base.css
index f76b195..7cb973b 100644
--- a/skin/classic/treestyletab/ui-base.css
+++ b/skin/classic/treestyletab/ui-base.css
@@ -21,52 +21,52 @@
 /* drop markers */
 
 .tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
-  .tabbrowser-tab[treestyletab-drop-position="before"][selected="true"],
+  .tabbrowser-tab[treestyletab-drop-position="before"][visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
-  .tabbrowser-tab[treestyletab-drop-position="before"][selected="true"]:hover,
+  .tabbrowser-tab[treestyletab-drop-position="before"][visuallyselected="true"]:hover,
 .tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
-  .tabbrowser-tab[treestyletab-drop-position="before"]:not([selected="true"]),
+  .tabbrowser-tab[treestyletab-drop-position="before"]:not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
-  .tabbrowser-tab[treestyletab-drop-position="before"]:not([selected="true"]):hover {
+  .tabbrowser-tab[treestyletab-drop-position="before"]:not([visuallyselected="true"]):hover {
 	-moz-border-left-colors: -moz-dialogtext -moz-dialogtext !important;
 }
 
 .tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
-  .tabbrowser-tab[treestyletab-drop-position="after"][selected="true"],
+  .tabbrowser-tab[treestyletab-drop-position="after"][visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
-  .tabbrowser-tab[treestyletab-drop-position="after"][selected="true"]:hover,
+  .tabbrowser-tab[treestyletab-drop-position="after"][visuallyselected="true"]:hover,
 .tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
-  .tabbrowser-tab[treestyletab-drop-position="after"]:not([selected="true"]),
+  .tabbrowser-tab[treestyletab-drop-position="after"]:not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-tabbar-position="bottom"]
-  .tabbrowser-tab[treestyletab-drop-position="after"]:not([selected="true"]):hover {
+  .tabbrowser-tab[treestyletab-drop-position="after"]:not([visuallyselected="true"]):hover {
 	-moz-border-right-colors: -moz-dialogtext -moz-dialogtext !important;
 }
 
 
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"],
+  .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"]:hover,
+  .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"]:hover,
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]),
+  .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]):hover,
+  .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]):hover,
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style][treestyletab-firsttab-border="true"]
-  .tabbrowser-tab:first-child[treestyletab-style][selected="true"],
+  .tabbrowser-tab:first-child[treestyletab-style][visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style][treestyletab-firsttab-border="true"]
-  .tabbrowser-tab:first-child[treestyletab-style][selected="true"]:hover,
+  .tabbrowser-tab:first-child[treestyletab-style][visuallyselected="true"]:hover,
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style][treestyletab-firsttab-border="true"]
-  .tabbrowser-tab:first-child[treestyletab-drop-position="self"]:not([selected="true"]),
+  .tabbrowser-tab:first-child[treestyletab-drop-position="self"]:not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style][treestyletab-firsttab-border="true"]
-  .tabbrowser-tab:first-child[treestyletab-drop-position="self"]:not([selected="true"]):hover,
+  .tabbrowser-tab:first-child[treestyletab-drop-position="self"]:not([visuallyselected="true"]):hover,
 .tabbrowser-tabs[treestyletab-tabbar-position="bottom"][treestyletab-style]
-  .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"],
+  .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-tabbar-position="bottom"][treestyletab-style]
-  .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"]:hover,
+  .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"]:hover,
 .tabbrowser-tabs[treestyletab-tabbar-position="bottom"][treestyletab-style]
-  .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]),
+  .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-tabbar-position="bottom"][treestyletab-style]
-  .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]):hover {
+  .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]):hover {
 	-moz-border-top-colors: -moz-dialogtext -moz-dialogtext !important;
 	-moz-border-right-colors: -moz-dialogtext -moz-dialogtext !important;
 	-moz-border-bottom-colors: -moz-dialogtext -moz-dialogtext !important;
@@ -74,73 +74,73 @@
 }
 
 .tabbrowser-tabs[treestyletab-mode="vertical"]:not([treestyletab-style])
-  .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"],
+  .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-mode="vertical"]:not([treestyletab-style])
-  .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"]:hover,
+  .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"]:hover,
 .tabbrowser-tabs[treestyletab-mode="vertical"]:not([treestyletab-style])
-  .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]),
+  .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-mode="vertical"]:not([treestyletab-style])
-  .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]):hover,
+  .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]):hover,
 .tabbrowser-tabs[treestyletab-tabbar-position="bottom"]:not([treestyletab-style])
-  .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"],
+  .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-tabbar-position="bottom"]:not([treestyletab-style])
-  .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"]:hover,
+  .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"]:hover,
 .tabbrowser-tabs[treestyletab-tabbar-position="bottom"]:not([treestyletab-style])
-  .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]),
+  .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-tabbar-position="bottom"]:not([treestyletab-style])
-  .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]):hover {
+  .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]):hover {
 	outline: 2px solid !important;
 }
 
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"][selected="true"],
+  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"][visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"][selected="true"]:hover,
+  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"][visuallyselected="true"]:hover,
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"]:not([selected="true"]),
+  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"]:not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"]:not([selected="true"]):hover,
+  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="before"]:not([visuallyselected="true"]):hover,
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style][treestyletab-firsttab-border="true"]
-  .tabbrowser-tab:first-child:not([pinned="true"])[treestyletab-drop-position="before"][selected="true"],
+  .tabbrowser-tab:first-child:not([pinned="true"])[treestyletab-drop-position="before"][visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style][treestyletab-firsttab-border="true"]
-  .tabbrowser-tab:first-child:not([pinned="true"])[treestyletab-drop-position="before"][selected="true"]:hover,
+  .tabbrowser-tab:first-child:not([pinned="true"])[treestyletab-drop-position="before"][visuallyselected="true"]:hover,
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style][treestyletab-firsttab-border="true"]
-  .tabbrowser-tab:first-child:not([pinned="true"])[treestyletab-drop-position="before"]:not([selected="true"]),
+  .tabbrowser-tab:first-child:not([pinned="true"])[treestyletab-drop-position="before"]:not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style][treestyletab-firsttab-border="true"]
-  .tabbrowser-tab:first-child:not([pinned="true"])[treestyletab-drop-position="before"]:not([selected="true"]):hover {
+  .tabbrowser-tab:first-child:not([pinned="true"])[treestyletab-drop-position="before"]:not([visuallyselected="true"]):hover {
 	-moz-border-top-colors: -moz-dialogtext -moz-dialogtext !important;
 }
 
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"][selected="true"],
+  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"][visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"][selected="true"]:hover,
+  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"][visuallyselected="true"]:hover,
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"]:not([selected="true"]),
+  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"]:not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"]:not([selected="true"]):hover {
+  .tabbrowser-tab:not([pinned="true"])[treestyletab-drop-position="after"]:not([visuallyselected="true"]):hover {
 	-moz-border-bottom-colors: -moz-dialogtext -moz-dialogtext !important;
 }
 
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab[pinned="true"][treestyletab-drop-position="before"][selected="true"],
+  .tabbrowser-tab[pinned="true"][treestyletab-drop-position="before"][visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab[pinned="true"][treestyletab-drop-position="before"][selected="true"]:hover,
+  .tabbrowser-tab[pinned="true"][treestyletab-drop-position="before"][visuallyselected="true"]:hover,
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab[pinned="true"][treestyletab-drop-position="before"]:not([selected="true"]),
+  .tabbrowser-tab[pinned="true"][treestyletab-drop-position="before"]:not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab[pinned="true"][treestyletab-drop-position="before"]:not([selected="true"]):hover {
+  .tabbrowser-tab[pinned="true"][treestyletab-drop-position="before"]:not([visuallyselected="true"]):hover {
 	-moz-border-left-colors: -moz-dialogtext -moz-dialogtext !important;
 }
 
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab[pinned="true"][treestyletab-drop-position="after"][selected="true"],
+  .tabbrowser-tab[pinned="true"][treestyletab-drop-position="after"][visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab[pinned="true"][treestyletab-drop-position="after"][selected="true"]:hover,
+  .tabbrowser-tab[pinned="true"][treestyletab-drop-position="after"][visuallyselected="true"]:hover,
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab[pinned="true"][treestyletab-drop-position="after"]:not([selected="true"]),
+  .tabbrowser-tab[pinned="true"][treestyletab-drop-position="after"]:not([visuallyselected="true"]),
 .tabbrowser-tabs[treestyletab-mode="vertical"][treestyletab-style]
-  .tabbrowser-tab[pinned="true"][treestyletab-drop-position="after"]:not([selected="true"]):hover {
+  .tabbrowser-tab[pinned="true"][treestyletab-drop-position="after"]:not([visuallyselected="true"]):hover {
 	-moz-border-right-colors: -moz-dialogtext -moz-dialogtext !important;
 }
 
@@ -148,16 +148,16 @@
 /* drop marker for horizontal tab bar or the default theme */
 
 .tabbrowser-tabs[treestyletab-tabbar-position="top"]
-  .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"]
+  .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"]
   .tab-content,
 .tabbrowser-tabs[treestyletab-tabbar-position="top"]
-  .tabbrowser-tab[treestyletab-drop-position="self"][selected="true"]:hover
+  .tabbrowser-tab[treestyletab-drop-position="self"][visuallyselected="true"]:hover
   .tab-content,
 .tabbrowser-tabs[treestyletab-tabbar-position="top"]
-  .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"])
+  .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"])
   .tab-content,
 .tabbrowser-tabs[treestyletab-tabbar-position="top"]
-  .tabbrowser-tab[treestyletab-drop-position="self"]:not([selected="true"]):hover
+  .tabbrowser-tab[treestyletab-drop-position="self"]:not([visuallyselected="true"]):hover
   .tab-content {
 	outline: 2px -moz-dialogtext solid !important;
 }
@@ -244,13 +244,13 @@ tabbrowser[treestyletab-drop-position="left"]:not([treestyletab-tabbar-position=
 	opacity: 0.9 !important;
 }
 .tabbrowser-tabs[treestyletab-tabbar-autohide]:hover
-  .tabbrowser-tab[selected="true"],
+  .tabbrowser-tab[visuallyselected="true"],
 .tabbrowser-tabs[treestyletab-tabbar-autohide]:hover
   .tabbrowser-tab:hover {
 	opacity: 0.95 !important;
 }
 .tabbrowser-tabs[treestyletab-tabbar-autohide]:hover
-  .tabbrowser-tab[selected="true"]:hover {
+  .tabbrowser-tab[visuallyselected="true"]:hover {
 	opacity: 0.98 !important;
 }
 
@@ -348,14 +348,21 @@ tabbrowser[treestyletab-tabbar-position="bottom"]
 /* disable highlighting of pinned tabs whici is not faviconized */
 
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[pinned][titlechanged]:not([selected="true"]):not(.treestyletab-faviconized) {
+  .tabbrowser-tab[pinned][titlechanged]:not([visuallyselected="true"]):not(.treestyletab-faviconized) {
 	background-image: none;
 }
 .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .tabbrowser-tab[pinned][titlechanged]:not([selected="true"]):not(.treestyletab-faviconized):hover {
+  .tabbrowser-tab[pinned][titlechanged]:not([visuallyselected="true"]):not(.treestyletab-faviconized):hover {
 	background-image: none;
 }
 
+/* overlay icon */
+.tabbrowser-tabs[treestyletab-mode="vertical"]
+  .tab-content[pinned="true"] > image.tab-icon-overlay {
+  margin-top: -14px !important;
+  -moz-margin-start: -8px !important;
+}
+
 
 /* notification of newly opened tabs in background */
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/tree-style-tab.git



More information about the Pkg-mozext-commits mailing list