[Pkg-mozext-commits] [tree-style-tab] 01/05: Imported Upstream version 0.17.2016031101

Ximin Luo infinity0 at debian.org
Thu Mar 17 22:13:59 UTC 2016


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 69dd753bc8607ee3470ced1f4915920f1a6596d6
Author: Ximin Luo <infinity0 at debian.org>
Date:   Thu Mar 17 22:52:05 2016 +0100

    Imported Upstream version 0.17.2016031101
---
 META-INF/manifest.mf                              | 201 ++++++-----
 META-INF/mozilla.rsa                              | Bin 4189 -> 4189 bytes
 META-INF/mozilla.sf                               |   4 +-
 content/treestyletab/config.js                    |   2 -
 content/treestyletab/config.xul                   |  31 +-
 content/treestyletab/license.txt                  |   1 +
 content/treestyletab/treestyletab.css             |   6 +
 content/treestyletab/treestyletab.xul             |  15 +-
 content/treestyletab/windowHelper.js              |  22 +-
 defaults/preferences/treestyletab.js              |  13 +-
 install.rdf                                       |  21 +-
 locale/cs/treestyletab/treestyletab.dtd           |   1 -
 locale/cs/treestyletab/treestyletab.properties    |   4 +
 locale/da-DK/treestyletab/treestyletab.dtd        |   1 -
 locale/da-DK/treestyletab/treestyletab.properties |   4 +
 locale/de-DE/treestyletab/treestyletab.dtd        |  24 +-
 locale/de-DE/treestyletab/treestyletab.properties |  67 ++--
 locale/en-US/treestyletab/treestyletab.dtd        |   1 -
 locale/en-US/treestyletab/treestyletab.properties |   4 +
 locale/es-ES/treestyletab/treestyletab.dtd        |   1 -
 locale/es-ES/treestyletab/treestyletab.properties |   4 +
 locale/fr-FR/treestyletab/treestyletab.dtd        |   1 -
 locale/fr-FR/treestyletab/treestyletab.properties |   4 +
 locale/it-IT/treestyletab/treestyletab.dtd        |   1 -
 locale/it-IT/treestyletab/treestyletab.properties |   4 +
 locale/ja/treestyletab/treestyletab.dtd           |   1 -
 locale/ja/treestyletab/treestyletab.properties    |   4 +
 locale/pl/treestyletab/treestyletab.dtd           |   1 -
 locale/pl/treestyletab/treestyletab.properties    |   4 +
 locale/ru/treestyletab/treestyletab.dtd           |   1 -
 locale/ru/treestyletab/treestyletab.properties    |   4 +
 locale/sv-SE/treestyletab/treestyletab.dtd        |   1 -
 locale/sv-SE/treestyletab/treestyletab.properties |   4 +
 locale/zh-CN/treestyletab/treestyletab.dtd        |   1 -
 locale/zh-CN/treestyletab/treestyletab.properties |   4 +
 locale/zh-TW/treestyletab/treestyletab.dtd        |   1 -
 locale/zh-TW/treestyletab/treestyletab.properties |   4 +
 modules/autoHide.js                               | 110 +++---
 modules/base.js                                   |  13 +-
 modules/browser.js                                | 143 +++++---
 modules/constants.js                              |  19 +-
 modules/fullTooltip.js                            | 394 +++++++++++++++-------
 modules/groupTab.js                               |   4 +-
 modules/pseudoTreeBuilder.js                      |  70 ++--
 modules/tabbarDNDObserver.js                      |  62 +++-
 modules/utils.js                                  | 143 +++++---
 modules/window.js                                 |  54 ++-
 skin/classic/treestyletab/group.css               |  13 +-
 skin/classic/treestyletab/metal/base.css          |  36 --
 skin/classic/treestyletab/sidebar/sidebar.css     |  42 ---
 skin/classic/treestyletab/square/base.css         |  17 -
 skin/classic/treestyletab/square/vertigo.css      |  18 -
 treestyletab.update.rdf                           |  30 --
 53 files changed, 923 insertions(+), 712 deletions(-)

diff --git a/META-INF/manifest.mf b/META-INF/manifest.mf
index 9e2f63f..06ef36e 100644
--- a/META-INF/manifest.mf
+++ b/META-INF/manifest.mf
@@ -2,8 +2,8 @@ Manifest-Version: 1.0
 
 Name: install.rdf
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: GhhEUrydTwg3fyzdRVE7Hw==
-SHA1-Digest: IA2smyD8Ao/QqmYTFfcSGOwW370=
+MD5-Digest: NaySELHCthbe7a4P8YrC+w==
+SHA1-Digest: 2TCWsuVyH7uhYsM9VOJY23f7a/w=
 
 Name: chrome.manifest
 Digest-Algorithms: MD5 SHA1
@@ -15,11 +15,6 @@ Digest-Algorithms: MD5 SHA1
 MD5-Digest: b26p1vuhLB2vYtkJ0EpFZg==
 SHA1-Digest: T9f7i8A7iAz/ElpA361lLRpnbWc=
 
-Name: treestyletab.update.rdf
-Digest-Algorithms: MD5 SHA1
-MD5-Digest: P0m8CTDmPTu3ahll/DOucQ==
-SHA1-Digest: Fj8WbLoHt0uNXjyC/5Nt63948rA=
-
 Name: components/AboutGroup.js
 Digest-Algorithms: MD5 SHA1
 MD5-Digest: D+AXOvn4yNMXf8GhIKbFrA==
@@ -57,13 +52,13 @@ SHA1-Digest: ougZFbteusnzVn8djm/xTObCf4Y=
 
 Name: content/treestyletab/config.js
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: VIC4VobVhIjyRGReHCEikw==
-SHA1-Digest: LSm4XQfNAqRWieDG2oKRk54Rrh8=
+MD5-Digest: ie+GjjbEG2WOfpzBiyYkNQ==
+SHA1-Digest: 3/2tCyYn4fv23b/+vXMJik7JcjU=
 
 Name: content/treestyletab/config.xul
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: NZY8ITSUeWciGsIYiwKgaA==
-SHA1-Digest: n3WFwTJN9dYOliz5YDpjd13YJh4=
+MD5-Digest: oWFtj0roEP0prwGgmIbHNQ==
+SHA1-Digest: b9JTBbMbqyEb/TEap1A4V6xMBB8=
 
 Name: content/treestyletab/content-utils-autohide.js
 Digest-Algorithms: MD5 SHA1
@@ -87,8 +82,8 @@ SHA1-Digest: dVIKETt9CnpIKynmf5iCpf1jDNo=
 
 Name: content/treestyletab/license.txt
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: LPKF3jz0aUCOORAZxF3CBw==
-SHA1-Digest: 9pCMihCjV7sRiu2H4IKuovx68LM=
+MD5-Digest: X5GHdwU0794vTcmyBMKgLA==
+SHA1-Digest: cpaNFJaakJy4ZMTl+Bku6h5c2Nc=
 
 Name: content/treestyletab/multipletabConfigOverlay.xul
 Digest-Algorithms: MD5 SHA1
@@ -102,8 +97,8 @@ SHA1-Digest: dUnh9cVls70LC0cO+AzOTyJ+7Bc=
 
 Name: content/treestyletab/treestyletab.css
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: Y+LtIloCWi9BRp0tIr38/Q==
-SHA1-Digest: hY2iyFgCqbULOeYkM7FS3NnkQMc=
+MD5-Digest: LGIxXslHKxsy9dCqauTl4A==
+SHA1-Digest: CkfONqIj2tBVFlf27/FtrTvr1m8=
 
 Name: content/treestyletab/treestyletab.js
 Digest-Algorithms: MD5 SHA1
@@ -117,13 +112,13 @@ SHA1-Digest: yI4r2a9JmBDqDI8qcvvn6R1wG4M=
 
 Name: content/treestyletab/treestyletab.xul
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: gzxBjw2xe+IkDHQVK1ojcA==
-SHA1-Digest: 9lVQdUME2zPBCECRLZrK2fGxEFY=
+MD5-Digest: ZOu6Dnitaf7CLhXoZCoh1A==
+SHA1-Digest: z9Vv2ybo5X1MXss9QxnjlRJ4+BE=
 
 Name: content/treestyletab/windowHelper.js
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: r4uLpCypKvERzfkcDWZU0A==
-SHA1-Digest: 2eJCf+fAYOKLzjm/CMJlBLS73Oc=
+MD5-Digest: Y+gM+DMgX8n7u7r82qRo8w==
+SHA1-Digest: ymgmZOavDLyDwyEhxQ0rrMsvkws=
 
 Name: content/treestyletab/windowHelperHacks.js
 Digest-Algorithms: MD5 SHA1
@@ -208,8 +203,8 @@ SHA1-Digest: q0mYa40sk7KoHzdmK6voR/OuGF8=
 
 Name: defaults/preferences/treestyletab.js
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: vXg0XUNA6dpDy6LBjdxO8g==
-SHA1-Digest: b9nv5QEmT1sZj/o8+K7DnzAHGqg=
+MD5-Digest: JGRAS3FmoBIMhh7dwiPjMQ==
+SHA1-Digest: H0KFSNZge2z1eeNW68YGDlw0+Vg=
 
 Name: locale/cs/treestyletab/license.txt
 Digest-Algorithms: MD5 SHA1
@@ -218,13 +213,13 @@ SHA1-Digest: AmPIaBSAXJtd03ZD/LGrxu3FN3Y=
 
 Name: locale/cs/treestyletab/treestyletab.dtd
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: S1c7sGxI5L45WTemrDpN2Q==
-SHA1-Digest: r5pt9I98GQbtwLsN9lrvKzVaIWU=
+MD5-Digest: /mX/xFzRkHcwITPow9LgCg==
+SHA1-Digest: WMnWhoa7Igq6/CETJrTdmoqwkl4=
 
 Name: locale/cs/treestyletab/treestyletab.properties
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: 1OpIC14m6S/qgYW69Eye+Q==
-SHA1-Digest: WsOdDNLMXoAK20xYSsHEn3TQEmw=
+MD5-Digest: O/AN4Uc0E4AQo1aPJY3juw==
+SHA1-Digest: Hqg1966n8g8nZniPCPyx5/gR0iI=
 
 Name: locale/da-DK/treestyletab/license.txt
 Digest-Algorithms: MD5 SHA1
@@ -233,13 +228,13 @@ SHA1-Digest: vjay7k00E2Dhmo0XsTlEeFTRPXI=
 
 Name: locale/da-DK/treestyletab/treestyletab.dtd
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: MGcs5SmhA0RFaLZ+jMuBpg==
-SHA1-Digest: E1K4ntc3dnYJnNyyqCGIFgZn59c=
+MD5-Digest: DF/qlqkW+LPOm+xiDtj1tQ==
+SHA1-Digest: COub0FsdcpxqVbVNC7KiWcB4JX8=
 
 Name: locale/da-DK/treestyletab/treestyletab.properties
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: Is2C/T/4urDxTo+QeKFPrw==
-SHA1-Digest: ST1q6G8rHvDj78R+2ob8U7WMBdo=
+MD5-Digest: pJBLR6vZgkgLN7GMzqdiMQ==
+SHA1-Digest: SLwGYJeaFtqLRPDA5u1NjAl7g6s=
 
 Name: locale/de-DE/treestyletab/license.txt
 Digest-Algorithms: MD5 SHA1
@@ -248,13 +243,13 @@ SHA1-Digest: JdQfP7XjmROHYlyQEMxiYImBB38=
 
 Name: locale/de-DE/treestyletab/treestyletab.dtd
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: g5xm6kv8MCM9UpFM67F6EA==
-SHA1-Digest: uFn6iFBt/WujKnMH1Txp8N810NY=
+MD5-Digest: WccbaoYXPT5hemDgkG02Zw==
+SHA1-Digest: QJZ9Z7S+QkW7fn9PKyR37RQDhec=
 
 Name: locale/de-DE/treestyletab/treestyletab.properties
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: 2xWdE6vpVKQOuO4OMCsD7A==
-SHA1-Digest: WaEIjebxJPfTO63MAdAc868HYWQ=
+MD5-Digest: 7IS4Rn+9/iCJoYNSq0MBHw==
+SHA1-Digest: +NBZ9kqAfyhgr7+ZdLZzTHldqtc=
 
 Name: locale/en-US/treestyletab/license.txt
 Digest-Algorithms: MD5 SHA1
@@ -263,13 +258,13 @@ SHA1-Digest: /vNGGzRR58QK5AOQjlorkE5GCAI=
 
 Name: locale/en-US/treestyletab/treestyletab.dtd
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: 79tbzrCYB/x0bdBOiDfs7w==
-SHA1-Digest: Ll5LFDQhfOdJg8EMWUO/QAZdG78=
+MD5-Digest: ASou9ZtsPEgWVQMF2IRQrA==
+SHA1-Digest: 4cR3aYnrXvcG7hwpf0cA1Q+xfNc=
 
 Name: locale/en-US/treestyletab/treestyletab.properties
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: L17tCQGtPt5xUfMg2yEoIA==
-SHA1-Digest: Sc94PktWKzBULitXzUk++VP0TY0=
+MD5-Digest: 22ZTEPS58VkA7FaHK0sbmQ==
+SHA1-Digest: qD99rSb8+piKakbtwYwzJeQKirU=
 
 Name: locale/es-ES/treestyletab/license.txt
 Digest-Algorithms: MD5 SHA1
@@ -278,13 +273,13 @@ SHA1-Digest: OeORv30Cbr8ylQKVbM0O9Y5n+4Y=
 
 Name: locale/es-ES/treestyletab/treestyletab.dtd
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: FZ8qygxK89diULrqTjwkUA==
-SHA1-Digest: /ALFGxPRT17mrwhASIWhTTVggq8=
+MD5-Digest: 1ISa3rQP4wr/vUx/rgXTeA==
+SHA1-Digest: BaaGstEvjiFHlWS3XOPTROUY0BY=
 
 Name: locale/es-ES/treestyletab/treestyletab.properties
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: fhSY0PSLS1+LW++TcWeCTQ==
-SHA1-Digest: wFbxgi5Ta2nDFmpxoaPTzItQ4uw=
+MD5-Digest: 8UfYIPpAbJ3l84WQNoGRpQ==
+SHA1-Digest: vxjQNy3iV4ZzXklxSwO76SQHYKs=
 
 Name: locale/fr-FR/treestyletab/license.txt
 Digest-Algorithms: MD5 SHA1
@@ -293,13 +288,13 @@ SHA1-Digest: eSqlFr5OnT5gIpY1PF7f/E3bHas=
 
 Name: locale/fr-FR/treestyletab/treestyletab.dtd
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: N6bDJ3SzgVZe1UlTgRFwsg==
-SHA1-Digest: PXpG4+Xyjn3jjJJDZemJaFQeQNA=
+MD5-Digest: MmU2dKfXeLH4MAtJ6fi3dg==
+SHA1-Digest: X6nsnz03rOIR03C0Enh2cHkPgGI=
 
 Name: locale/fr-FR/treestyletab/treestyletab.properties
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: x5Pr+hhfhYBMvi7ef+mCyg==
-SHA1-Digest: a72vTBccSDPwd5oGIw1sOAemr6Y=
+MD5-Digest: ++Hzis+f+8VGKcUaMXVgyQ==
+SHA1-Digest: GjhFe1p1otrIRII5bMCDGAI+ATM=
 
 Name: locale/it-IT/treestyletab/license.txt
 Digest-Algorithms: MD5 SHA1
@@ -308,13 +303,13 @@ SHA1-Digest: DqBJQrV8f3tss7fKSnCdeXNIxYs=
 
 Name: locale/it-IT/treestyletab/treestyletab.dtd
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: lQk7kY4EANS4K8T/ikjJLQ==
-SHA1-Digest: L5MogwLPip1K4gUGbiazhgzLKhg=
+MD5-Digest: R8I9lkof+2i7nzfRcCfSRg==
+SHA1-Digest: yvs8t+u6XPVP1d778dAZL3JB6wE=
 
 Name: locale/it-IT/treestyletab/treestyletab.properties
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: QR38Juc6mCm6solQWa2xBA==
-SHA1-Digest: bv3khdm86jVIVgEofDTtjZsHIuk=
+MD5-Digest: OdSG45fnj9cDRt91Y0DXxw==
+SHA1-Digest: KSVrFtHQQ1VuVt1A6Ic0ebJu6g0=
 
 Name: locale/ja/treestyletab/license.txt
 Digest-Algorithms: MD5 SHA1
@@ -323,13 +318,13 @@ SHA1-Digest: /vNGGzRR58QK5AOQjlorkE5GCAI=
 
 Name: locale/ja/treestyletab/treestyletab.dtd
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: FkeegJj5UPAbmhnKhVcf3A==
-SHA1-Digest: FdMi4A/WAXHC4XUZ+xyzLSPg0hs=
+MD5-Digest: jlz78yuKfyWP0RqbsJQoLw==
+SHA1-Digest: lFUmY8dsbbw9c1AaRThB5ykK1PI=
 
 Name: locale/ja/treestyletab/treestyletab.properties
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: ty4qq150WIIqHOA4dQL72g==
-SHA1-Digest: tg0cXe32VqIqrm6fXFf2ocalihw=
+MD5-Digest: NoQ0y4vzhtacC7ljT4o6ww==
+SHA1-Digest: kljqqPXCovLL4rLAiEAoIf+opY0=
 
 Name: locale/pl/treestyletab/license.txt
 Digest-Algorithms: MD5 SHA1
@@ -338,13 +333,13 @@ SHA1-Digest: JwRGjnhAsrasY46ktL+EtP3fxDI=
 
 Name: locale/pl/treestyletab/treestyletab.dtd
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: H9KOrshnfLwdtj7W5L+61g==
-SHA1-Digest: eqB5I2Nq/aUMmXlWRW2lU+ZKVTo=
+MD5-Digest: 05JWMIjA1YJEJ8QnOPDMzg==
+SHA1-Digest: 112CqdOybA+tAyb1vWPhBsl5g8o=
 
 Name: locale/pl/treestyletab/treestyletab.properties
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: aXOCIJVBmBnybDOnPlhGRA==
-SHA1-Digest: ydBiJ4Ihh7jxe6uxPl+y+ryyIAE=
+MD5-Digest: IddHfedr6on89fmT9uVrTA==
+SHA1-Digest: BkllKyZPkRQY7sZyylWMTbnlbjw=
 
 Name: locale/ru/treestyletab/license.txt
 Digest-Algorithms: MD5 SHA1
@@ -353,13 +348,13 @@ SHA1-Digest: Ewz5/CWtInQDfBCQoje+iGZbjEE=
 
 Name: locale/ru/treestyletab/treestyletab.dtd
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: dWGYPSeZ5341VaTF1/MdXA==
-SHA1-Digest: pK3SDZcLZCbCfqnVARH8M+RP84c=
+MD5-Digest: aGUwY4SQARaxSP5aW8m5Zg==
+SHA1-Digest: kvaRTT8I2w1ed/qOmNwoiriEmz4=
 
 Name: locale/ru/treestyletab/treestyletab.properties
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: RvE1DFsb3pKW2EnPbQGwfQ==
-SHA1-Digest: iHK9XGw25Bu3yZgFRrR6IxYRM/Y=
+MD5-Digest: RAEGG8HPs7aimdnGgS13Uw==
+SHA1-Digest: lyzaI1FejimAOBu+Z53hyrbRID4=
 
 Name: locale/sv-SE/treestyletab/license.txt
 Digest-Algorithms: MD5 SHA1
@@ -368,13 +363,13 @@ SHA1-Digest: Zfn4AKRpBe4E44Sg1HIuoxFmif0=
 
 Name: locale/sv-SE/treestyletab/treestyletab.dtd
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: V6/Vd3aktzj4JZvOwOdXsw==
-SHA1-Digest: ngGCi/Hn1Kgd+plJuY2vZmD4ZdA=
+MD5-Digest: zfQPbROEGag5+VsSQWE9Mg==
+SHA1-Digest: uYkQNqCRb/RGZhwvqKmFRbDOSU0=
 
 Name: locale/sv-SE/treestyletab/treestyletab.properties
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: ON1qN8ZBQJ+GuSlvljkvPA==
-SHA1-Digest: Ldbw+O4wPpTHxzQYYOI+EnXeGVs=
+MD5-Digest: GnKOXY1MMqBR34lBPvqR0Q==
+SHA1-Digest: iRgiJTH4pwbFyhe8Ubm/psOWxxk=
 
 Name: locale/zh-CN/treestyletab/license.txt
 Digest-Algorithms: MD5 SHA1
@@ -383,13 +378,13 @@ SHA1-Digest: CxdX2iIT5cw2WR+1eMh9AA78n+U=
 
 Name: locale/zh-CN/treestyletab/treestyletab.dtd
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: KnhHB+1luU5RevlomI6QFw==
-SHA1-Digest: 8bj+cDEDY+yjEXy7IO/5PnxL9js=
+MD5-Digest: 9tCPNHJbg5S+2yxxbT86YA==
+SHA1-Digest: Zp3pDIoHeenUkT6SAlxb1I6GKU0=
 
 Name: locale/zh-CN/treestyletab/treestyletab.properties
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: Uqt5+pq/jg2Vx2ar82oOkQ==
-SHA1-Digest: gVahm7yzs/TRB+CMvQLFBNT+PEM=
+MD5-Digest: OsR9IYx3zj4zoqhxiheJZA==
+SHA1-Digest: +Q7c8OOvoKSrgZZdgFzU86QHM24=
 
 Name: locale/zh-TW/treestyletab/license.txt
 Digest-Algorithms: MD5 SHA1
@@ -398,23 +393,23 @@ SHA1-Digest: XVqJMKhADCM73LtM7OFthNdECYo=
 
 Name: locale/zh-TW/treestyletab/treestyletab.dtd
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: sYDn/nP1GsBXhSJ7A+lIQA==
-SHA1-Digest: 693d8xo1yzJWXJEr3aJvNW/1kRI=
+MD5-Digest: ZFU8RjBxpI5mULkjIgGmmg==
+SHA1-Digest: BVst1wseNpdYpEJg1GHaawsRzR4=
 
 Name: locale/zh-TW/treestyletab/treestyletab.properties
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: bop162cseEmMo1bykaAIYA==
-SHA1-Digest: 820CmLC9fE1O0AAZaeKrzW0ER0g=
+MD5-Digest: fgsDbaou5f5LcJpduv6aag==
+SHA1-Digest: IjvrITYIupuo8dctlLwODAQN0BA=
 
 Name: modules/autoHide.js
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: 9qFptUgYah+iSy44QE8Naw==
-SHA1-Digest: OHvqXa79X2rOIFUeOsIEN78zno4=
+MD5-Digest: IElxzm/96AIvGK9K6khhtg==
+SHA1-Digest: Gb65QK2DLT8WMmgJs3KM2knf/U4=
 
 Name: modules/base.js
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: 1TiyG9rY3cIybESDkUrR5g==
-SHA1-Digest: 1S8UA0ZVJI817ysQG2J4cT9Qoy0=
+MD5-Digest: 6qTYpA5oMrM7QHlIkgt9OA==
+SHA1-Digest: uQyIL7M2lD17rjrZ+E1z7Q4J4BA=
 
 Name: modules/bookmark.js
 Digest-Algorithms: MD5 SHA1
@@ -423,8 +418,8 @@ SHA1-Digest: GYZNPm63Yrhqkide8fT3TyXFJvw=
 
 Name: modules/browser.js
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: mGAY2Pmq1BEh2fg63QWAaA==
-SHA1-Digest: RyyoaY7u1toldesei3wwQ9hQkoM=
+MD5-Digest: yb9w+tgDQ+lDz0igSMCLcw==
+SHA1-Digest: VLM+wqY+tJa7WClTan5o2XIdUmM=
 
 Name: modules/browserUIShowHideObserver.js
 Digest-Algorithms: MD5 SHA1
@@ -433,8 +428,8 @@ SHA1-Digest: D84Jbg20wtUqqgG4pWCgF9ZdVaw=
 
 Name: modules/constants.js
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: BZIM6ulqOhpQxI0KmT/J4Q==
-SHA1-Digest: ZQ/tn2EH7qOR5Pmaez8DZaeyVXo=
+MD5-Digest: 9+JmxhAghfdCL/mbs03wNg==
+SHA1-Digest: ttHSHEIzqwObjspg2lj97KXGUL4=
 
 Name: modules/contentBridge.js
 Digest-Algorithms: MD5 SHA1
@@ -448,18 +443,18 @@ SHA1-Digest: cc6D7hos4bGfa5ReVduq0YkLnWI=
 
 Name: modules/fullTooltip.js
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: FoqOnzIGy6E7x19QU0hQFQ==
-SHA1-Digest: 90q+tMYpgfjZ5gI8NgtY/zurn8E=
+MD5-Digest: ppTGtCz9CG54M5gxA+rOBA==
+SHA1-Digest: se+y0uUD8czSwVpmCXA7rjwWqaw=
 
 Name: modules/groupTab.js
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: mLv7QoeDW18xj5Qr0oFy3Q==
-SHA1-Digest: Q5YR/wKCEBtik8DUl+kY7AFfd8c=
+MD5-Digest: voU8KIeESbIMxZfx1u8YHg==
+SHA1-Digest: hAjZ00W7g8wtADEBISmiECSgxZw=
 
 Name: modules/pseudoTreeBuilder.js
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: lOXZb5hQEp7AKAt5nQPr8A==
-SHA1-Digest: jFpw99/71Tjjz9Yg81LVDPqWJPM=
+MD5-Digest: Kpwp2rL3SgFVDGGHaptA+A==
+SHA1-Digest: QURQEkp5d1zyuGJ3JmfZJCcIuXY=
 
 Name: modules/ReferenceCounter.js
 Digest-Algorithms: MD5 SHA1
@@ -473,8 +468,8 @@ SHA1-Digest: a4KpeD2z5f3xYaa//UQGtAA5+j0=
 
 Name: modules/tabbarDNDObserver.js
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: SVM/EuTv3Ybu8nxvHnuC2Q==
-SHA1-Digest: jKHCxKjOpz2CQJK2gzwifuh+Uec=
+MD5-Digest: JskBug8SPq/rqzT9eAb0dg==
+SHA1-Digest: t8WJiQkwmVrwgn82UKL2dPT+Bos=
 
 Name: modules/tabContentsObserver.js
 Digest-Algorithms: MD5 SHA1
@@ -493,13 +488,13 @@ SHA1-Digest: QRODHmwaRkX+b/zrhPVckxz7kf4=
 
 Name: modules/utils.js
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: MPLBmR6Rg3wF6+6R5yAEZw==
-SHA1-Digest: 1jMd3iV7CwXwLgjmhzjCJ2Sd5BM=
+MD5-Digest: hnAteWvM5MtSlGxrWWmPEA==
+SHA1-Digest: DkdIy4OgGbmzh108IyuvrpmIQ+c=
 
 Name: modules/window.js
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: /T5G3EZnKKl1v+Gs2/xLsg==
-SHA1-Digest: mjDJSrMcZLOjZk+pWIxl91kXSw4=
+MD5-Digest: kfZbFoYTPQV1kFxRX+uL1A==
+SHA1-Digest: 7fP4bvssOTzh1XivwjDe+0ue5Ho=
 
 Name: modules/lib/animationManager.js
 Digest-Algorithms: MD5 SHA1
@@ -588,8 +583,8 @@ SHA1-Digest: DvaxcjAmPsnt7a1LFCcI+kZ8O4U=
 
 Name: skin/classic/treestyletab/group.css
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: BjIr5GS7yRoBH6Ki7jcDzg==
-SHA1-Digest: 5BZvSzT495FHylk38Y/+5t82t5E=
+MD5-Digest: bVtmjasGd9xaoQ+mPfcRhw==
+SHA1-Digest: zEImyqm58rRACL8fw/gEVv1BRVY=
 
 Name: skin/classic/treestyletab/license.txt
 Digest-Algorithms: MD5 SHA1
@@ -648,8 +643,8 @@ SHA1-Digest: OeNgpLNuSgMsZsZ2yp1YXdy3Fg8=
 
 Name: skin/classic/treestyletab/metal/base.css
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: TNk9iR8Q3ipTt8YGmNsffQ==
-SHA1-Digest: 1PFGo316AmQuindR0mhEfcHIq2I=
+MD5-Digest: hb/Q9c7Vloc7nVMHsm6cqw==
+SHA1-Digest: hFjIjft5NtFah+z+7vlfITPWBXU=
 
 Name: skin/classic/treestyletab/metal/Darwin.css
 Digest-Algorithms: MD5 SHA1
@@ -753,13 +748,13 @@ SHA1-Digest: VNJPj9nckqPyRb2Ff3HWiGPQE58=
 
 Name: skin/classic/treestyletab/sidebar/sidebar.css
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: KDhvyIF+hdzOv2Y+0HhMyg==
-SHA1-Digest: Hat43VvEtekC4PdBU3rxCdoK6hE=
+MD5-Digest: 155JQwwaYZLVIoCw3Aqlag==
+SHA1-Digest: kCvPTvoTlPQFEY25DBBdTktUNVo=
 
 Name: skin/classic/treestyletab/square/base.css
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: 86fdJZscRoUZHtV5iyvicw==
-SHA1-Digest: Le6rdBYbmghJePZWLTxtaPwFTqk=
+MD5-Digest: 7elXQXx/AV+21AEq+84dAw==
+SHA1-Digest: T7j8PUzg8peCmHWYmY26cyrDi2w=
 
 Name: skin/classic/treestyletab/square/Darwin.css
 Digest-Algorithms: MD5 SHA1
@@ -818,8 +813,8 @@ SHA1-Digest: uJCYdd6cnRl0V0Vt+sFUFWmD4oE=
 
 Name: skin/classic/treestyletab/square/vertigo.css
 Digest-Algorithms: MD5 SHA1
-MD5-Digest: YLJ7vvT+Tx9/UICfK4wVJQ==
-SHA1-Digest: kb6KoccqQfUIWkC1Dt3Ma3P7jAQ=
+MD5-Digest: x5bWTAcM++UPB3EJFA3J3A==
+SHA1-Digest: 08KztOOzgQ0M+D/3ayVlOxnPaw4=
 
 Name: skin/classic/treestyletab/twisty/twisty-modern-b-l.png
 Digest-Algorithms: MD5 SHA1
diff --git a/META-INF/mozilla.rsa b/META-INF/mozilla.rsa
index 3979352..5f16bd6 100644
Binary files a/META-INF/mozilla.rsa and b/META-INF/mozilla.rsa differ
diff --git a/META-INF/mozilla.sf b/META-INF/mozilla.sf
index ad31b7f..c8d33f2 100644
--- a/META-INF/mozilla.sf
+++ b/META-INF/mozilla.sf
@@ -1,4 +1,4 @@
 Signature-Version: 1.0
-MD5-Digest-Manifest: oVOnv2S1lDvsplClJaljyQ==
-SHA1-Digest-Manifest: qt6nGW08/CsBc6g0DFWFIZjhT2s=
+MD5-Digest-Manifest: 4FHXGA2ea1h1jce/iZRxrg==
+SHA1-Digest-Manifest: FwyNGjMqQp7Akk7ZBeeaj0BlOjY=
 
diff --git a/content/treestyletab/config.js b/content/treestyletab/config.js
index db33c8f..349bfb5 100644
--- a/content/treestyletab/config.js
+++ b/content/treestyletab/config.js
@@ -223,12 +223,10 @@ function onChangeTabbarPosition()
 
 	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') {
diff --git a/content/treestyletab/config.xul b/content/treestyletab/config.xul
index c85a27d..78ced9d 100644
--- a/content/treestyletab/config.xul
+++ b/content/treestyletab/config.xul
@@ -45,12 +45,6 @@
 		<preference id="extensions.treestyletab.maxTreeLevel.vertical"
 			name="extensions.treestyletab.maxTreeLevel.vertical"
 			type="int"/>
-		<preference id="extensions.treestyletab.allowSubtreeCollapseExpand.horizontal"
-			name="extensions.treestyletab.allowSubtreeCollapseExpand.horizontal"
-			type="bool"/>
-		<preference id="extensions.treestyletab.allowSubtreeCollapseExpand.vertical"
-			name="extensions.treestyletab.allowSubtreeCollapseExpand.vertical"
-			type="bool"/>
 		<preference id="extensions.treestyletab.tabbar.invertClosebox"
 			name="extensions.treestyletab.tabbar.invertClosebox"
 			type="bool"/>
@@ -161,14 +155,6 @@
 				preference="extensions.treestyletab.tabbar.narrowScrollbar"
 				label="&config.tabbar.narrowScrollbar;"/>
 		</hbox>
-		<hbox align="center">
-			<checkbox id="extensions.treestyletab.allowSubtreeCollapseExpand.horizontal-check"
-				preference="extensions.treestyletab.allowSubtreeCollapseExpand.horizontal"
-				label="&config.allowSubtreeCollapseExpand;"/>
-			<checkbox id="extensions.treestyletab.allowSubtreeCollapseExpand.vertical-check"
-				preference="extensions.treestyletab.allowSubtreeCollapseExpand.vertical"
-				label="&config.allowSubtreeCollapseExpand;"/>
-		</hbox>
 		<hbox id="maxTreeLevel-horizontal"
 			align="center">
 			<checkbox id="maxTreeLevel-checkbox-horizontal"
@@ -195,24 +181,13 @@
 		</hbox>
 		<hbox id="maxTreeLevel-vertical"
 			align="center">
-			<checkbox id="maxTreeLevel-checkbox-vertical"
-				preference="extensions.treestyletab.maxTreeLevel.vertical"
-				label="&config.enableSubtreeIndent;"
-				onsynctopreference="return onSyncMaxTreeLevelUIToPref('maxTreeLevel-checkbox-vertical');"
-				onsyncfrompreference="return onSyncMaxTreeLevelPrefToUI('maxTreeLevel-checkbox-vertical');"
-				sync-enabled-state-targets="
-					maxTreeLevel-textbox-vertical-before
-					maxTreeLevel-textbox-vertical
-					maxTreeLevel-textbox-vertical-after
-				"/>
 			<label id="maxTreeLevel-textbox-vertical-before"
 				control="maxTreeLevel-textbox-vertical"
-				value="&config.maxTreeLevel.before;"/>
+				value="&config.enableSubtreeIndent;&config.maxTreeLevel.before;"/>
 			<textbox id="maxTreeLevel-textbox-vertical"
+				preference="extensions.treestyletab.maxTreeLevel.vertical"
 				type="number"
-				min="1" increment="1" style="width:4em;"
-				oninput="onSyncMaxTreeLevelUIToPref('maxTreeLevel-checkbox-vertical', true);"
-				onchange="onSyncMaxTreeLevelUIToPref('maxTreeLevel-checkbox-vertical', true);"/>
+				min="1" increment="1" style="width:4em;"/>
 			<label id="maxTreeLevel-textbox-vertical-after"
 				control="maxTreeLevel-textbox-vertical"
 				value="&config.maxTreeLevel.after;"/>
diff --git a/content/treestyletab/license.txt b/content/treestyletab/license.txt
index c35e8f1..7c22cef 100644
--- a/content/treestyletab/license.txt
+++ b/content/treestyletab/license.txt
@@ -20,6 +20,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)
+                J. Ryan Stinnett <https://github.com/jryans> (bug fix around tearing off of multiple tabs)
 
 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.css b/content/treestyletab/treestyletab.css
index ecf5c54..4c505d6 100644
--- a/content/treestyletab/treestyletab.css
+++ b/content/treestyletab/treestyletab.css
@@ -690,6 +690,12 @@ window[chromehidden~="toolbar"]
 	opacity: 1;
 }
 
+/* required to apply CSS multi columns */
+#treestyletab-full-tree-tooltip .treestyletab-pseudo-tree-root,
+#treestyletab-full-tree-tooltip .treestyletab-pseudo-tree-root vbox {
+	display: block;
+}
+
 
 /* addon compatibility */
 
diff --git a/content/treestyletab/treestyletab.xul b/content/treestyletab/treestyletab.xul
index 6065ef6..db04de7 100644
--- a/content/treestyletab/treestyletab.xul
+++ b/content/treestyletab/treestyletab.xul
@@ -12,7 +12,8 @@
 
 <!DOCTYPE overlay SYSTEM "chrome://treestyletab/locale/treestyletab.dtd">
 <overlay id="treestyletab-overlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+         xmlns:svg="http://www.w3.org/2000/svg">
 
 <script src="res/tabsDragUtils.js" type="application/javascript"/>
 <script src="treestyletab.js" type="application/javascript"/>
@@ -148,6 +149,18 @@
 		onpopupshown="if ('setConsumeRollupEvent' in this.popupBoxObject) this.popupBoxObject.setConsumeRollupEvent(this.popupBoxObject.ROLLUP_NO_CONSUME || PopupBoxObject.ROLLUP_NO_CONSUME);"
 		onclick="this.hidePopup();"
 		onDOMMouseScroll="this.hidePopup()"/>
+
+	<svg:svg height="0">
+		<!--
+		This is used to clip overflowed boxes. For example, scrollbar
+		elements with "-moz-appearance" sometimes become larger than
+		the parent box. This mask clips such a overflowed contents.
+		-->
+		<svg:clipPath id="treestyletab-box-clip-path"
+			clipPathUnits="objectBoundingBox">
+			<svg:path d="m0,0 V1 H1 V-1 H-1 z"/>
+		</svg:clipPath>
+	</svg:svg>
 </popupset>
 
 </overlay>
diff --git a/content/treestyletab/windowHelper.js b/content/treestyletab/windowHelper.js
index 1d2e301..7a4f978 100644
--- a/content/treestyletab/windowHelper.js
+++ b/content/treestyletab/windowHelper.js
@@ -13,9 +13,9 @@ var TreeStyleTabWindowHelper = {
 	preInit : function TSTWH_preInit() 
 	{
 		gBrowserInit.__treestyletab___delayedStartup = gBrowserInit._delayedStartup;
-		gBrowserInit._delayedStartup = function(...args) {
+		gBrowserInit._delayedStartup = function(...aArgs) {
 			TreeStyleTabWindowHelper.runningDelayedStartup = true;
-			var retVal = gBrowserInit.__treestyletab___delayedStartup.apply(this, args);
+			var retVal = gBrowserInit.__treestyletab___delayedStartup.apply(this, aArgs);
 			TreeStyleTabWindowHelper.runningDelayedStartup = false;
 			return retVal;
 		};
@@ -112,11 +112,11 @@ var TreeStyleTabWindowHelper = {
 		// Instead, I change the behavior of the method only at the
 		// startup process.
 		gBrowser.__treestyletab__swapBrowsersAndCloseOther = gBrowser.swapBrowsersAndCloseOther;
-		gBrowser.swapBrowsersAndCloseOther = function(...args) {
+		gBrowser.swapBrowsersAndCloseOther = function(aOurTab, aRemoteTab, ...aArgs) {
 			if (TreeStyleTabWindowHelper.runningDelayedStartup &&
-				TreeStyleTabService.tearOffSubtreeFromRemote())
+				TreeStyleTabService.tearOffSubtreeFromRemote(aRemoteTab))
 				return;
-			return gBrowser.__treestyletab__swapBrowsersAndCloseOther.apply(this, args);
+			return gBrowser.__treestyletab__swapBrowsersAndCloseOther.apply(this, [aOurTab, aRemoteTab].concat(aArgs));
 		};
 	},
  
@@ -268,7 +268,7 @@ var TreeStyleTabWindowHelper = {
 
 		window.__treestyletab__BrowserGoHome = window.BrowserGoHome;
 		window.BrowserGoHome = function(aEvent) {
-			TreeStyleTabService.onBeforeGoHome(aEvent, gBrowser);
+			aEvent = TreeStyleTabService.onBeforeGoHome(aEvent, gBrowser);
 			return window.__treestyletab__BrowserGoHome.call(this, aEvent);
 		};
 
@@ -501,10 +501,12 @@ var TreeStyleTabWindowHelper = {
 
 		b.__treestyletab__loadTabs = b.loadTabs;
 		b.loadTabs = function(aURIs, aLoadInBackground, aReplace, ...aArgs) {
-			if (aReplace)
-				this.treeStyleTab.readyToOpenChildTab(this.selectedTab, true);
-			else if (typeof this.treeStyleTab.nextOpenedTabToBeParent == 'undefined')
-				this.treeStyleTab.nextOpenedTabToBeParent = true;
+			if (!TreeStyleTabWindowHelper.runningDelayedStartup) { // don't open home tabs as a tree!
+				if (aReplace)
+					this.treeStyleTab.readyToOpenChildTab(this.selectedTab, true);
+				else if (typeof this.treeStyleTab.nextOpenedTabToBeParent == 'undefined')
+					this.treeStyleTab.nextOpenedTabToBeParent = true;
+			}
 
 			var result;
 			var tabs = [];
diff --git a/defaults/preferences/treestyletab.js b/defaults/preferences/treestyletab.js
index 70390fd..8292027 100644
--- a/defaults/preferences/treestyletab.js
+++ b/defaults/preferences/treestyletab.js
@@ -129,7 +129,8 @@ pref("extensions.treestyletab.tabbar.autoHide.contentAreaScreen.enabled", true);
  * Triggers for the "Auto Hide" feature. They can be controlled via the
  * configuration dialog.
  */
-pref("extensions.treestyletab.tabbar.autoHide.delay",      50);
+pref("extensions.treestyletab.tabbar.autoHide.delay.show", 50);
+pref("extensions.treestyletab.tabbar.autoHide.delay.hide", -1); // same to "show"
 pref("extensions.treestyletab.tabbar.autoHide.area",       7);
 pref("extensions.treestyletab.tabbar.autoShow.mousemove", true);
 pref("extensions.treestyletab.tabbar.autoShow.accelKeyDown", true);
@@ -184,13 +185,6 @@ pref("extensions.treestyletab.tabbar.fixed.autoCancelOnDrop", true);
 pref("extensions.treestyletab.enableSubtreeIndent.allTabsPopup", true);
 
 /**
- * These prefs activate "collaable tree" feature for horizontal and
- * vertical tab bar.
- */
-pref("extensions.treestyletab.allowSubtreeCollapseExpand.horizontal", false);
-pref("extensions.treestyletab.allowSubtreeCollapseExpand.vertical",   true);
-
-/**
  * Activates "stacked tabs" in the horizontal tab bar.
  * It is very hard to know how many tabs are collapsed in a horizontal tab bar.
  * If "stacked tabs" is activated, collapsed tabs will be shown as a tab behind
@@ -352,6 +346,7 @@ pref("extensions.treestyletab.tooltip.fullTooltipDelay", 2000);
  * If true, too many items are shown in multiple columns.
  */
 pref("extensions.treestyletab.tooltip.columnize", true);
+pref("extensions.treestyletab.tooltip.columnize.width", "20em");
 
 /**
  * Visibility of extra menu items for the context menu on tabs, inserted by TST.
@@ -668,6 +663,7 @@ pref("extensions.treestyletab.pinnedTab.faviconized", true);
  * If true, too many items are shown in multiple columns in a dummy (group) tab.
  */
 pref("extensions.treestyletab.groupTab.columnize", true);
+pref("extensions.treestyletab.groupTab.columnize.width", "20em");
 
 /**
  * Compatibility hack flags for other addons. They can be disabled by each
@@ -745,5 +741,6 @@ pref("extensions.treestyletab.debug.browser", false);
 pref("extensions.treestyletab.debug.browserUIShowHideObserver", false);
 pref("extensions.treestyletab.debug.contentBridge", false);
 pref("extensions.treestyletab.debug.fullscreenObserver", false);
+pref("extensions.treestyletab.debug.fullTooltip", false);
 pref("extensions.treestyletab.debug.tabbarDNDObserver", false);
 pref("extensions.treestyletab.debug.window", false);
diff --git a/install.rdf b/install.rdf
index 03ac69f..121965c 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.16.2016021602"
+                   em:version="0.17.2016031101"
                    em:creator="YUKI "Piro" Hiroshi"
                    em:description="Show tabs like a tree."
                    em:homepageURL="http://piro.sakura.ne.jp/xul/_treestyletab.html.en"
@@ -32,6 +32,7 @@
           <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:contributor>J. Ryan Stinnett (bug fix around tearing off of multiple tabs)</em:contributor>
       </RDF:Description>
     </em:localized>
     <em:localized>
@@ -47,6 +48,7 @@
           <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:contributor>J. Ryan Stinnett (bug fix around tearing off of multiple tabs)</em:contributor>
       </RDF:Description>
     </em:localized>
     <em:localized>
@@ -62,6 +64,7 @@
           <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:contributor>J. Ryan Stinnett (bug fix around tearing off of multiple tabs)</em:contributor>
           <em:translator>Godai71.Extenzilla (it-IT locale)</em:translator>
       </RDF:Description>
     </em:localized>
@@ -78,6 +81,7 @@
           <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:contributor>J. Ryan Stinnett (bug fix around tearing off of multiple tabs)</em:contributor>
           <em:translator>Fatiaomao (zh-CN locale)</em:translator>
           <em:translator>hzhbest (zh-CN locale)</em:translator>
       </RDF:Description>
@@ -95,6 +99,7 @@
           <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:contributor>J. Ryan Stinnett (bug fix around tearing off of multiple tabs)</em:contributor>
           <em:translator>tito (es-ES locale)</em:translator>
       </RDF:Description>
     </em:localized>
@@ -111,6 +116,7 @@
           <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:contributor>J. Ryan Stinnett (bug fix around tearing off of multiple tabs)</em:contributor>
           <em:translator>Andy Pillip (de-DE locale)</em:translator>
           <em:translator>Björn Kautler (de-DE locale)</em:translator>
       </RDF:Description>
@@ -128,6 +134,7 @@
           <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:contributor>J. Ryan Stinnett (bug fix around tearing off of multiple tabs)</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>
@@ -146,6 +153,7 @@
           <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:contributor>J. Ryan Stinnett (bug fix around tearing off of multiple tabs)</em:contributor>
           <em:translator>L'Autour (ru locale)</em:translator>
           <em:translator>Infocatcher (ru locale)</em:translator>
       </RDF:Description>
@@ -163,6 +171,7 @@
           <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:contributor>J. Ryan Stinnett (bug fix around tearing off of multiple tabs)</em:contributor>
           <em:translator>Leszek(teo)Życzkowski (pl locale)</em:translator>
       </RDF:Description>
     </em:localized>
@@ -179,6 +188,7 @@
           <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:contributor>J. Ryan Stinnett (bug fix around tearing off of multiple tabs)</em:contributor>
           <em:translator>Laurent Haas (fr-FR locale)</em:translator>
           <em:translator>AxlMun (fr-FR locale)</em:translator>
       </RDF:Description>
@@ -196,6 +206,7 @@
           <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:contributor>J. Ryan Stinnett (bug fix around tearing off of multiple tabs)</em:contributor>
           <em:translator>Mikael Hiort af Ornäs (sv-SE)</em:translator>
       </RDF:Description>
     </em:localized>
@@ -212,6 +223,7 @@
           <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:contributor>J. Ryan Stinnett (bug fix around tearing off of multiple tabs)</em:contributor>
           <em:translator>Regmos (da-DK)</em:translator>
       </RDF:Description>
     </em:localized>
@@ -226,8 +238,9 @@
             <em:contributor>Philipp von Weitershausen (Sidebar style)</em:contributor>
             <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:contributor>mnoorenberghe (Firefox 36 support)</em:contributor>
+            <em:contributor>Xidorn Quan (Firefox 40+ support)</em:contributor>
+            <em:contributor>J. Ryan Stinnett (bug fix around tearing off of multiple tabs)</em:contributor>
             <em:translator>Vlastimil Ovčáčík (cs)</em:translator>
         </RDF:Description>
     </em:localized>
@@ -236,7 +249,7 @@
     <em:targetApplication>
       <RDF:Description em:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
                        em:minVersion="38.0"
-                       em:maxVersion="46.0a1" />
+                       em:maxVersion="48.0a1" />
     </em:targetApplication>
   </RDF:Description>
 </RDF:RDF>
diff --git a/locale/cs/treestyletab/treestyletab.dtd b/locale/cs/treestyletab/treestyletab.dtd
index 422f7c2..b33e9d2 100644
--- a/locale/cs/treestyletab/treestyletab.dtd
+++ b/locale/cs/treestyletab/treestyletab.dtd
@@ -19,7 +19,6 @@
 <!ENTITY config.enableSubtreeIndent "Odsazovat panely">
 <!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   ":">
diff --git a/locale/cs/treestyletab/treestyletab.properties b/locale/cs/treestyletab/treestyletab.properties
index ae9b303..7b45e54 100644
--- a/locale/cs/treestyletab/treestyletab.properties
+++ b/locale/cs/treestyletab/treestyletab.properties
@@ -53,3 +53,7 @@ compatibility_STM_warning_never=Příště se nedotazovat.
 
 closeTabsToTheEnd_vertical_label=Zavřít panely dole
 closeTabsToTheEnd_vertical_accesskey=t
+
+
+migration.treeNeverRevoked.title=Tree features of Tree Style Tab is now activated mandatorily!
+migration.treeNeverRevoked.text=Note: Some preferences to disable tree features permanently now disappeared from Tree Style Tab. If you just require only a vertical tab bar without tree features, then please switch to an alternative addon e.g. "Vertical Tabs", "Side Tabs", or others.
diff --git a/locale/da-DK/treestyletab/treestyletab.dtd b/locale/da-DK/treestyletab/treestyletab.dtd
index c03a1db..f9404d7 100644
--- a/locale/da-DK/treestyletab/treestyletab.dtd
+++ b/locale/da-DK/treestyletab/treestyletab.dtd
@@ -19,7 +19,6 @@
 <!ENTITY config.enableSubtreeIndent "Indryk faner">
 <!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   ":">
diff --git a/locale/da-DK/treestyletab/treestyletab.properties b/locale/da-DK/treestyletab/treestyletab.properties
index bb9be1c..9ec23f9 100644
--- a/locale/da-DK/treestyletab/treestyletab.properties
+++ b/locale/da-DK/treestyletab/treestyletab.properties
@@ -57,3 +57,7 @@ compatibility_STM_warning_never=Spørg ikke igen.
 
 closeTabsToTheEnd_vertical_label=Close Tabs to the Bottom
 closeTabsToTheEnd_vertical_accesskey=b
+
+
+migration.treeNeverRevoked.title=Tree features of Tree Style Tab is now activated mandatorily!
+migration.treeNeverRevoked.text=Note: Some preferences to disable tree features permanently now disappeared from Tree Style Tab. If you just require only a vertical tab bar without tree features, then please switch to an alternative addon e.g. "Vertical Tabs", "Side Tabs", or others.
diff --git a/locale/de-DE/treestyletab/treestyletab.dtd b/locale/de-DE/treestyletab/treestyletab.dtd
index dae26df..5451484 100644
--- a/locale/de-DE/treestyletab/treestyletab.dtd
+++ b/locale/de-DE/treestyletab/treestyletab.dtd
@@ -19,7 +19,6 @@
 <!ENTITY config.enableSubtreeIndent          "Tabs einrücken">
 <!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 Höhe">
 <!ENTITY config.tabbarSize.before-vertical   ":">
@@ -113,8 +112,7 @@
 <!ENTITY config.autoShow.accelKeyDown.delay.before "Nach">
 <!ENTITY config.autoShow.accelKeyDown.delay.after  "Millisekunden anzeigen">
 <!ENTITY config.autoShow.tabSwitch                 "Wenn Strg+Tab gedrückt wird um zwischen Tabs zu wechseln">
-<!ENTITY config.autoShow.feedback    "Something happen on tabs (new tab, closed tab, focus changing, title changing)">
-<!--ENTITY config.autoShow.feedback                  "Wenn Tabs geöffnet oder geschlossen werden"-->
+<!ENTITY config.autoShow.feedback                  "Wenn sich Tabs ändern (Tab geöffnet, Tab geschlossen, anderer Tab ausgewählt, Titel hat sich verändert)">
 <!ENTITY config.autoShow.feedback.delay.before     "Nach">
 <!ENTITY config.autoShow.feedback.delay.after      "Millisekunden wieder ausblenden">
 
@@ -123,39 +121,39 @@
 
 <!ENTITY config.autoCollapseExpandSubtreeOnAttach                    "Wenn ein neuer Zweig erscheint, andere Zweige automatisch zuklappen">
 <!ENTITY config.autoCollapseExpandSubtreeOnSelect                    "Wenn ein Tab ausgewählt wird, untergeordneten Zweig automatisch auf- und andere Zweige zuklappen">
-<!ENTITY config.autoCollapseExpandSubtreeOnSelect.onCurrentTabRemove "Nicht durch Schließen des aktiven Tabs auslösen">
+<!ENTITY config.autoCollapseExpandSubtreeOnSelect.onCurrentTabRemove "Nicht durch Schließen des aktiven Tab auslösen">
 <!ENTITY config.collapseExpandSubtree.dblclick                       "Bei Doppelklick auf Tab untergeordneten Zweig auf- oder zuklappen">
 <!ENTITY config.autoExpandSubtreeOnAppendChild                       "Zweig automatisch aufklappen, wenn ein Tab in den Zweig eingefügt wird">
 
 <!ENTITY config.closeParentBehavior.caption             "Wenn ein Tab geschlossen wird">
 <!ENTITY config.closeParentBehavior.close               "Untergeordnete Tabs auch schließen">
-<!ENTITY config.closeParentBehavior.promoteFirst        "Das geschlossene Tab durch das erste untergeordnete ersetzen">
-<!ENTITY config.closeParentBehavior.promoteAll          "Untergeordnete Tabs auf die Ebene des geschlossenen Tabs verschieben">
+<!ENTITY config.closeParentBehavior.promoteFirst        "Den geschlossenen Tab durch den ersten untergeordneten ersetzen">
+<!ENTITY config.closeParentBehavior.promoteAll          "Untergeordnete Tabs auf die Ebene des geschlossenen Tab verschieben">
 <!ENTITY config.closeParentBehavior.detach              "Untergeordnete Tabs ganz aus dem Zweig ausgliedern">
-<!ENTITY config.closeParentBehavior.replaceWithGroupTab "Das geschlossene Tab durch ein Pseudotab ersetzen">
-<!ENTITY config.closeRootBehavior.promoteFirst          "Das geschlossene Tab durch das erste untergeordnete ersetzen, wenn das geschlossene Tab kein übergeordnetes hatte">
+<!ENTITY config.closeParentBehavior.replaceWithGroupTab "Den geschlossenen Tab durch ein Pseudotab ersetzen">
+<!ENTITY config.closeRootBehavior.promoteFirst          "Den geschlossenen Tab durch den ersten untergeordneten ersetzen, wenn der geschlossene Tab keinen übergeordneten hatte">
 
 <!ENTITY config.focusMode "Bei Strg+Tab auch zu nicht sichtbaren Tabs wechseln">
 
 <!ENTITY config.insertNewChildAt.caption "Einfügeposition neuer untergeordneter Tabs">
-<!ENTITY config.insertNewChildAt.first   "Als erstes Tab einfügen">
-<!ENTITY config.insertNewChildAt.last    "Als letztes Tab anfügen">
+<!ENTITY config.insertNewChildAt.first   "Als ersten Tab einfügen">
+<!ENTITY config.insertNewChildAt.last    "Als letzten Tab anfügen">
 
 <!ENTITY config.undoCloseTabSet.caption  "Wenn ein Element eines Zweiges durch "Tab wiederherstellen" geöffnet wird">
 <!ENTITY config.undoCloseTabSet.ask      "Immer nachfragen">
 <!ENTITY config.undoCloseTabSet.set      "Den ganzen Zweig wiederherstellen">
-<!ENTITY config.undoCloseTabSet.separate "Nur das eine Tab wiederherstellen (Firefox Standard)">
+<!ENTITY config.undoCloseTabSet.separate "Nur den einen Tab wiederherstellen (Firefox Standard)">
 
 
 
 <!ENTITY config.tabs.advanced "Erweitert">
 
-<!ENTITY config.tooltip.includeChildren     "Titel der untergeordneten Tabs im Tooltip des Tabs anzeigen">
+<!ENTITY config.tooltip.includeChildren     "Titel der untergeordneten Tabs im Tooltip des Tab anzeigen">
 
 <!ENTITY config.bookmarkDroppedTabs.caption "Verhalten für Drag & Drop von Tab-Zweigen auf den Lesezeichenbaum">
 <!ENTITY config.bookmarkDroppedTabs.ask     "Immer nachfragen">
 <!ENTITY config.bookmarkDroppedTabs.all     "Alle Tabs im Zweig als Lesezeichen speichern">
-<!ENTITY config.bookmarkDroppedTabs.parent  "Nur das gezogene Tab als Lesezeichen speichern">
+<!ENTITY config.bookmarkDroppedTabs.parent  "Nur dem gezogenen Tab als Lesezeichen speichern">
 
 
 
diff --git a/locale/de-DE/treestyletab/treestyletab.properties b/locale/de-DE/treestyletab/treestyletab.properties
index 03b46e3..0d957d6 100644
--- a/locale/de-DE/treestyletab/treestyletab.properties
+++ b/locale/de-DE/treestyletab/treestyletab.properties
@@ -2,63 +2,58 @@ tooltip.collapseSubtree=Zweig zuklappen
 tooltip.collapseSubtree.labeled=Zweig zuklappen:\n%S
 tooltip.expandSubtree=Zweig aufklappen
 tooltip.expandSubtree.labeled=Zweig aufklappen:\n%S
-tooltip.closeTree=Diesen Zweig schließen
-tooltip.closeTree.labeled=Diesen Zweig schließen:\n%S
+tooltip.closeTree=Diesen Zweig schlie\u00DFen
+tooltip.closeTree.labeled=Diesen Zweig schlie\u00DFen:\n%S
 tooltip.item.label=%2$S* %1$S
-tooltip.more=...and %1$S more tab(s)
+tooltip.more=... und %1$S Tab(s) mehr
 
-dropLinkOnTab.title=Wie soll der Link geöffnet werden?
-dropLinkOnTab.text=Ein Link wurde auf einen bestehenden Tab gezogen. TreeStyleTab kann den Link in einem neuen, untergeordneten Tab öffnen. Wie soll der Link geöffnet werden?
+dropLinkOnTab.title=Wie soll der Link ge\u00F6ffnet werden?
+dropLinkOnTab.text=Ein Link wurde auf einen bestehenden Tab gezogen. Tree Style Tab kann den Link als neuen untergeordneten Tab \u00F6ffnen. Wie soll der Link ge\u00F6ffnet werden?
 dropLinkOnTab.never=Nicht mehr nachfragen
-dropLinkOnTab.loadInTheTab=Link in den bestehenden Tab laden (Firefox Standard)
-dropLinkOnTab.openNewChildTab=Link in einem neuen, untergeordneten Tab öffnen
+dropLinkOnTab.loadInTheTab=Link in dem bestehenden Tab laden (Firefox Standard)
+dropLinkOnTab.openNewChildTab=Link in einem neuen untergeordneten Tab \u00F6ffnen
 
-openGroupBookmarkBehavior.title=Wie soll eine Gruppe von Lesezeichen geöffnet werden?
-openGroupBookmarkBehavior.text=Es werden mehrere Tabs für die Gruppe von Lesezeichen geöffnet. Wie sollen sie angeordnet werden?
+openGroupBookmarkBehavior.title=Wie soll eine Gruppe von Lesezeichen ge\u00F6ffnet werden?
+openGroupBookmarkBehavior.text=Es werden mehrere Tabs f\u00FCr die Gruppe von Lesezeichen ge\u00F6ffnet. Wie sollen sie ge\u00F6ffnet werden?
 openGroupBookmarkBehavior.never=Nicht mehr nachfragen
-openGroupBookmarkBehavior.subTree=Als neuen Zweig öffnen
-openGroupBookmarkBehavior.separate=Als einzelne Tabs öffnen (Firefox Standard)
-openGroupBookmarkBehavior.replace=Aktives Tab durch Gruppe neuer Tabs ersetzen
+openGroupBookmarkBehavior.subTree=Als neuer Zweig \u00F6ffnen
+openGroupBookmarkBehavior.separate=Als eigenst\u00E4ndige Tabs \u00F6ffnen (Firefox Standard)
+openGroupBookmarkBehavior.replace=Aktiven Tab ersetzen
 
-bookmarkDroppedTabs.title=Zweig als Lesezeichen speichern
-bookmarkDroppedTabs.text=Ein ganzer Zweig wurde gezogen. Wie soll er gespeichert werden?
+bookmarkDroppedTabs.title=Wie soll ein Zweig als Lesezeichen gespeichert werden?
+bookmarkDroppedTabs.text=Der gezogene Tab hat untergeordnete Tabs. Wie sollen diese als Lesezeichen gespeichert werden?
 bookmarkDroppedTabs.never=Nicht mehr nachfragen
 bookmarkDroppedTabs.bookmarkAll=Alle Tabs im Zweig als Lesezeichen speichern
-bookmarkDroppedTabs.bookmarkOnlyParent=Nur das gezogene Tab als Lesezeichen speichern
+bookmarkDroppedTabs.bookmarkOnlyParent=Nur den gezogenen Tab als Lesezeichen speichern
 
-undoCloseTabSetBehavior.label=This tab was closed together with other %S tab(s) in a tree. Do you want them to be restored along?
-undoCloseTabSetBehavior.restoreOnce=Restore tabs
-undoCloseTabSetBehavior.restoreForever=Always restore tabs
-undoCloseTabSetBehavior.ignoreForever=Never show this notification
-# #undoCloseTabSetBehavior.title=Möchten Sie andere geschlossene Tabs auch wieder herstellen?
-# #undoCloseTabSetBehavior.text=Dieses Tab wurde gemeinsam mit %S anderen geschlossen. Wie sollen diese behandelt werden?
-# #openGroupBookmarkBehavior.never=Künftig nicht mehr nachfragen, und die angegebene Aktion ausführen
-# #undoCloseTabSetBehavior.set=Alle Tabs wieder herstellen, die gemeinsam geschlossen wurden
-# #undoCloseTabSetBehavior.separate=Ignorieren, nur dieses eine Tab soll wieder hergestellt werden (Firefox Standard)
-# undoCloseTabSetBehavior.label=Sollen auch die folgenden %S Tabs wiederhergestellt werden?
-# undoCloseTabSetBehavior.never=Nicht mehr nachfragen
-# undoCloseTabSetBehavior.set=Tabs wieder herstellen
-# undoCloseTabSetBehavior.separate=Nein danke
+undoCloseTabSetBehavior.label=Der wiederhergestellte Tab wurde zusammen mit %S Tab(s) in einem Zweig geschlossen. Sollen diese mit wiederhergestellt werden?
+undoCloseTabSetBehavior.restoreOnce=Tabs mit wiederherstellen
+undoCloseTabSetBehavior.restoreForever=Tabs immer mit wiederherstellen
+undoCloseTabSetBehavior.ignoreForever=Nicht mehr nachfragen
 
 openSelectedPlaces.bookmarks=von %2$S Lesezeichen, inklusive "%1$S"
-openSelectedPlaces.history=von %2$S Seiten im Verlauf, inklusive "%1$S"
+openSelectedPlaces.history=von %2$S Seiten in der Chronik, inklusive "%1$S"
 
-bookmarkProperty.parent.label=Übergeordnetes Tab:
-bookmarkProperty.parent.blank.label=(nichts)
+bookmarkProperty.parent.label=\u00DCbergeordneter Tab:
+bookmarkProperty.parent.blank.label=(keiner)
 bookmarkProperty.parent.current.label=[ %S ]
 
-undo_changeTabbarPosition_label=Position der Tableiste ändern
+undo_changeTabbarPosition_label=Position der Tableiste \u00E4ndern
 
 toolbarCustomizing_tabbar_horizontal=Diese Werkzeugleiste wird eine Tableiste.
 toolbarCustomizing_tabbar_vertical=Diese Werkzeugleiste wird eine vertikale Tableiste.
 
 
 compatibility_STM_warning_title=Super Tab Mode steht mit Tree Style Tab in Konflikt
-compatibility_STM_warning_text=Durch Links geöffnete Tabs werden dem aktiven Tab nich untergeordnet, weil die Position des neuen Tabs von Super Tab Mode kontrolliert wird. Welche Funktion soll aktiviert sein?\n(*Diese Einstellung kann manuell in der Konfiguration von Super Tab Mode vorgenommen werden.)
+compatibility_STM_warning_text=Durch Links (oder anderweitig) ge\u00F6ffnete Tabs werden nicht dem aktiven Tab untergeordnet, weil die Position neuer Tabs von Super Tab Mode kontrolliert wird. Welche Funktion soll aktiviert sein?\n(*Diese Einstellungen k\u00F6nnen manuell im Konfigurationsdialog von Super Tab Mode vorgenommen werden.)
 compatibility_STM_warning_use_TST=Tabs dem aktiven Tab unterordnen
-compatibility_STM_warning_use_STM=Für die Tabs die durch Super Tab Mode festgelegte Position verwenden
-compatibility_STM_warning_never=Diesen Dialog nicht mehr anzeigen
+compatibility_STM_warning_use_STM=F\u00FCr die Tabs die durch Super Tab Mode festgelegte Position verwenden
+compatibility_STM_warning_never=Nicht mehr nachfragen
 
 
-closeTabsToTheEnd_vertical_label=Close Tabs to the Bottom
+closeTabsToTheEnd_vertical_label=Tabs unterhalb schlie\u00DFen
 closeTabsToTheEnd_vertical_accesskey=b
+
+
+migration.treeNeverRevoked.title=Die Zweigfunktionen von Tree Style Tab sind jetzt immer aktiviert!
+migration.treeNeverRevoked.text=Hinweis: Einige Einstellungen um Zweigfunktionen dauerhaft zu deaktivieren sind jetzt aus Tree Style Tab verschwunden. Wenn nur eine vertikale Tableiste ohne Zweigfunktionen ben\u00F6tigt wird, sollte ein alternatives Add-on wie zum Beispiel "Vertical Tabs", "Side Tabs" oder andere verwendet werden.
diff --git a/locale/en-US/treestyletab/treestyletab.dtd b/locale/en-US/treestyletab/treestyletab.dtd
index 504090d..3e4e1a8 100644
--- a/locale/en-US/treestyletab/treestyletab.dtd
+++ b/locale/en-US/treestyletab/treestyletab.dtd
@@ -19,7 +19,6 @@
 <!ENTITY config.enableSubtreeIndent "Indent tabs">
 <!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   ":">
diff --git a/locale/en-US/treestyletab/treestyletab.properties b/locale/en-US/treestyletab/treestyletab.properties
index f321193..ed62f5f 100644
--- a/locale/en-US/treestyletab/treestyletab.properties
+++ b/locale/en-US/treestyletab/treestyletab.properties
@@ -53,3 +53,7 @@ compatibility_STM_warning_never=Don't show this dialog anymore.
 
 closeTabsToTheEnd_vertical_label=Close Tabs to the Bottom
 closeTabsToTheEnd_vertical_accesskey=b
+
+
+migration.treeNeverRevoked.title=Tree features of Tree Style Tab is now activated mandatorily!
+migration.treeNeverRevoked.text=Note: Some preferences to disable tree features permanently now disappeared from Tree Style Tab. If you just require only a vertical tab bar without tree features, then please switch to an alternative addon e.g. "Vertical Tabs", "Side Tabs", or others.
diff --git a/locale/es-ES/treestyletab/treestyletab.dtd b/locale/es-ES/treestyletab/treestyletab.dtd
index 4fb2642..f4894c9 100644
--- a/locale/es-ES/treestyletab/treestyletab.dtd
+++ b/locale/es-ES/treestyletab/treestyletab.dtd
@@ -19,7 +19,6 @@
 <!ENTITY config.enableSubtreeIndent         "Añadir margen a las pestañas">
 <!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   ":">
diff --git a/locale/es-ES/treestyletab/treestyletab.properties b/locale/es-ES/treestyletab/treestyletab.properties
index 45471f6..6a63f1f 100644
--- a/locale/es-ES/treestyletab/treestyletab.properties
+++ b/locale/es-ES/treestyletab/treestyletab.properties
@@ -62,3 +62,7 @@ compatibility_STM_warning_never=Don't show this dialog anymore.
 
 closeTabsToTheEnd_vertical_label=Close Tabs to the Bottom
 closeTabsToTheEnd_vertical_accesskey=b
+
+
+migration.treeNeverRevoked.title=Tree features of Tree Style Tab is now activated mandatorily!
+migration.treeNeverRevoked.text=Note: Some preferences to disable tree features permanently now disappeared from Tree Style Tab. If you just require only a vertical tab bar without tree features, then please switch to an alternative addon e.g. "Vertical Tabs", "Side Tabs", or others.
diff --git a/locale/fr-FR/treestyletab/treestyletab.dtd b/locale/fr-FR/treestyletab/treestyletab.dtd
index 5e67997..a52e8ad 100644
--- a/locale/fr-FR/treestyletab/treestyletab.dtd
+++ b/locale/fr-FR/treestyletab/treestyletab.dtd
@@ -19,7 +19,6 @@
 <!ENTITY config.enableSubtreeIndent         "Indenter les onglets">
 <!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   ":">
diff --git a/locale/fr-FR/treestyletab/treestyletab.properties b/locale/fr-FR/treestyletab/treestyletab.properties
index 5b63cba..be07bfc 100644
--- a/locale/fr-FR/treestyletab/treestyletab.properties
+++ b/locale/fr-FR/treestyletab/treestyletab.properties
@@ -53,3 +53,7 @@ compatibility_STM_warning_never=Ne plus montrer ce dialogue.
 
 closeTabsToTheEnd_vertical_label=Fermer les onglets situés plus bas
 closeTabsToTheEnd_vertical_accesskey=b
+
+
+migration.treeNeverRevoked.title=Tree features of Tree Style Tab is now activated mandatorily!
+migration.treeNeverRevoked.text=Note: Some preferences to disable tree features permanently now disappeared from Tree Style Tab. If you just require only a vertical tab bar without tree features, then please switch to an alternative addon e.g. "Vertical Tabs", "Side Tabs", or others.
diff --git a/locale/it-IT/treestyletab/treestyletab.dtd b/locale/it-IT/treestyletab/treestyletab.dtd
index b8949cd..73e24b6 100644
--- a/locale/it-IT/treestyletab/treestyletab.dtd
+++ b/locale/it-IT/treestyletab/treestyletab.dtd
@@ -19,7 +19,6 @@
 <!ENTITY config.enableSubtreeIndent         "Indenta sottoschede">
 <!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   ":">
diff --git a/locale/it-IT/treestyletab/treestyletab.properties b/locale/it-IT/treestyletab/treestyletab.properties
index 3855431..614ea44 100644
--- a/locale/it-IT/treestyletab/treestyletab.properties
+++ b/locale/it-IT/treestyletab/treestyletab.properties
@@ -62,3 +62,7 @@ compatibility_STM_warning_never=Don't show this dialog anymore.
 
 closeTabsToTheEnd_vertical_label=Close Tabs to the Bottom
 closeTabsToTheEnd_vertical_accesskey=b
+
+
+migration.treeNeverRevoked.title=Tree features of Tree Style Tab is now activated mandatorily!
+migration.treeNeverRevoked.text=Note: Some preferences to disable tree features permanently now disappeared from Tree Style Tab. If you just require only a vertical tab bar without tree features, then please switch to an alternative addon e.g. "Vertical Tabs", "Side Tabs", or others.
diff --git a/locale/ja/treestyletab/treestyletab.dtd b/locale/ja/treestyletab/treestyletab.dtd
index 90626b2..a4bca36 100644
--- a/locale/ja/treestyletab/treestyletab.dtd
+++ b/locale/ja/treestyletab/treestyletab.dtd
@@ -19,7 +19,6 @@
 <!ENTITY config.enableSubtreeIndent "ツリーをインデント表示する">
 <!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   "幅:">
diff --git a/locale/ja/treestyletab/treestyletab.properties b/locale/ja/treestyletab/treestyletab.properties
index 38b9763..d216d7c 100644
--- a/locale/ja/treestyletab/treestyletab.properties
+++ b/locale/ja/treestyletab/treestyletab.properties
@@ -53,3 +53,7 @@ compatibility_STM_warning_never=今後この確認を表示しない
 
 closeTabsToTheEnd_vertical_label=下のタブをすべて閉じる
 closeTabsToTheEnd_vertical_accesskey=b
+
+
+migration.treeNeverRevoked.title=ツリー型タブのツリー表示が強制的に有効化されました
+migration.treeNeverRevoked.text=注意:ツリー型タブからツリー表示を無効化するためのいくつかの設定が廃止されました。ツリー表示を常時無効化して縦型のタブバーのみを利用したい場合には、「Vertical Tabs」「Side Tabs」などの代替アドオンを利用して下さい。
diff --git a/locale/pl/treestyletab/treestyletab.dtd b/locale/pl/treestyletab/treestyletab.dtd
index 27d47dd..7fba5cc 100644
--- a/locale/pl/treestyletab/treestyletab.dtd
+++ b/locale/pl/treestyletab/treestyletab.dtd
@@ -19,7 +19,6 @@
 <!ENTITY config.enableSubtreeIndent         "Stosuj wcięcia">
 <!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   ":">
diff --git a/locale/pl/treestyletab/treestyletab.properties b/locale/pl/treestyletab/treestyletab.properties
index 509a8df..e401c88 100644
--- a/locale/pl/treestyletab/treestyletab.properties
+++ b/locale/pl/treestyletab/treestyletab.properties
@@ -62,3 +62,7 @@ compatibility_STM_warning_never=Don't show this dialog anymore.
 
 closeTabsToTheEnd_vertical_label=Close Tabs to the Bottom
 closeTabsToTheEnd_vertical_accesskey=b
+
+
+migration.treeNeverRevoked.title=Tree features of Tree Style Tab is now activated mandatorily!
+migration.treeNeverRevoked.text=Note: Some preferences to disable tree features permanently now disappeared from Tree Style Tab. If you just require only a vertical tab bar without tree features, then please switch to an alternative addon e.g. "Vertical Tabs", "Side Tabs", or others.
diff --git a/locale/ru/treestyletab/treestyletab.dtd b/locale/ru/treestyletab/treestyletab.dtd
index ed5bbb5..8d671d5 100755
--- a/locale/ru/treestyletab/treestyletab.dtd
+++ b/locale/ru/treestyletab/treestyletab.dtd
@@ -19,7 +19,6 @@
 <!ENTITY config.enableSubtreeIndent         "Отступы вкладок">
 <!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   ":">
diff --git a/locale/ru/treestyletab/treestyletab.properties b/locale/ru/treestyletab/treestyletab.properties
index 0bbae85..c329a1a 100755
--- a/locale/ru/treestyletab/treestyletab.properties
+++ b/locale/ru/treestyletab/treestyletab.properties
@@ -53,3 +53,7 @@ compatibility_STM_warning_never=Больше не показывать этот
 
 closeTabsToTheEnd_vertical_label=Закрыть вкладки ниже
 closeTabsToTheEnd_vertical_accesskey=ж
+
+
+migration.treeNeverRevoked.title=Функции дерева Tree Style Tab были принудительно включены!
+migration.treeNeverRevoked.text=Примечание: настройки для полного отключения функций дерева были удалены из Tree Style Tab. Если вам нужны только вертикальные вкладки без свойств дерева, пожалуйста, воспользуйтесь альтернативным дополнением, например, "Vertical Tabs", "Side Tabs" или другим.
diff --git a/locale/sv-SE/treestyletab/treestyletab.dtd b/locale/sv-SE/treestyletab/treestyletab.dtd
index 4f16fd6..f14928f 100644
--- a/locale/sv-SE/treestyletab/treestyletab.dtd
+++ b/locale/sv-SE/treestyletab/treestyletab.dtd
@@ -19,7 +19,6 @@
 <!ENTITY config.enableSubtreeIndent "Gör indrag av flikar">
 <!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   ":">
diff --git a/locale/sv-SE/treestyletab/treestyletab.properties b/locale/sv-SE/treestyletab/treestyletab.properties
index 065fabf..5085373 100644
--- a/locale/sv-SE/treestyletab/treestyletab.properties
+++ b/locale/sv-SE/treestyletab/treestyletab.properties
@@ -57,3 +57,7 @@ compatibility_STM_warning_never=Visa inte denna dialog igen.
 
 closeTabsToTheEnd_vertical_label=Close Tabs to the Bottom
 closeTabsToTheEnd_vertical_accesskey=b
+
+
+migration.treeNeverRevoked.title=Tree features of Tree Style Tab is now activated mandatorily!
+migration.treeNeverRevoked.text=Note: Some preferences to disable tree features permanently now disappeared from Tree Style Tab. If you just require only a vertical tab bar without tree features, then please switch to an alternative addon e.g. "Vertical Tabs", "Side Tabs", or others.
diff --git a/locale/zh-CN/treestyletab/treestyletab.dtd b/locale/zh-CN/treestyletab/treestyletab.dtd
index 9cdd922..0020efa 100644
--- a/locale/zh-CN/treestyletab/treestyletab.dtd
+++ b/locale/zh-CN/treestyletab/treestyletab.dtd
@@ -19,7 +19,6 @@
 <!ENTITY config.enableSubtreeIndent         "缩进标签">
 <!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   ":">
diff --git a/locale/zh-CN/treestyletab/treestyletab.properties b/locale/zh-CN/treestyletab/treestyletab.properties
index d97d07e..72c6b95 100644
--- a/locale/zh-CN/treestyletab/treestyletab.properties
+++ b/locale/zh-CN/treestyletab/treestyletab.properties
@@ -57,3 +57,7 @@ compatibility_STM_warning_never=不要再提醒我。
 
 closeTabsToTheEnd_vertical_label=Close Tabs to the Bottom
 closeTabsToTheEnd_vertical_accesskey=b
+
+
+migration.treeNeverRevoked.title=Tree features of Tree Style Tab is now activated mandatorily!
+migration.treeNeverRevoked.text=Note: Some preferences to disable tree features permanently now disappeared from Tree Style Tab. If you just require only a vertical tab bar without tree features, then please switch to an alternative addon e.g. "Vertical Tabs", "Side Tabs", or others.
diff --git a/locale/zh-TW/treestyletab/treestyletab.dtd b/locale/zh-TW/treestyletab/treestyletab.dtd
index bd15c9e..05727c7 100644
--- a/locale/zh-TW/treestyletab/treestyletab.dtd
+++ b/locale/zh-TW/treestyletab/treestyletab.dtd
@@ -19,7 +19,6 @@
 <!ENTITY config.enableSubtreeIndent         "縮進分頁">
 <!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   ":">
diff --git a/locale/zh-TW/treestyletab/treestyletab.properties b/locale/zh-TW/treestyletab/treestyletab.properties
index a692a40..3c4816a 100644
--- a/locale/zh-TW/treestyletab/treestyletab.properties
+++ b/locale/zh-TW/treestyletab/treestyletab.properties
@@ -57,3 +57,7 @@ compatibility_STM_warning_never=不要再問我
 
 closeTabsToTheEnd_vertical_label=Close Tabs to the Bottom
 closeTabsToTheEnd_vertical_accesskey=b
+
+
+migration.treeNeverRevoked.title=Tree features of Tree Style Tab is now activated mandatorily!
+migration.treeNeverRevoked.text=Note: Some preferences to disable tree features permanently now disappeared from Tree Style Tab. If you just require only a vertical tab bar without tree features, then please switch to an alternative addon e.g. "Vertical Tabs", "Side Tabs", or others.
diff --git a/modules/autoHide.js b/modules/autoHide.js
index 65712e1..f1b4fac 100644
--- a/modules/autoHide.js
+++ b/modules/autoHide.js
@@ -216,11 +216,11 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
 		this.end();
 		// update internal property after the appearance of the tab bar is updated.
 		var w = this.window;
-		w.setTimeout(function(aSelf) {
-			aSelf.mode = aNewMode;
-			if (aSelf.mode != aSelf.kMODE_DISABLED)
-				aSelf.start();
-		}, 0, this);
+		w.setTimeout((function() {
+			this.mode = aNewMode;
+			if (this.mode != this.kMODE_DISABLED)
+				this.start();
+		}).bind(this), 0);
 	},
   
 	togglerSize : 0, 
@@ -598,6 +598,7 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
 		this.showHideContentsAreaScreen();
 
 		var shouldShow = position & this.MOUSE_POSITION_SENSITIVE;
+		var delayToShow = utils.getTreePref('tabbar.autoHide.delay.show');
 		if (this.expanded) { // currently shown, let's hide it.
 			if (shouldShow) {
 				this.show(this.kSHOWN_BY_MOUSEMOVE);
@@ -607,25 +608,20 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
 				!shouldShow &&
 				utils.getTreePref('tabbar.autoShow.mousemove')
 				) {
-				this.showHideOnMouseMoveTimer = w.setTimeout(
-					function(aSelf) {
-						aSelf.cancelDelayedShowForShortcut();
-						aSelf.hide(aSelf.kSHOWN_BY_MOUSEMOVE);
-					},
-					utils.getTreePref('tabbar.autoHide.delay'),
-					this
-				);
+				let delayToHide = utils.getTreePref('tabbar.autoHide.delay.hide');
+				if (delayToHide < 0)
+					delayToHide = delayToShow;
+				this.showHideOnMouseMoveTimer = w.setTimeout((function() {
+					this.cancelDelayedShowForShortcut();
+					this.hide(this.kSHOWN_BY_MOUSEMOVE);
+				}).bind(this), delayToHide);
 			}
 		}
 		else if (shouldShow) { // currently shown, let's show it.
-			this.showHideOnMouseMoveTimer = w.setTimeout(
-				function(aSelf) {
-					aSelf.cancelDelayedShowForShortcut();
-					aSelf.show(aSelf.kSHOWN_BY_MOUSEMOVE);
-				},
-				utils.getTreePref('tabbar.autoHide.delay'),
-				this
-			);
+			this.showHideOnMouseMoveTimer = w.setTimeout((function() {
+				this.cancelDelayedShowForShortcut();
+				this.show(this.kSHOWN_BY_MOUSEMOVE);
+			}).bind(this), delayToShow);
 		}
 
 		b = null;
@@ -777,14 +773,10 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
 			this.delayedShowForFeedbackTimer = null;
 		}
 		this.cancelHideForFeedback();
-		this.delayedShowForFeedbackTimer = w.setTimeout(
-			function(aSelf) {
-				aSelf.delayedShowForFeedbackTimer = null;
-				aSelf.delayedShowForFeedback(aTab);
-			},
-			100,
-			this
-		);
+		this.delayedShowForFeedbackTimer = w.setTimeout((function() {
+			this.delayedShowForFeedbackTimer = null;
+			this.delayedShowForFeedback(aTab);
+		}).bind(this), 100);
 	},
  
 	delayedShowForFeedback : function AHB_delayedShowForFeedback(aTab) 
@@ -792,15 +784,11 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
 		this.treeStyleTab.highlightTab(aTab);
 		this.show(this.kSHOWN_BY_FEEDBACK);
 		this.cancelHideForFeedback();
-		this.delayedHideTabbarForFeedbackTimer = this.window.setTimeout(
-			function(aSelf) {
-				// TODO: we do something to highlight the given tab.
-				aSelf.delayedHideTabbarForFeedbackTimer = null;
-				aSelf.hide(aSelf.kSHOWN_BY_FEEDBACK);
-			},
-			utils.getTreePref('tabbar.autoShow.feedback.delay'),
-			this
-		);
+		this.delayedHideTabbarForFeedbackTimer = this.window.setTimeout((function() {
+			// TODO: we do something to highlight the given tab.
+			this.delayedHideTabbarForFeedbackTimer = null;
+			this.hide(this.kSHOWN_BY_FEEDBACK);
+		}).bind(this), utils.getTreePref('tabbar.autoShow.feedback.delay'));
 	},
  
 	cancelHideForFeedback : function AHB_cancelHideForFeedback() 
@@ -930,10 +918,10 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
 		b.mTabContainer.adjustTabstrip();
 		sv.checkTabsIndentOverflow();
 
-		this.window.setTimeout(function(aSelf) {
-			aSelf.fireStateChangeEvent();
-			aSelf.showHideContentsAreaScreen();
-		}, 0, this);
+		this.window.setTimeout((function() {
+			this.fireStateChangeEvent();
+			this.showHideContentsAreaScreen();
+		}).bind(this), 0);
 	},
 	_getHumanReadableReason: function AHB_getHumanReadableReason(aReason)
 	{
@@ -1290,10 +1278,10 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
 
 			case this.treeStyleTab.kEVENT_TYPE_TABBAR_POSITION_CHANGED:
 				if (this.enabled)
-					this.window.setTimeout(function(aSelf) {
-						aSelf.show(this.kSHOWHIDE_BY_POSITION_CHANGE);
-						aSelf.hide(this.kSHOWHIDE_BY_POSITION_CHANGE);
-					}, 0, this);
+					this.window.setTimeout((function() {
+						this.show(this.kSHOWHIDE_BY_POSITION_CHANGE);
+						this.hide(this.kSHOWHIDE_BY_POSITION_CHANGE);
+					}).bind(this), 0);
 				this.updateTransparency();
 				return;
 
@@ -1432,10 +1420,10 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
 		if (position & this.MOUSE_POSITION_SENSITIVE)
 			return;
 
-		this._autoHideOnDragLeaveTimer = this.window.setTimeout(function(aSelf) {
-			delete aSelf._autoHideOnDragLeaveTimer;
-			aSelf.hide(aSelf.kSHOWN_BY_MOUSEMOVE);
-		}, 100, this);
+		this._autoHideOnDragLeaveTimer = this.window.setTimeout((function() {
+			delete this._autoHideOnDragLeaveTimer;
+			this.hide(this.kSHOWN_BY_MOUSEMOVE);
+		}).bind(this), 100);
 	},
  
 	onKeyDown : function AHB_onKeyDown(aEvent) 
@@ -1456,16 +1444,12 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
 				utils.getTreePref('tabbar.autoShow.accelKeyDown') &&
 				!this.delayedAutoShowTimer &&
 				!this.delayedShowForShortcutTimer) {
-				this.delayedShowForShortcutTimer = w.setTimeout(
-					function(aSelf) {
-						aSelf.delayedShowForShortcutDone = true;
-						aSelf.show(aSelf.kSHOWN_BY_SHORTCUT);
-						sv = null;
-						b = null;
-					},
-					utils.getTreePref('tabbar.autoShow.accelKeyDown.delay'),
-					this
-				);
+				this.delayedShowForShortcutTimer = w.setTimeout((function() {
+					this.delayedShowForShortcutDone = true;
+					this.show(this.kSHOWN_BY_SHORTCUT);
+					sv = null;
+					b = null;
+				}).bind(this), utils.getTreePref('tabbar.autoShow.accelKeyDown.delay'));
 				this.delayedShowForShortcutDone = false;
 			}
 		}
@@ -1643,9 +1627,9 @@ AutoHideWindow.prototype = inherit(AutoHideBase.prototype, {
 		if (mode != this.kMODE_DISABLED)
 			this.updateKeyListeners(this.window);
 
-		this.window.setTimeout(function(aSelf) {
-			aSelf.window.gBrowser.treeStyleTab.autoHide.updateMode(mode);
-		}, 0, this);
+		this.window.setTimeout((function() {
+			this.window.gBrowser.treeStyleTab.autoHide.updateMode(mode);
+		}).bind(this), 0);
 	},
  
 // for shortcuts 
diff --git a/modules/base.js b/modules/base.js
index 75093cc..3c13734 100644
--- a/modules/base.js
+++ b/modules/base.js
@@ -2065,17 +2065,26 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, {
  
 	isGroupTab : function TSTBase_isGroupTab(aTab, aLazyCheck) 
 	{
-		return aTab.linkedBrowser.currentURI.spec.indexOf('about:treestyletab-group') == 0;
+		return this.getLoadingURI(aTab).indexOf('about:treestyletab-group') == 0;
 	},
  
 	isTemporaryGroupTab : function TSTBase_isTemporaryGroupTab(aTab) 
 	{
 		return (
 			this.isGroupTab(aTab) &&
-			/.*[\?&;]temporary=(?:1|yes|true)/i.test(aTab.linkedBrowser.currentURI.spec)
+			/.*[\?&;]temporary=(?:1|yes|true)/i.test(this.getLoadingURI(aTab))
 		);
 	},
  
+	getLoadingURI : function TSTBase_getLoadingURI(aTab)
+	{
+		var uri = aTab.linkedBrowser.currentURI;
+		if (uri.spec == 'about:blank' &&
+			aTab.linkedBrowser.userTypedValue)
+			return aTab.linkedBrowser.userTypedValue;
+		return uri.spec;
+	},
+ 
 	get pinnedTabsCount() 
 	{
 		return this.browser.mTabContainer.querySelectorAll('tab[pinned="true"]').length;
diff --git a/modules/browser.js b/modules/browser.js
index 01b8a7d..12bba3f 100644
--- a/modules/browser.js
+++ b/modules/browser.js
@@ -106,6 +106,12 @@ function TreeStyleTabBrowser(aWindowService, aTabBrowser)
 	this.subTreeMovingCount = 0;
 	this.subTreeChildrenMovingCount = 0;
 	this._treeViewEnabled = true;
+
+	// This prevents to group home page tabs.
+	// Because home tabs are restored for every new windows,
+	// we always do this for every startup.
+	if (prefs.getPref('browser.startup.page') === 1)
+		this.nextOpenedTabToBeParent = false;
 }
  
 TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, { 
@@ -874,6 +880,8 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 
 		this.getAllTabs(b).forEach(this.initTab, this);
 
+		this.allowSubtreeCollapseExpand = true; // reset attribute
+
 		this.onPrefChange('extensions.treestyletab.maxTreeLevel');
 		this.onPrefChange('extensions.treestyletab.tabbar.style');
 		this.onPrefChange('extensions.treestyletab.twisty.style');
@@ -1148,7 +1156,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 
 		var twisty = this.getTabTwisty(aTab);
 		var anchor = this.getTabTwistyAnchorNode(aTab);
-		if (anchor  && !twisty) {
+		if (anchor && !twisty) {
 			twisty = d.createElement('image');
 			twisty.setAttribute('class', this.kTWISTY);
 			anchor.parentNode.appendChild(twisty);
@@ -1173,7 +1181,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 			endParen.setAttribute('value', ')');
 
 			/** XXX
-			 *  Insertion before an anonymous element breaks its "xbl:inherits".
+			 * Insertion before an anonymous element breaks its "xbl:inherits".
 			 * For example, "xbl:inherits" of the closebox in a tab (Tab Mix Plus
 			 * defines it) doesn't work. So, I don't use insertBefore().
 			 * Instead, the counter will be rearranged by "ordinal" attribute
@@ -1227,15 +1235,16 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 
 			var foundContainers = [];
 			var containers = [
-					namedNodes.twistyAnchor.parentNode,
-					namedNodes.label.parentNode,
-					namedNodes.counter.parentNode,
-					namedNodes.closeAnchor.parentNode
+					namedNodes.twistyAnchor && namedNodes.twistyAnchor.parentNode,
+					namedNodes.label && namedNodes.label.parentNode,
+					namedNodes.counter && namedNodes.counter.parentNode,
+					namedNodes.closeAnchor && namedNodes.closeAnchor.parentNode
 				];
 			for (let i = 0, maxi = containers.length; i < maxi; i++)
 			{
 				let container = containers[i];
-				if (foundContainers.indexOf(container) > -1)
+				if (!container ||
+					foundContainers.indexOf(container) > -1)
 					continue;
 				this.initTabContentsOrderInternal(container, namedNodes, aForce);
 				foundContainers.push(container);
@@ -1881,11 +1890,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 			delete this.timers['updateTabbarState'];
 		}).bind(this), 0);
 
-		var allowToCollapse = utils.getTreePref('allowSubtreeCollapseExpand.'+orient);
-		if (this.allowSubtreeCollapseExpand != allowToCollapse)
-			this.collapseExpandAllSubtree(false, false);
-		this.allowSubtreeCollapseExpand = allowToCollapse;
-
 		this.maxTreeLevel = utils.getTreePref('maxTreeLevel.'+orient);
 
 		this.setTabbrowserAttribute(this.kALLOW_STACK, this.canStackTabs ? 'true' : null);
@@ -1904,20 +1908,17 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		var oldState = {
 				fixed         : this.fixed,
 				maxTreeLevel  : this.maxTreeLevel,
-				indented      : this.maxTreeLevel != 0,
-				canCollapse   : b.getAttribute(this.kALLOW_COLLAPSE) == 'true'
+				indented      : this.maxTreeLevel != 0
 			};
 		var newState = {
 				fixed         : utils.getTreePref('tabbar.fixed.'+orient),
 				maxTreeLevel  : utils.getTreePref('maxTreeLevel.'+orient),
-				indented      : utils.getTreePref('maxTreeLevel.'+orient) != 0,
-				canCollapse   : utils.getTreePref('allowSubtreeCollapseExpand.'+orient)
+				indented      : utils.getTreePref('maxTreeLevel.'+orient) != 0
 			};
 
 		if (oldState.fixed == newState.fixed &&
 			oldState.maxTreeLevel == newState.maxTreeLevel &&
-			oldState.indented == newState.indented &&
-			oldState.canCollapse == newState.canCollapse)
+			oldState.indented == newState.indented)
 			return false;
 
 		var data = {
@@ -1939,8 +1940,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		var state = {
 				fixed         : this.fixed,
 				maxTreeLevel  : this.maxTreeLevel,
-				indented      : this.maxTreeLevel != 0,
-				canCollapse   : b.getAttribute(this.kALLOW_COLLAPSE) == 'true'
+				indented      : this.maxTreeLevel != 0
 			};
 
 		var data = {
@@ -1964,6 +1964,10 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		}
 
 		this._updateFloatingTabbarReason |= aReason;
+		this._currentTabWasVisible = (
+			this._currentTabWasVisible ||
+			this.isTabInViewport(this.browser.selectedTab)
+		);
 
 		if (this._updateFloatingTabbarReason & this.kTABBAR_UPDATE_NOW) {
 			this._updateFloatingTabbarInternal(this._updateFloatingTabbarReason);
@@ -1987,9 +1991,9 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 				(aReason & this.kTABBAR_UPDATE_BY_RESET ? 'reset ' : '' ) +
 				(aReason & this.kTABBAR_UPDATE_BY_PREF_CHANGE ? 'prefchange ' : '' ) +
 				(aReason & this.kTABBAR_UPDATE_BY_APPEARANCE_CHANGE ? 'appearance-change ' : '' ) +
-				(aReason & this.kTABBAR_UPDATE_BY_SHOWHIDE_TABBAR ? 'showhide ' : '' ) +
 				(aReason & this.kTABBAR_UPDATE_BY_TABBAR_RESIZE ? 'tabbar-resize ' : '' ) +
-				(aReason & this.kTABBAR_UPDATE_BY_WINDOW_RESIZE ? 'window-resize ' : '' ) +
+				(aReason & this.kTABBAR_UPDATE_BY_WINDOW_RESIZE ?
+					'window-resize(currentTabWasVisible='+this._currentTabWasVisible+') ' : '' ) +
 				(aReason & this.kTABBAR_UPDATE_BY_FULLSCREEN ? 'fullscreen ' : '' ) +
 				(aReason & this.kTABBAR_UPDATE_BY_AUTOHIDE ? 'autohide ' : '' ) +
 				(aReason & this.kTABBAR_UPDATE_BY_INITIALIZE ? 'initialize ' : '' ) +
@@ -2126,11 +2130,34 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		setTimeout((function() {
 			this.notifyingRenderedEvent = false;
 
-			if (!collapsed &&
+			var shownAutomatically = (
+				!collapsed &&
 				this.autoHide.mode == this.autoHide.kMODE_HIDE &&
-				aReason & this.kTABBAR_UPDATE_BY_AUTOHIDE &&
-				this.browser) // ignore calling after destroyed...
-				this.scrollToTab(this.browser.selectedTab);
+				aReason & this.kTABBAR_UPDATE_BY_AUTOHIDE
+			);
+			var scrollToCurrentAfterResize = (
+				this._currentTabWasVisible &&
+				aReason & this.kTABBAR_UPDATE_BY_WINDOW_RESIZE
+			);
+			log('after floating tab is updated: ', {
+				shownAutomatically         : shownAutomatically,
+				scrollToCurrentAfterResize : scrollToCurrentAfterResize
+			});
+
+			if (this.browser) { // ignore calling after destroyed...
+				if (shownAutomatically) {
+					this.scrollToTab(this.browser.selectedTab);
+				}
+				else if (scrollToCurrentAfterResize) {
+					// Make the tab visible immediately!
+					// If we use scrollToTab with animation, the current tab
+					// can be invisible sometimes.
+					this.scrollBoxObject.ensureElementIsVisible(this.browser.selectedTab);
+				}
+			}
+
+			if (!this._updateFloatingTabbarTimer)
+				delete this._currentTabWasVisible;
 		}).bind(this), 0);
 	},
 	getTabbarPlaceholderSize: function TSTBrowser_getTabbarPlaceholderSize()
@@ -2641,7 +2668,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		'extensions.treestyletab.',
 		'browser.tabs.closeButtons',
 		'browser.tabs.closeWindowWithLastTab',
-		'browser.tabs.autoHide',
 		'browser.tabs.animate'
 	],
  
@@ -2737,7 +2763,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 					return;
 				this.setTabbrowserAttribute(this.kFIXED+'-horizontal', value ? 'true' : null, b);
 			case 'extensions.treestyletab.maxTreeLevel.horizontal':
-			case 'extensions.treestyletab.allowSubtreeCollapseExpand.horizontal':
 				if (!this.isVertical)
 					this.updateTabbarState(true);
 				return;
@@ -2747,7 +2772,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 					return;
 				this.setTabbrowserAttribute(this.kFIXED+'-vertical', value ? 'true' : null, b);
 			case 'extensions.treestyletab.maxTreeLevel.vertical':
-			case 'extensions.treestyletab.allowSubtreeCollapseExpand.vertical':
 				if (this.isVertical)
 					this.updateTabbarState(true);
 				return;
@@ -2817,11 +2841,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 			case 'browser.tabs.closeWindowWithLastTab':
 				return this.updateInvertedTabContentsOrder(true);
 
-			case 'browser.tabs.autoHide':
-				if (this.getTabs(this.mTabBrowser).length == 1)
-					this.updateFloatingTabbar(this.kTABBAR_UPDATE_BY_SHOWHIDE_TABBAR);
-				return;
-
 			case 'extensions.treestyletab.tabbar.autoHide.mode':
 			case 'extensions.treestyletab.tabbar.autoHide.mode.fullscreen':
 				return this.autoHide; // ensure initialized
@@ -3308,9 +3327,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 
 		this.updateInsertionPositionInfo(tab);
 
-		if (prefs.getPref('browser.tabs.autoHide'))
-			this.updateFloatingTabbar(this.kTABBAR_UPDATE_BY_SHOWHIDE_TABBAR);
-
 		if (this.canStackTabs)
 			this.updateTabsZIndex(true);
 
@@ -3366,7 +3382,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
  
 	scrollToNewTab : function TSTBrowser_scrollToNewTab(aTab) 
 	{
-		if (!aTab.parentNode) // do nothing for closed tab!
+		if (!this.canScrollToTab(aTab))
 			return;
 
 		if (this.scrollToNewTabMode > 0)
@@ -3494,9 +3510,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		if (tab.getAttribute('pinned') == 'true')
 			this.positionPinnedTabsWithDelay();
 
-		if (prefs.getPref('browser.tabs.autoHide'))
-			this.updateFloatingTabbar(this.kTABBAR_UPDATE_BY_SHOWHIDE_TABBAR);
-
 		if (this.canStackTabs)
 			this.updateTabsZIndex(true);
 	},
@@ -4488,7 +4501,10 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 					aChild.toggleMuteAudio();
 			}, this);
 		}
-		return this.getTabValue(aTab, this.kREALLY_SOUND_PLAYING) != 'true';
+		return (
+			this.getTabValue(aTab, this.kREALLY_SOUND_PLAYING) != 'true' &&
+			aTab.getAttribute('muted') != 'true' // allow to unmute tab always, even if the sound is not played
+		);
 	},
  
 	correctChildTabsOrderWithDelay : function TSTBrowser_correctChildTabsOrderWithDelay(aTab) 
@@ -5470,9 +5486,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 
 		this._treeViewEnabled = newValue;
 		if (this._treeViewEnabled) {
-			if (this._lastAllowSubtreeCollapseExpand)
-				this.allowSubtreeCollapseExpand = true;
-			delete this._lastAllowSubtreeCollapseExpand;
+			this.allowSubtreeCollapseExpand = true;
 
 			let tabs = this.getAllTabs(this.browser);
 			for (let i = 0, maxi = tabs.length; i < maxi; i++)
@@ -5499,7 +5513,6 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 				this.collapseExpandSubtree(tab, false, true);
 			}
 
-			this._lastAllowSubtreeCollapseExpand = this.allowSubtreeCollapseExpand;
 			this.allowSubtreeCollapseExpand = false;
 		}
 		return aValue;
@@ -6116,7 +6129,13 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		}
 		var maxIndent = maxIndentBase * (isVertical ? 0.33 : 0.5 );
 
-		var indentMin = utils.getTreePref(isVertical ? 'indent.min.vertical' : 'indent.min.horizontal');
+		var indentMin;
+		{
+			let indentKey = isVertical ? 'indent.min.vertical' : 'indent.min.horizontal';
+			let defaultIndent = utils.getDefaultTreePref(indentKey);
+			let currentIndent = utils.getTreePref(indentKey);
+			indentMin = isVertical ? Math.max(defaultIndent, currentIndent) : currentIndent ;
+		}
 		var indentUnit = Math.max(Math.floor(maxIndent / nest), indentMin);
 		if (indent > maxIndent) {
 			this.indent = indentUnit;
@@ -6186,9 +6205,12 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 	{
 		var children = this.getChildTabs(aTab);
 
-		var hasSoundPlayingChild = children.some(function(aChild) {
+		var hasSoundPlayingChild = (
+			this.allowSubtreeCollapseExpand &&
+			children.some(function(aChild) {
 				return aChild.getAttribute('soundplaying') == 'true';
-			}, this);
+			}, this)
+		);
 		var reallySoundPlaying = this.getTabValue(aTab, this.kREALLY_SOUND_PLAYING) == 'true';
 		if (hasSoundPlayingChild ||
 			reallySoundPlaying)
@@ -6196,9 +6218,12 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		else
 			aTab.removeAttribute('soundplaying');
 
-		var allChildrenMuted = children.length > 0 && children.every(function(aChild) {
+		var allChildrenMuted = (
+			this.allowSubtreeCollapseExpand &&
+			children.length > 0 && children.every(function(aChild) {
 				return aChild.getAttribute('muted') == 'true';
-			}, this);
+			}, this)
+		);
 		if ((allChildrenMuted && !reallySoundPlaying) ||
 			this.getTabValue(aTab, this.kREALLY_MUTED) == 'true')
 			aTab.setAttribute('muted', true);
@@ -7006,7 +7031,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
   
 	scrollToTab : function TSTBrowser_scrollToTab(aTab, aOnlyWhenCurrentTabIsInViewport) 
 	{
-		if (!aTab || !aTab.parentNode)
+		if (!this.canScrollToTab(aTab))
 			return;
 
 		this.cancelPerformingAutoScroll(true);
@@ -7046,9 +7071,18 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 		this.scrollTo(targetX, targetY, aTab);
 	},
  
+	canScrollToTab : function TSTBrowser_canScrollToTab(aTab)
+	{
+		return (
+			aTab &&
+			aTab.parentNode &&
+			aTab.getAttribute('hidden') != 'true'
+		);
+	},
+ 
 	scrollToTabSubtree : function TSTBrowser_scrollToTabSubtree(aTab) 
 	{
-		if (!aTab.parentNode) // do nothing for closed tab!
+		if (!this.canScrollToTab(aTab))
 			return;
 		var descendants = this.getDescendantTabs(aTab);
 		return this.scrollToTabs([aTab].concat(descendants));
@@ -7057,8 +7091,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
 	scrollToTabs : function TSTBrowser_scrollToTabs(aTabs) 
 	{
 		var firstTab = aTabs[0];
-		if (!firstTab ||
-			!firstTab.parentNode) // do nothing for closed tab!
+		if (!this.canScrollToTab(firstTab))
 			return;
 
 		var b            = this.mTabBrowser;
diff --git a/modules/constants.js b/modules/constants.js
index 7405919..ca13ac1 100644
--- a/modules/constants.js
+++ b/modules/constants.js
@@ -183,16 +183,15 @@ var TreeStyleTabConstants = Object.freeze({
 	kTABBAR_UPDATE_BY_RESET             : (1 << 1),
 	kTABBAR_UPDATE_BY_PREF_CHANGE       : (1 << 2),
 	kTABBAR_UPDATE_BY_APPEARANCE_CHANGE : (1 << 3),
-	kTABBAR_UPDATE_BY_SHOWHIDE_TABBAR   : (1 << 4),
-	kTABBAR_UPDATE_BY_TABBAR_RESIZE     : (1 << 5),
-	kTABBAR_UPDATE_BY_WINDOW_RESIZE     : (1 << 6),
-	kTABBAR_UPDATE_BY_FULLSCREEN        : (1 << 7),
-	kTABBAR_UPDATE_BY_AUTOHIDE          : (1 << 9),
-	kTABBAR_UPDATE_BY_INITIALIZE        : (1 << 10),
-	kTABBAR_UPDATE_BY_TOGGLE_SIDEBAR    : (1 << 11),
-	kTABBAR_UPDATE_NOW                 : (1 << 5) | (1 << 6) | (1 << 9) | (1 << 10),
-	kTABBAR_UPDATE_SYNC_TO_TABBAR      : (1 << 0) | (1 << 1) | (1 << 2) | (1 << 5) | (1 << 9),
-	kTABBAR_UPDATE_SYNC_TO_PLACEHOLDER : (1 << 3) | (1 << 4) | (1 << 6) | (1 << 7) | (1 << 10) | (1 << 11),
+	kTABBAR_UPDATE_BY_TABBAR_RESIZE     : (1 << 4),
+	kTABBAR_UPDATE_BY_WINDOW_RESIZE     : (1 << 5),
+	kTABBAR_UPDATE_BY_FULLSCREEN        : (1 << 6),
+	kTABBAR_UPDATE_BY_AUTOHIDE          : (1 << 7),
+	kTABBAR_UPDATE_BY_INITIALIZE        : (1 << 8),
+	kTABBAR_UPDATE_BY_TOGGLE_SIDEBAR    : (1 << 9),
+	kTABBAR_UPDATE_NOW                 : (1 << 4) | (1 << 5) | (1 << 7) | (1 << 8),
+	kTABBAR_UPDATE_SYNC_TO_TABBAR      : (1 << 0) | (1 << 1) | (1 << 2) | (1 << 4) | (1 << 7),
+	kTABBAR_UPDATE_SYNC_TO_PLACEHOLDER : (1 << 3) | (1 << 5) | (1 << 6) | (1 << 8) | (1 << 9),
 
 	kCLOSE_PARENT_BEHAVIOR_PROMOTE_FIRST_CHILD        : 3,
 	kCLOSE_PARENT_BEHAVIOR_PROMOTE_ALL_CHILDREN       : 0,
diff --git a/modules/fullTooltip.js b/modules/fullTooltip.js
index 7529688..e894939 100644
--- a/modules/fullTooltip.js
+++ b/modules/fullTooltip.js
@@ -50,6 +50,13 @@ XPCOMUtils.defineLazyModuleGetter(this, 'utils', 'resource://treestyletab-module
 XPCOMUtils.defineLazyServiceGetter(this, 'ScreenManager',
   '@mozilla.org/gfx/screenmanager;1', 'nsIScreenManager');
 
+function log(...aArgs) {
+	utils.log.apply(utils, ['fullTooltip'].concat(aArgs));
+}
+function logWithStackTrace(...aArgs) {
+	utils.logWithStackTrace.apply(utils, ['fullTooltip'].concat(aArgs));
+}
+
 function FullTooltipManager(aOwner)
 {
 	this.init(aOwner);
@@ -79,6 +86,83 @@ FullTooltipManager.prototype = inherit(TreeStyleTabBase, {
 	{
 		return this.document.getElementById('treestyletab-full-tree-tooltip');
 	},
+	get container()
+	{
+		return this.tabFullTooltip.lastChild._scrollbox;
+	},
+	get tree()
+	{
+		return this.tabFullTooltip.lastChild.lastChild.lastChild;
+	},
+
+	/**
+	 * If the window is maximized, screenX and screenY can be out of
+	 * visible screen rect. On the other hand,
+	 * PopupBoxObject#openPopupAtScreen() automatically reposition
+	 * the popup if it is going to be shown out of the visible screen
+	 * rect. As the result, the popup will be repositioned unexpectedly
+	 * if I use the raw screenX and screenY.
+	 * https://github.com/piroor/treestyletab/issues/302
+	 * To prevent such a result, I have to calculate valid base position
+	 * for the popup.
+	 */
+	get windowBasePosition() {
+		var screen = ScreenManager.screenForRect(
+				this.window.screenX,
+				this.window.screenY,
+				this.window.outerWidth,
+				this.window.outerHeight
+			);
+		var screenMinX = {},
+			screenMinY = {},
+			screenMaxX = {},
+			screenMaxY = {};
+		screen.GetAvailRect(screenMinX, screenMinY, screenMaxX, screenMaxY);
+
+		return {
+			x: Math.max(this.window.screenX, screenMinX.value),
+			y: Math.max(this.window.screenY, screenMinY.value)
+		};
+	},
+
+	getCurrentScreen : function FTM_getCurrentScreen(aBox)
+	{
+		var currentScreen = Cc['@mozilla.org/gfx/screenmanager;1']
+							.getService(Ci.nsIScreenManager)
+							.screenForRect(aBox.screenX, aBox.screenY, aBox.width, aBox.height);
+		var screenLeft   = {},
+			screenTop    = {},
+			screenWidth  = {},
+			screenHeight = {};
+		currentScreen.GetRect(screenLeft, screenTop, screenWidth, screenHeight);
+		return {
+			left   : screenLeft.value,
+			top    : screenTop.value,
+			width  : screenWidth.value,
+			height : screenHeight.value,
+			allowedWidth  : Math.ceil(screenWidth.value * 0.8),
+			allowedHeight : Math.ceil(screenHeight.value * 0.7)
+		};
+	},
+
+	get currentTooltipMargins()
+	{
+		var tooltip = this.tabFullTooltip;
+		var style = this.window.getComputedStyle(tooltip, null);
+		return {
+			left : Number(style.getPropertyValue('margin-left').replace(/px/, '')),
+			top  : Number(style.getPropertyValue('margin-top').replace(/px/, ''))
+		};
+	},
+
+	getFullTooltipFromEvent : function FTM_getFullTooltipFromEvent(aEvent)
+	{
+		return utils.evaluateXPath(
+				'ancestor-or-self::xul:tooltip[@id="'+this.tabFullTooltip.id+'"]',
+				aEvent.target,
+				Ci.nsIDOMXPathResult.FIRST_ORDERED_NODE_TYPE
+			).singleNodeValue;
+	},
 
 
 	init : function FTM_init(aOwner)
@@ -92,6 +176,7 @@ FullTooltipManager.prototype = inherit(TreeStyleTabBase, {
 		this.tabFullTooltip.addEventListener(PseudoTreeBuilder.kTAB_LINK_CLICK, this, true);
 		this.tabFullTooltip.addEventListener('popupshown', this, true);
 		this.tabFullTooltip.addEventListener('popuphidden', this, true);
+		this.tabFullTooltip.addEventListener('transitionend', this, true);
 	},
 
 	destroy : function FTM_destroy()
@@ -106,6 +191,7 @@ FullTooltipManager.prototype = inherit(TreeStyleTabBase, {
 		this.tabFullTooltip.removeEventListener(PseudoTreeBuilder.kTAB_LINK_CLICK, this, true);
 		this.tabFullTooltip.removeEventListener('popupshown', this, true);
 		this.tabFullTooltip.removeEventListener('popuphidden', this, true);
+		this.tabFullTooltip.removeEventListener('transitionend', this, true);
 
 		delete this.owner;
 	},
@@ -133,28 +219,30 @@ FullTooltipManager.prototype = inherit(TreeStyleTabBase, {
 				return this.onHidden(aEvent);
 
 			case 'mousemove':
-				return this.onTooltipMouseMove(aEvent);
+				if (this.changingPropertiesCount === 0)
+					this.onTooltipMouseMove(aEvent);
+				return;
 
 			case 'mouseover':
-				return this.cancelDelayedHide();
+				if (this.changingPropertiesCount === 0)
+					this.cancelDelayedHide();
+				return;
 
 			case 'mouseout':
-				return this.hideWithDelay();
+				if (this.changingPropertiesCount === 0)
+					this.hideWithDelay();
+				return;
+
+			case 'transitionend':
+				return this.onExpanded(aEvent);
 
 			default:
-				return this.onTooltipEvent(aEvent);
+				if (this.changingPropertiesCount === 0)
+					this.onTooltipEvent(aEvent);
+				return;
 		}
 	},
 
-	getFullTooltipFromEvent : function FTM_getFullTooltipFromEvent(aEvent)
-	{
-		return utils.evaluateXPath(
-				'ancestor-or-self::xul:tooltip[@id="'+this.tabFullTooltip.id+'"]',
-				aEvent.target,
-				Ci.nsIDOMXPathResult.FIRST_ORDERED_NODE_TYPE
-			).singleNodeValue;
-	},
-
 	onClick : function FTM_onClick(aEvent)
 	{
 		this.tabFullTooltip.hidePopup();
@@ -188,70 +276,11 @@ FullTooltipManager.prototype = inherit(TreeStyleTabBase, {
 		this.cancel();
 	},
 
-	getCurrentScreen : function FTM_getCurrentScreen(aBox)
-	{
-		var currentScreen = Cc['@mozilla.org/gfx/screenmanager;1']
-							.getService(Ci.nsIScreenManager)
-							.screenForRect(aBox.screenX, aBox.screenY, aBox.width, aBox.height);
-		var screenLeft   = {},
-			screenTop    = {},
-			screenWidth  = {},
-			screenHeight = {};
-		currentScreen.GetRect(screenLeft, screenTop, screenWidth, screenHeight);
-		return {
-			left   : screenLeft.value,
-			top    : screenTop.value,
-			width  : screenWidth.value,
-			height : screenHeight.value,
-			allowedWidth  : Math.ceil(screenWidth.value * 0.8),
-			allowedHeight : Math.ceil(screenHeight.value * 0.7)
-		};
-	},
-
 	onShown : function FTM_onShown(aEvent) 
 	{
+		log('onShown');
 		this.startListenTooltipEvents();
-
-		if (utils.getTreePref('tooltip.columnize')) {
-			let tooltip = this.tabFullTooltip;
-			let currentScreen = this.getCurrentScreen(tooltip.boxObject);
-			let tree = tooltip.lastChild.lastChild.lastChild;
-			PseudoTreeBuilder.columnizeTree(tree, {
-				width  : currentScreen.allowedWidth,
-				height : currentScreen.allowedHeight
-			});
-			this.window.setTimeout(this.resizeTooltip.bind(this), 0);
-		}
-		else {
-			this.resizeTooltip();
-		}
-	},
-	resizeTooltip : function FTM_resizeTooltip() 
-	{
-		var tooltip = this.tabFullTooltip;
-		tooltip.setAttribute('popup-shown', true);
-
-		var w = {},
-			h = {};
-		var box = tooltip.boxObject;
-		var scrollBoxObject = tooltip.firstChild.scrollBoxObject;
-		scrollBoxObject.getScrolledSize(w, h);
-		var currentW = box.width - scrollBoxObject.width + w.value;
-		var currentH = box.height - scrollBoxObject.height + h.value;
-		var currentX = box.screenX;
-		var currentY = box.screenY;
-
-		var currentScreen = this.getCurrentScreen(box);
-
-		var style = tooltip.style;
-		style.maxWidth = currentScreen.allowedWidth+'px';
-		style.maxHeight = currentScreen.allowedHeight+'px';
-		style.minWidth = 0;
-		style.minHeight = 0;
-		if (currentX + currentW + currentScreen.left >= currentScreen.allowedWidth)
-			style.marginLeft = (Math.max(currentScreen.left, currentScreen.allowedWidth - currentW) - this.window.screenX)+'px';
-		if (currentY + currentH + currentScreen.top >= currentScreen.allowedHeight)
-			style.marginTop = (Math.max(currentScreen.top, currentScreen.allowedHeight - currentH) - this.window.screenY)+'px';
+		this.expandTooltip();
 	},
 
 	onHidden : function FTM_onHidden(aEvent) 
@@ -308,6 +337,7 @@ FullTooltipManager.prototype = inherit(TreeStyleTabBase, {
 
 	handleDefaultTooltip : function FTM_handleDefaultTooltip(aEvent) 
 	{
+		log('handleDefaultTooltip');
 		var tab = this.getTabFromChild(this.document.tooltipNode);
 		if (!tab || tab.localName != 'tab')
 			return;
@@ -377,69 +407,60 @@ FullTooltipManager.prototype = inherit(TreeStyleTabBase, {
 			this.setup(aEvent.target, tab, fullTooltipExtraLabel);
 	},
 
-
-	/**
-	 * If the window is maximized, screenX and screenY can be out of
-	 * visible screen rect. On the other hand,
-	 * PopupBoxObject#openPopupAtScreen() automatically reposition
-	 * the popup if it is going to be shown out of the visible screen
-	 * rect. As the result, the popup will be repositioned unexpectedly
-	 * if I use the raw screenX and screenY.
-	 * https://github.com/piroor/treestyletab/issues/302
-	 * To prevent such a result, I have to calculate valid base position
-	 * for the popup.
-	 */
-	get windowBasePosition() {
-		var screen = ScreenManager.screenForRect(
-				this.window.screenX,
-				this.window.screenY,
-				this.window.outerWidth,
-				this.window.outerHeight
-			);
-		var screenMinX = {},
-			screenMinY = {},
-			screenMaxX = {},
-			screenMaxY = {};
-		screen.GetAvailRect(screenMinX, screenMinY, screenMaxX, screenMaxY);
-
-		return {
-			x: Math.max(this.window.screenX, screenMinX.value),
-			y: Math.max(this.window.screenY, screenMinY.value)
-		};
-	},
-
 	setup : function FTM_setup(aBaseTooltip, aTab, aExtraLabels) 
 	{
+		log('setup');
 		this.cancel();
 
 		var delay = utils.getTreePref('tooltip.fullTooltipDelay');
 		if (delay < 0)
 			return;
 
-		this._fullTooltipTimer = this.window.setTimeout(function(aSelf) {
-			var basePosition = aSelf.windowBasePosition;
+		this._fullTooltipTimer = this.window.setTimeout((function() {
+			log('setup:delayed');
+
+			var basePosition = this.windowBasePosition;
+			log(' => window position: ', basePosition);
+
 			var box = aBaseTooltip.boxObject;
 			var x = box.screenX - basePosition.x;
 			var y = box.screenY - basePosition.y;
 			var w = box.width;
 			var h = box.height;
+			log(' => base tooltip: ', {
+				screenX : box.screenX,
+				screenY : box.screenY,
+				x       : x,
+				y       : y,
+				width   : w,
+				height  : h
+			});
+
 			aBaseTooltip.hidePopup();
 
-			aSelf.fill(aTab, aExtraLabels);
+			this.fill(aTab, aExtraLabels);
 
-			var tooltip = aSelf.tabFullTooltip;
+			var tooltip = this.tabFullTooltip;
 			{
+				this.setTooltipPosition(x, y);
 				let style = tooltip.style;
-				style.marginLeft = x+'px';
-				style.marginTop = y+'px';
-				style.maxWidth = style.minWidth = w+'px';
+				style.maxWidth  = style.minWidth  = w+'px';
 				style.maxHeight = style.minHeight = h+'px';
 			}
 			tooltip.openPopupAtScreen(basePosition.x, basePosition.y, false);
-		}, Math.max(delay, 0), this);
+		}).bind(this), Math.max(delay, 0), this);
+	},
+	setTooltipPosition : function FTM_setTooltipPosition(aX, aY, aScreen)
+	{
+		var tooltip = this.tabFullTooltip;
+		var style = tooltip.style;
+		var box   = tooltip.boxObject;
+		var aScreen = aScreen || this.lastScreen || this.getCurrentScreen(box);
+		style.marginLeft = aX+'px';
+		style.marginTop  = aY+'px';
 	},
 
-	cancel : function FTM_destroyFullTooltip()
+	cancel : function FTM_cancel()
 	{
 		if (this._fullTooltipTimer) {
 			this.window.clearTimeout(this._fullTooltipTimer);
@@ -450,8 +471,11 @@ FullTooltipManager.prototype = inherit(TreeStyleTabBase, {
 
 	hide : function FTM_hide()
 	{
+		logWithStackTrace('hide');
 		this.cancelDelayedHide();
 		this.tabFullTooltip.hidePopup();
+		this.changingPropertiesCount = 0;
+		this.lastScreen = null;
 	},
 
 
@@ -474,9 +498,9 @@ FullTooltipManager.prototype = inherit(TreeStyleTabBase, {
 
 	fill : function FTM_fill(aTab, aExtraLabels)
 	{
+		log('fill');
 		this.clear();
 
-		var tree = PseudoTreeBuilder.build(aTab);
 		var root = this.document.createElement('arrowscrollbox');
 		var orient = utils.getTreePref('tooltip.columnize') ? 'horizontal' : 'vertical' ;
 		root.setAttribute('orient', orient);
@@ -493,11 +517,13 @@ FullTooltipManager.prototype = inherit(TreeStyleTabBase, {
 				label = label.trim();
 				if (!label)
 					continue;
-				container.appendChild(this.document.createElement('description'))
-					.appendChild(this.document.createTextNode(label));
+				let caption = this.document.createElement('description');
+				caption.appendChild(this.document.createTextNode(label));
+				container.appendChild(caption)
 			}
 		}
 
+		var tree = PseudoTreeBuilder.build(aTab);
 		container.insertBefore(tree, container.firstChild && container.firstChild.nextSibling);
 		root.appendChild(container);
 
@@ -510,5 +536,139 @@ FullTooltipManager.prototype = inherit(TreeStyleTabBase, {
 		range.selectNodeContents(this.tabFullTooltip);
 		range.deleteContents();
 		range.detach();
+	},
+
+
+	expandTooltip : function FTM_expandTooltip() 
+	{
+		log('expandTooltip');
+		var tooltip = this.tabFullTooltip;
+		{
+			let tree = this.tree;
+			let basePosition = this.windowBasePosition;
+			let tooltipBox = tooltip.boxObject;
+			log(' => initial dimension: ', {
+				screenX : tooltipBox.screenX,
+				screenY : tooltipBox.screenY,
+				x       : tooltipBox.screenX - basePosition.x,
+				y       : tooltipBox.screenY - basePosition.y,
+				width   : tooltipBox.width,
+				height  : tooltipBox.height,
+				tree    : {
+					width  : tree.clientWidth,
+					height : tree.clientHeight
+				}
+			});
+		}
+
+		this.lastScreen = this.getCurrentScreen(tooltip.boxObject);
+
+		this.determineTreeSize();
+		this.expandTooltipInternal();
+	},
+	determineTreeSize : function FTM_determineTreeSize()
+	{
+		var tree = this.tree;
+
+		var columnize = utils.getTreePref('tooltip.columnize');
+		if (columnize) {
+			PseudoTreeBuilder.columnizeTree(tree, {
+				columnWidth : utils.getTreePref('tooltip.columnize.width'),
+				containerBox : {
+					width  : this.lastScreen.allowedWidth,
+					height : this.lastScreen.allowedHeight
+				},
+				calculateCount : true
+			});
+		}
+
+		var range = this.document.createRange();
+		range.selectNodeContents(tree);
+		if (tree.previousSibling)
+			range.setStartBefore(tree.previousSibling);
+		var rect = range.getBoundingClientRect();
+		range.detach();
+
+		var container = this.container;
+
+		var arrowScrollBox = container.parentNode;
+		var scrollButtonsMargin = (arrowScrollBox.boxObject.width - arrowScrollBox._scrollbox.boxObject.width);
+		scrollButtonsMargin *= 2; // enough width to deactivate scroll buttons.
+
+		var containerStyle = container.style;
+		containerStyle.width  = (container.width = rect.width + scrollButtonsMargin)+'px';
+		containerStyle.height = (container.height = rect.height)+'px';
+	},
+	expandTooltipInternal : function FTM_expandTooltipInternal()
+	{
+		log('expandTooltipInternal');
+		this.changingPropertiesCount = 2;
+
+		var tooltip = this.tabFullTooltip;
+		tooltip.setAttribute('popup-shown', true);
+
+		var currentScreen = this.lastScreen || this.getCurrentScreen(box);
+		var box = tooltip.boxObject;
+		var currentX = box.screenX - currentScreen.left;
+		var currentY = box.screenY - currentScreen.top;
+
+		var container = this.container;
+		var maxWidth  = Math.min(container.width, currentScreen.allowedWidth);
+		var maxHeight = Math.min(container.height, currentScreen.allowedHeight);
+
+		var style = tooltip.style;
+		style.maxWidth  = maxWidth+'px';
+		style.maxHeight = currentScreen.allowedHeight+'px';
+		style.minWidth  = 0;
+		style.minHeight = 0;
+
+		var margins = this.currentTooltipMargins;
+		var maxX = currentScreen.width - maxWidth;
+		var maxY = currentScreen.height - maxHeight;
+
+		log(' => current dimension: ', {
+			margins  : margins,
+			x        : currentX,
+			y        : currentY,
+			maxX     : maxX,
+			maxY     : maxY,
+			container : {
+				width  : container.width,
+				height : container.height
+			},
+			screen : currentScreen,
+			columnCount : this.tree.columnCount
+		});
+
+		if (currentX > maxX)
+			margins.left -= currentX - maxX + Math.ceil(currentScreen.width * 0.05);
+		if (currentY > maxY)
+			margins.top -= currentY - maxY + Math.ceil(currentScreen.height * 0.05);
+
+		this.setTooltipPosition(margins.left, margins.top, currentScreen);
+		log(' => updated margins: ', margins);
+	},
+	onExpanded : function FTM_onExpanded(aEvent)
+	{
+		let tooltipBox = this.tabFullTooltip.boxObject;
+		let tree = this.tree;
+		log('transitionend: ', {
+			target   : aEvent.target,
+			property : aEvent.propertyName,
+			value    : this.window.getComputedStyle(aEvent.target, null)
+						.getPropertyValue(aEvent.propertyName),
+			tooltipSize : {
+				width  : tooltipBox.width,
+				height : tooltipBox.height
+			},
+			treeSize : {
+				width  : tree.clientWidth,
+				height : tree.clientHeight
+			}
+		});
+
+		if (this.changingPropertiesCount > 0 &&
+			/width|height/.test(aEvent.propertyName))
+			this.changingPropertiesCount--;
 	}
 });
diff --git a/modules/groupTab.js b/modules/groupTab.js
index fba531f..51d3892 100644
--- a/modules/groupTab.js
+++ b/modules/groupTab.js
@@ -411,7 +411,9 @@ GroupTab.prototype = inherit(TreeStyleTabBase, {
 			return;
 		var container = this.document.getElementById('tree');
 		var tree = container.firstChild;
-		PseudoTreeBuilder.columnizeTree(tree);
+		PseudoTreeBuilder.columnizeTree(tree, {
+			columnWidth : utils.getTreePref('groupTab.columnize.width')
+		});
 	},
 
 	onTabAttached : function GT_onTabAttached(aEvent)
diff --git a/modules/pseudoTreeBuilder.js b/modules/pseudoTreeBuilder.js
index 018becf..f3002c5 100644
--- a/modules/pseudoTreeBuilder.js
+++ b/modules/pseudoTreeBuilder.js
@@ -44,8 +44,6 @@ Components.utils.import('resource://gre/modules/XPCOMUtils.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'TreeStyleTabBase', 'resource://treestyletab-modules/base.js');
 
 var PseudoTreeBuilder = {
-	XHTMLNS : 'http://www.w3.org/1999/xhtml',
-
 	kFAVICON      : 'treestyletab-pseudo-tree-favicon',
 	kROOT         : 'treestyletab-pseudo-tree-root',
 	kROOTITEM     : 'treestyletab-pseudo-tree-root-item',
@@ -63,11 +61,11 @@ var PseudoTreeBuilder = {
 		var tree = this.createTabItem(aTab);
 		tree.className = this.kROOT;
 
-		var row = tree.querySelector("*|*."+this.kTREEROW);
+		var row = tree.querySelector('*|*.' + this.kTREEROW);
 		if (!row)
 			return;
 
-		row.className += " "+this.kROOTITEM;
+		row.className += ' ' + this.kROOTITEM;
 
 		tree.setAttribute('onclick', 
 			('var doc = event.target.ownerDocument;\n' +
@@ -98,10 +96,10 @@ var PseudoTreeBuilder = {
 		var doc = aTab.ownerDocument;
 		var w = doc.defaultView;
 
-		var item = doc.createElementNS(this.XHTMLNS, 'div');
+		var item = doc.createElement('vbox');
 		item.setAttribute('class', this.kTREEITEM);
 
-		var favicon = item.appendChild(doc.createElementNS(this.XHTMLNS, 'img'));
+		var favicon = item.appendChild(doc.createElement('image'));
 		favicon.setAttribute('src', aTab.getAttribute('image') || 'chrome://mozapps/skin/places/defaultFavicon.png');
 		favicon.setAttribute('class', this.kFAVICON);
 
@@ -115,13 +113,13 @@ var PseudoTreeBuilder = {
 		label.setAttribute('class', 'text-link');
 		label.setAttribute('tab-id', TreeStyleTabBase.getTabValue(aTab, TreeStyleTabBase.kID));
 
-		var row = doc.createElementNS(this.XHTMLNS, 'div');
+		var row = doc.createElement('vbox');
 		row.setAttribute('class', this.kTREEROW);
 		row.appendChild(item);
 
 		var children = this.createTabChildren(aTab);
 		if (children) {
-			let container = doc.createElementNS(this.XHTMLNS, 'div');
+			let container = doc.createElement('vbox');
 			container.appendChild(row);
 			container.appendChild(children);
 			return container;
@@ -139,7 +137,7 @@ var PseudoTreeBuilder = {
 		if (!children.length)
 			return null;
 
-		var container = doc.createElementNS(this.XHTMLNS, 'div');
+		var container = doc.createElement('vbox');
 		container.setAttribute('class', this.kTREECHILDREN);
 		for (let i = 0, maxi = children.length; i < maxi; i++)
 		{
@@ -148,37 +146,45 @@ var PseudoTreeBuilder = {
 		return container;
 	},
 
-	columnizeTree : function TB_columnizeTree(aTree, aContainerBox)
+	columnizeTree : function TB_columnizeTree(aTree, aOptions)
 	{
-		aContainerBox = aContainerBox || aTree.parentNode.boxObject;
+		if (!aTree)
+			return;
+
+		aOptions = aOptions || {};
+		aOptions.columnWidth = aOptions.columnWidth || '20em';
 
 		var style = aTree.style;
-		var height = aTree.clientHeight * (aTree.columnCount || 1);
-		if (height > aContainerBox.height &&
-			aContainerBox.height < aContainerBox.width) {
-			let maxWidth = aContainerBox.width;
-			aTree.columnWidth = Math.floor(maxWidth * 0.9 / 2.5);
-			let count = Math.ceil(
-				(aTree.clientWidth * aTree.clientHeight) /
-				(aTree.columnWidth * aTree.clientHeight)
-			);
-			aTree.columnCount = style.columnCount = style.MozColumnCount = count;
-			style.columnWidth = style.MozColumnWidth = aTree.columnWidth+'px';
-			style.columnGap = style.MozColumnGap = '0';
-		}
-		else {
-			aTree.columnCount = 1;
-			style.columnCount = style.MozColumnCount =
-				style.columnWidth = style.MozColumnWidth =
-				style.columnGap = style.MozColumnGap = '';
-		}
 
-		if (aTree.columnCount > 1) {
+		style.columnWidth = style.MozColumnWidth = 'calc(' + aOptions.columnWidth + ')';
+		{
+			let computedStyle = aTree.ownerDocument.defaultView.getComputedStyle(aTree, null)
+			aTree.columnWidth = Number((computedStyle.MozColumnWidth || computedStyle.columnWidth).replace(/px/, ''));
+		}
+		style.columnGap = style.MozColumnGap = '0';
+		style.columnFill = style.MozColumnFill = 'auto';
+		style.columnCount = style.MozColumnCount = 'auto';
+
+		var containerBox = aOptions.containerBox || aTree.parentNode.boxObject;
+		var maxWidth = containerBox.width;
+		if (aTree.columnWidth * 2 <= maxWidth ||
+			aOptions.calculateCount) {
 			style.height = style.maxHeight =
-				Math.floor(aContainerBox.height * 0.9) + 'px';
+				Math.floor(containerBox.height * 0.9) + 'px';
+
+			if (this.getActualColumnCount(aTree) == 1)
+				style.columnWidth = style.MozColumnWidth = '';
 		}
 		else {
 			style.height = style.maxHeight = '';
 		}
+	},
+	getActualColumnCount : function TB_getActualColumnCount(aTree)
+	{
+		var range = aTree.ownerDocument.createRange();
+		range.selectNodeContents(aTree);
+		var rect = range.getBoundingClientRect();
+		range.detach();
+		return Math.floor(rect.width / aTree.columnWidth);
 	}
 };
diff --git a/modules/tabbarDNDObserver.js b/modules/tabbarDNDObserver.js
index da0b61d..26ec5df 100644
--- a/modules/tabbarDNDObserver.js
+++ b/modules/tabbarDNDObserver.js
@@ -528,12 +528,14 @@ catch(e) {
 					draggedWholeTree.push(tab);
 			}
 		}
+		log(' => draggedTabs: ', draggedTabs);
 
 		var selectedTabs = draggedTabs.filter(function(aTab) {
 				return aTab.getAttribute('multiselected') == 'true';
 			});
 		if (draggedWholeTree.length != selectedTabs.length &&
 			selectedTabs.length) {
+			log(' => partially dragged');
 			draggedTabs = draggedRoots = selectedTabs;
 			if (aInfo.action & sv.kACTIONS_FOR_SOURCE)
 				sourceService.detachTabs(selectedTabs);
@@ -545,39 +547,61 @@ catch(e) {
 		}
 
 		if (aInfo.action & sv.kACTIONS_FOR_SOURCE) {
+			log(' => action for source tabs');
 			if (aInfo.action & sv.kACTION_PART) {
+				log('   => detach');
 				this.detachTabsOnDrop(draggedRoots);
 			}
 			else if (aInfo.action & sv.kACTION_ATTACH) {
+				log('   => attach');
 				this.attachTabsOnDrop(draggedRoots, aInfo.parent);
 			}
-			// otherwise, just moved.
+			else {
+				log('   => just moved');
+			}
 
 			if ( // if this move will cause no change...
 				sourceBrowser == targetBrowser &&
 				sourceService.getNextVisibleTab(draggedTabs[draggedTabs.length-1]) == aInfo.insertBefore
 				) {
-				log(' => no change');
-				// then, do nothing
+				log(' => no change: do nothing');
 				return true;
 			}
 		}
 
 		var treeStructure = utils.getTreeStructureFromTabs(draggedTabs);
 
-		var newTabs = sv.moveTabsInternal(draggedTabs, {
+		log(' => moving dragged tabs');
+		var newTabs;
+		var replacedGroupTabs = sourceService.doAndGetNewTabs((function() {
+			newTabs = sv.moveTabsInternal(draggedTabs, {
 				duplicate    : aInfo.action & sv.kACTION_DUPLICATE,
 				insertBefore : aInfo.insertBefore
 			});
+		}).bind(this));
+
+		log(' => opened group tabs: ', replacedGroupTabs);
+		sourceWindow.setTimeout((function() {
+			log('closing needless group tabs');
+			replacedGroupTabs.reverse().forEach(function(aTab) {
+				log(' check: ', aTab.label+'('+aTab._tPos+') '+sourceService.getLoadingURI(aTab));
+				if (sourceService.isGroupTab(aTab) &&
+					!sourceService.hasChildTabs(aTab))
+					sourceBrowser.removeTab(aTab);
+			}, this);
+		}).bind(this), 0);
 
-		if (newTabs.length && aInfo.action & sv.kACTION_ATTACH)
+		if (newTabs.length && aInfo.action & sv.kACTION_ATTACH) {
+			log('   => attach (last)');
 			this.attachTabsOnDrop(
 				newTabs.filter(function(aTab, aIndex) {
 					return treeStructure[aIndex] == -1;
 				}),
 				aInfo.parent
 			);
+		}
 
+		log(' => finished');
 		return true;
 	},
 	
@@ -619,6 +643,7 @@ catch(e) {
  
 	attachTabsOnDrop : function TabbarDND_attachTabsOnDrop(aTabs, aParent) 
 	{
+		log('attachTabsOnDrop: start');
 		var b  = aTabs[0].ownerDocument.defaultView.TreeStyleTabService.getTabBrowserFromChild(aTabs[0]);
 		var sv = b.treeStyleTab;
 
@@ -638,6 +663,7 @@ catch(e) {
  
 	detachTabsOnDrop : function TabbarDND_detachTabsOnDrop(aTabs) 
 	{
+		log('detachTabsOnDrop: start');
 		var b  = aTabs[0].ownerDocument.defaultView.TreeStyleTabService.getTabBrowserFromChild(aTabs[0]);
 		var sv = b.treeStyleTab;
 
@@ -1142,6 +1168,7 @@ catch(e) {
 			if (aURI.indexOf(this.BOOKMARK_FOLDER) != 0)
 				this.securityCheck(aURI, aEvent);
 		}, this);
+		log('handleLinksOrBookmarks: ', uris);
 
 		var sv = this.treeStyleTab;
 		var b  = this.browser;
@@ -1149,7 +1176,8 @@ catch(e) {
 		var self = this;
 
 		let bgLoad = prefs.getPref('browser.tabs.loadInBackground');
-		if (aEvent.shiftKey) bgLoad = !bgLoad;
+		if (aEvent.shiftKey)
+			bgLoad = !bgLoad;
 
 		let tab = sv.getTabFromEvent(aEvent);
 		if (
@@ -1179,7 +1207,10 @@ catch(e) {
 					// migrated to a Promise (Firefox 39 and later).
 					w.getShortcutOrURIAndPostData(aURI, (function(aData) {
 						var uri = aData.url;
-						this.performDrop(aDropActionInfo, b.loadOneTab(uri, { inBackground: bgLoad }));
+						this.performDrop(aDropActionInfo, b.loadOneTab(uri, {
+							inBackground         : bgLoad,
+							allowThirdPartyFixup : true
+						}));
 					}).bind(this));
 				}
 			}, this);
@@ -1199,7 +1230,10 @@ catch(e) {
 			w.getShortcutOrURIAndPostData(uris[0], (function(aData) {
 				var uri = aData.url;
 				if (loadDroppedLinkToNewChildTab || locked) {
-					this.performDrop(aDropActionInfo, b.loadOneTab(uri, { inBackground: bgLoad }));
+					this.performDrop(aDropActionInfo, b.loadOneTab(uri, {
+						inBackground         : bgLoad,
+						allowThirdPartyFixup : true
+					}));
 				}
 				else {
 					tab.linkedBrowser.loadURI(uri);
@@ -1244,6 +1278,7 @@ catch(e) {
 	
 	retrieveURLsFromDataTransfer : function TSTService_retrieveURLsFromDataTransfer(aDataTransfer) 
 	{
+		log('retrieveURLsFromDataTransfer');
 		var urls = [];
 		var types = [
 				'text/x-moz-place',
@@ -1265,19 +1300,20 @@ catch(e) {
 			if (urls.length)
 				break;
 		}
-		return urls.filter(function(aURI) {
+		log(' => retrieved: ', urls);
+		urls = urls.filter(function(aURI) {
 				return aURI &&
 						aURI.length &&
 						aURI.indexOf(this.BOOKMARK_FOLDER) == 0 ||
-						(
-							aURI.indexOf(' ', 0) == -1 &&
-							!/^\s*(javascript|data):/.test(aURI)
-						);
+						!/^\s*(javascript|data):/.test(aURI);
 			}, this);
+		log('  => filtered: ', urls);
+		return urls;
 	},
 	BOOKMARK_FOLDER: 'x-moz-place:',
 	retrieveURLsFromData : function TSTService_retrieveURLsFromData(aData, aType)
 	{
+		log('retrieveURLsFromData: ', aType, aData);
 		switch (aType)
 		{
 			case 'text/x-moz-place':
diff --git a/modules/utils.js b/modules/utils.js
index 368318b..62a1657 100644
--- a/modules/utils.js
+++ b/modules/utils.js
@@ -69,7 +69,7 @@ XPCOMUtils.defineLazyModuleGetter(this, 'TreeStyleTabConstants',
   'resource://treestyletab-modules/constants.js', 'TreeStyleTabConstants');
 
 const TST_PREF_PREFIX = 'extensions.treestyletab.';
-const TST_PREF_VERSION = 12;
+const TST_PREF_VERSION = 14;
 
 
 var TreeStyleTabUtils = {
@@ -84,6 +84,10 @@ var TreeStyleTabUtils = {
 	{
 		return prefs.getPref(TST_PREF_PREFIX + aPrefstring);
 	},
+	getDefaultTreePref : function TSTUtils_getTreePref(aPrefstring)
+	{
+		return prefs.getDefaultPref(TST_PREF_PREFIX + aPrefstring);
+	},
 
 	setTreePref : function TSTUtils_setTreePref(aPrefstring, aNewValue)
 	{
@@ -230,6 +234,32 @@ var TreeStyleTabUtils = {
 					if (backupValue !== null)
 						prefs.setPref('browser.tabs.insertRelatedAfterCurrent', backupValue);
 				}
+			case 12:
+				{
+					let orient = /^(left|right)$/.test(this.getTreePref('tabbar.position')) ? 'vertical' : 'horizontal' ;
+					let disabledCollapseExpand = this.getTreePref('allowSubtreeCollapseExpand.' + orient) === false;
+					let disabledIndent = this.getTreePref('indent.' + orient) == 0 ||
+										this.getTreePref('indent.min.' + orient) == 0;
+
+					if (disabledCollapseExpand) {
+						this.setTreePref('autoCollapseExpandSubtreeOnAttach', false);
+						this.setTreePref('autoCollapseExpandSubtreeOnSelect', false);
+					}
+
+					let treeWasRevoked = disabledCollapseExpand || (disabledIndent && orient == 'vertical');
+					if (treeWasRevoked) {
+						Services.prompt.alert(this.browserWindow,
+							this.treeBundle.getString('migration.treeNeverRevoked.title'),
+							this.treeBundle.getString('migration.treeNeverRevoked.text')
+						);
+					}
+				}
+			case 13:
+				{
+					let delay = this.getTreePref('tabbar.autoHide.delay');
+					if (delay !== null)
+						this.setTreePref('tabbar.autoHide.delay.show', delay);
+				}
 			default:
 				for (let i = 0, maxi = orientalPrefs.length; i < maxi; i++)
 				{
@@ -576,60 +606,67 @@ var TreeStyleTabUtils = {
 			SSS.sheetRegistered(this.lastAgentSheetForNarrowScrollbar, SSS.AGENT_SHEET))
 			SSS.unregisterSheet(this.lastAgentSheetForNarrowScrollbar, SSS.AGENT_SHEET);
 
-		var scrollbox = aTabBrowser.tabContainer.mTabstrip._scrollbox;
-		var d = scrollbox.ownerDocument;
-
-		// We have to calculate the width of the scroll bar indirectly
-		// based on the width of the container and the scrollable contents,
-		// because the scrollbar is not accessible via public APIs.
-		var scrollbarSize = this.lastOriginalScrollbarSize;
-		if (scrollbarSize == 0) {
-			let nodes = d.getAnonymousNodes(scrollbox);
-			if (nodes) {
-				for (let i = 0, maxi = nodes.length; i < maxi; i++)
-				{
-					if (nodes[i].localName != 'box')
-						continue;
-					scrollbarSize = scrollbox.boxObject.width - nodes[i].boxObject.width;
-					break;
+		var size = this.getTreePref('tabbar.narrowScrollbar.width');
+		var negativeMarginRules = '';
+		{
+			let scrollbox = aTabBrowser.tabContainer.mTabstrip._scrollbox;
+			let d = scrollbox.ownerDocument;
+
+			// We have to calculate the width of the scroll bar indirectly
+			// based on the width of the container and the scrollable contents,
+			// because the scrollbar is not accessible via public APIs.
+			let scrollbarSize = this.lastOriginalScrollbarSize;
+			if (scrollbarSize == 0) {
+				let nodes = d.getAnonymousNodes(scrollbox);
+				if (nodes) {
+					for (let i = 0, maxi = nodes.length; i < maxi; i++)
+					{
+						if (nodes[i].localName != 'box')
+							continue;
+						scrollbarSize = scrollbox.boxObject.width - nodes[i].boxObject.width;
+						break;
+					}
 				}
 			}
-		}
-
-		var size = this.getTreePref('tabbar.narrowScrollbar.width');
-		var rulesToSizeScrollbar;
-		var rulesToSizeScrollbarContents;
-		if (scrollbarSize) {
-			let overWidth = size - scrollbarSize;
-			let leftMargin = Math.floor(overWidth / 2);
-			let rightMargin = overWidth - leftMargin;
-			rulesToSizeScrollbar = 'margin-left: '+leftMargin+'px;' +
-									'margin-right: '+rightMargin+'px;';
-		}
-		else {
-			rulesToSizeScrollbar = 'font-size: '+size+'px;';
-			rulesToSizeScrollbarContents = 'max-width: '+size+'px;' +
-											'min-width: '+size+'px;';
+			if (scrollbarSize > 0) {
+				let overWidth = size - scrollbarSize;
+				let leftMargin = Math.floor(overWidth / 2);
+				let rightMargin = overWidth - leftMargin;
+				negativeMarginRules = 'margin-left: '+leftMargin+'px;' +
+										'margin-right: '+rightMargin+'px;';
+			}
 		}
 
 		const style = 'data:text/css,'+encodeURIComponent(
 			('@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");' +
 
-			(rulesToSizeScrollbarContents ?
 			'tabs.tabbrowser-tabs[%MODE%="vertical"][%NARROW%="true"]' +
 			'  .tabbrowser-arrowscrollbox' +
 			'  > scrollbox' +
-			'  > scrollbar[orient="vertical"],' +
+			'  > scrollbar[orient="vertical"] {' +
+			'  font-size: %SIZE%px;' +
+			'  max-width: %SIZE%px;' +
+			'  min-width: %SIZE%px;' +
+			// This "clip-path" is required to clip overflowed elements.
+			// Elements with "-moz-appearance" can be larger than its given
+			// maximum size.
+			'  clip-path: url(#treestyletab-box-clip-path);' +
+			'}' +
 			'tabs.tabbrowser-tabs[%MODE%="vertical"][%NARROW%="true"]' +
 			'  .tabbrowser-arrowscrollbox' +
 			'  > scrollbox' +
-			'  > scrollbar[orient="vertical"] * {' + rulesToSizeScrollbarContents + '}' : '' ) +
-
+			'  > scrollbar[orient="vertical"] * {' +
+			'  font-size: %SIZE%px;' +
+			'  max-width: 100%;' +
+			'  min-width: %SIZE%px;' +
+			'}' +
 			'tabs.tabbrowser-tabs[%MODE%="vertical"][%NARROW%="true"]' +
 			'  .tabbrowser-arrowscrollbox' +
 			'  > scrollbox' +
-			'  > scrollbar[orient="vertical"] {' + rulesToSizeScrollbar + '}' +
-
+			'  > scrollbar[orient="vertical"] scrollbarbutton {' +
+			'  font-size: %SIZE%px;' +
+			  negativeMarginRules +
+			'}' +
 			'tabs.tabbrowser-tabs[%MODE%="vertical"][%NARROW%="true"]' +
 			'  .tabbrowser-arrowscrollbox' +
 			'  > scrollbox' +
@@ -694,6 +731,34 @@ var TreeStyleTabUtils = {
 	},
 
 
+
+	isMac : Cc['@mozilla.org/xre/app-info;1']
+			.getService(Ci.nsIXULAppInfo)
+			.QueryInterface(Ci.nsIXULRuntime).OS == 'Darwin',
+
+	wrapEventAsNewTabAction : function(aOriginalEvent, aParams)
+	{
+		var ctrlKey = !this.isMac;
+		var metaKey = this.isMac;
+		return new Proxy(aOriginalEvent, {
+			get: function(aTarget, aName) {
+				switch (aName)
+				{
+					case 'ctrlKey':
+						return ctrlKey;
+					case 'metaKey':
+						return metaKey;
+					default:
+						var object = aTarget[aName];
+						if (typeof object == 'function')
+							return object.bind(aTarget);
+						return object;
+				}
+			}
+		});
+	},
+
+
 /* Pref Listener */ 
 	domains : [ 
 		'extensions.treestyletab.'
diff --git a/modules/window.js b/modules/window.js
index 5624ac5..73b21b5 100644
--- a/modules/window.js
+++ b/modules/window.js
@@ -19,6 +19,7 @@
  *
  * Contributor(s): YUKI "Piro" Hiroshi <piro.outsider.reflex at gmail.com>
  *                 Tetsuharu OHZEKI <https://github.com/saneyuki>
+ *                 J. Ryan Stinnett <https://github.com/jryans>
  *
  * 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
@@ -1446,16 +1447,41 @@ TreeStyleTabWindow.prototype = inherit(TreeStyleTabBase, {
 	onBeforeGoHome : function TSTWindow_onBeforeGoHome(aEvent, aTabBrowser) 
 	{
 		if (!aEvent || aEvent.button === 2 || !aTabBrowser)
-			return;
+			return aEvent;
 
 		var where = this.window.whereToOpenLink(aEvent, false, true);
 		if (where == 'current' && aTabBrowser.selectedTab.pinned)
 			where = 'tab';
 
-		if (where.indexOf('tab') === 0)
-			this.readyToOpenNewTabGroupNow(aTabBrowser);
-		else
+		var openAsFlatTabs = where === 'current';
+
+		// Loading home pages into the current tab will replaces the current
+		// tab with the first home page and others are opened as child tabs.
+		// To avoid such odd behavior, we always open multiple home pages as
+		// a new group.
+		// See also: https://github.com/piroor/treestyletab/issues/1063
+		var homePages = this.window.gHomeButton.getHomePage().split('|').filter(function(aURI) {
+				return aURI;
+			});
+		if (where.indexOf('tab') !== 0 &&
+			homePages.length > 1) {
+			where = 'tab';
+			aEvent = utils.wrapEventAsNewTabAction(aEvent);
+			openAsFlatTabs = true;
+		}
+
+		if (openAsFlatTabs) {
 			this.readyToOpenOrphanTabNow(aTabBrowser);
+			aTabBrowser.treeStyleTab.nextOpenedTabToBeParent = false;
+		}
+		else {
+			if (where.indexOf('tab') === 0)
+				this.readyToOpenNewTabGroupNow(aTabBrowser);
+			else
+				this.readyToOpenOrphanTabNow(aTabBrowser);
+		}
+
+		return aEvent;
 	},
  
 	onBeforeViewMedia : function TSTWindow_onBeforeViewMedia(aEvent, aOwner) 
@@ -1870,33 +1896,33 @@ TreeStyleTabWindow.prototype = inherit(TreeStyleTabBase, {
 	},
 	_tabFocusAllowance : [],
  
-	tearOffSubtreeFromRemote : function TSTWindow_tearOffSubtreeFromRemote() 
+	tearOffSubtreeFromRemote : function TSTWindow_tearOffSubtreeFromRemote(aRemoteTab)
 	{
+		log('tearOffSubtreeFromRemote');
 		var w = this.window;
-		var remoteTab = w.arguments[0];
-		var remoteWindow  = remoteTab.ownerDocument.defaultView;
+		var remoteWindow  = aRemoteTab.ownerDocument.defaultView;
 		var remoteService = remoteWindow.TreeStyleTabService;
 		var remoteMultipleTabService = remoteWindow.MultipleTabService;
-		if (remoteService.hasChildTabs(remoteTab) ||
-			(remoteMultipleTabService && remoteMultipleTabService.isSelected(remoteTab))) {
-			let remoteBrowser = remoteService.getTabBrowserFromChild(remoteTab);
-			if (remoteBrowser.treeStyleTab.tabbarDNDObserver.isDraggingAllTabs(remoteTab)) {
+		if (remoteService.hasChildTabs(aRemoteTab) ||
+			(remoteMultipleTabService && remoteMultipleTabService.isSelected(aRemoteTab))) {
+			let remoteBrowser = remoteService.getTabBrowserFromChild(aRemoteTab);
+			if (remoteBrowser.treeStyleTab.tabbarDNDObserver.isDraggingAllTabs(aRemoteTab)) {
 				w.close();
 			}
 			else {
 				let actionInfo = {
-						action : remoteTab.__treestyletab__toBeDuplicated ? this.kACTION_DUPLICATE : this.kACTION_IMPORT
+						action : aRemoteTab.__treestyletab__toBeDuplicated ? this.kACTION_DUPLICATE : this.kACTION_IMPORT
 					};
 
 				let b = this.browser;
 				setTimeout((function() {
 					try {
 						var blankTab = b.selectedTab;
-						b.treeStyleTab.tabbarDNDObserver.performDrop(actionInfo, remoteTab);
+						b.treeStyleTab.tabbarDNDObserver.performDrop(actionInfo, aRemoteTab);
 						setTimeout((function() {
 							try {
 								b.removeTab(blankTab);
-								remoteTab = null;
+								aRemoteTab = null;
 								remoteBrowser = null;
 								remoteWindow = null
 								remoteService = null;
diff --git a/skin/classic/treestyletab/group.css b/skin/classic/treestyletab/group.css
index 14d1d8d..44762f0 100644
--- a/skin/classic/treestyletab/group.css
+++ b/skin/classic/treestyletab/group.css
@@ -1,5 +1,4 @@
 @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
- at namespace xhtml url("http://www.w3.org/1999/xhtml");
 
 :root {
 	appearance: window;
@@ -66,10 +65,16 @@
 	-moz-box-flex: 1;
 }
 
-*|*.treestyletab-pseudo-tree-root-item {
+/* required to apply CSS multi columns */
+.treestyletab-pseudo-tree-root,
+.treestyletab-pseudo-tree-root vbox {
+	display: block;
+}
+
+.treestyletab-pseudo-tree-root-item {
 	display: none !important;
 }
-*|*.treestyletab-pseudo-tree-root-item +
-  *|*.treestyletab-pseudo-tree-children > *|* {
+.treestyletab-pseudo-tree-root-item +
+  .treestyletab-pseudo-tree-children > * {
 	margin-left: 0 !important;
 }
diff --git a/skin/classic/treestyletab/metal/base.css b/skin/classic/treestyletab/metal/base.css
index 5977ab5..d259246 100644
--- a/skin/classic/treestyletab/metal/base.css
+++ b/skin/classic/treestyletab/metal/base.css
@@ -40,23 +40,6 @@
 	border-width: 1px 0 0 !important;
 	padding: 0 !important;
 }
-/* these styles are required to cover narrow scrollbars. */
-.tabbrowser-tabs[treestyletab-mode="vertical"]
-  .scrollbox-innerbox {
-	background: linear-gradient(to left,
-	                            rgba(121,121,121,1) 0%,
-	                            rgba(121,121,121,1) 10%,
-	                            rgba(121,121,121,0) 11%,
-	                            rgba(121,121,121,0) 100%) !important;
-}
-.tabbrowser-tabs[treestyletab-tabbar-position="left"][treestyletab-invert-scrollbar="true"]
-  .scrollbox-innerbox {
-	background: linear-gradient(to right,
-	                            rgba(121,121,121,1) 0%,
-	                            rgba(121,121,121,1) 10%,
-	                            rgba(121,121,121,0) 11%,
-	                            rgba(121,121,121,0) 100%) !important;
-}
 
 .tabbrowser-tabs[treestyletab-mode="vertical"] {
 	appearance: none !important;
@@ -123,25 +106,6 @@ tabbrowser[treestyletab-tabbar-position="right"]
 	background: #acacac !important;
 	border-color: #797979 !important;
 }
-/* these styles are required to cover narrow scrollbars. */
-:root:-moz-window-inactive
-  .tabbrowser-tabs[treestyletab-mode="vertical"]
-  .scrollbox-innerbox {
-	background: linear-gradient(to left,
-	                            rgba(172,172,172,1) 0%,
-	                            rgba(172,172,172,1) 10%,
-	                            rgba(172,172,172,0) 11%,
-	                            rgba(172,172,172,0) 100%) !important;
-}
-:root:-moz-window-inactive
-  .tabbrowser-tabs[treestyletab-tabbar-position="left"][treestyletab-invert-scrollbar="true"]
-  .scrollbox-innerbox {
-	background: linear-gradient(to right,
-	                            rgba(172,172,172,1) 0%,
-	                            rgba(172,172,172,1) 10%,
-	                            rgba(172,172,172,0) 11%,
-	                            rgba(172,172,172,0) 100%) !important;
-}
 :root:-moz-window-inactive
   .tabbrowser-strip[treestyletab-mode="vertical"][treestyletab-style~="aero"],
 :root:-moz-window-inactive
diff --git a/skin/classic/treestyletab/sidebar/sidebar.css b/skin/classic/treestyletab/sidebar/sidebar.css
index 4ef8ba6..0dbaae5 100644
--- a/skin/classic/treestyletab/sidebar/sidebar.css
+++ b/skin/classic/treestyletab/sidebar/sidebar.css
@@ -20,53 +20,11 @@
 .tabbrowser-strip[treestyletab-mode="vertical"] {
 	background: #d4dde5 !important;
 }
-/* these styles are required to cover narrow scrollbars. */
-.tabbrowser-tabs[treestyletab-mode="vertical"]
-  .scrollbox-innerbox {
-	background: linear-gradient(to left,
-	                            rgba(212,221,229,1) 0%,
-	                            rgba(212,221,229,1) 10%,
-	                            rgba(212,221,229,0) 11%,
-	                            rgba(212,221,229,0) 100%) !important;
-}
-.tabbrowser-tabs[treestyletab-tabbar-position="left"][treestyletab-invert-scrollbar="true"]
-  .scrollbox-innerbox {
-	background: linear-gradient(to right,
-	                            rgba(212,221,229,1) 0%,
-	                            rgba(212,221,229,1) 10%,
-	                            rgba(212,221,229,0) 11%,
-	                            rgba(212,221,229,0) 100%) !important;
-}
-.tabbrowser-tabs[treestyletab-mode="vertical"]
-  .scrollbox-innerbox {
-	background: linear-gradient(to left,
-	                            rgba(212,221,229,1) 0%,
-	                            rgba(212,221,229,1) 10%,
-	                            rgba(212,221,229,0) 11%,
-	                            rgba(212,221,229,0) 100%) !important;
-}
-.tabbrowser-tabs[treestyletab-tabbar-position="left"][treestyletab-invert-scrollbar="true"]
-  .scrollbox-innerbox {
-	background: linear-gradient(to right,
-	                            rgba(212,221,229,1) 0%,
-	                            rgba(212,221,229,1) 10%,
-	                            rgba(212,221,229,0) 11%,
-	                            rgba(212,221,229,0) 100%) !important;
-}
 
 #main-window:-moz-window-inactive
   .tabbrowser-strip:not([treestyletab-style~="aero"])[treestyletab-mode="vertical"] {
 	background: #e8e8e8 !important;
 }
-#main-window:-moz-window-inactive
-  .tabbrowser-tabs:not([treestyletab-style~="aero"])[treestyletab-mode="vertical"]
-  .scrollbox-innerbox {
-	background: linear-gradient(to right,
-	                            rgba(232,232,232,1) 0%,
-	                            rgba(232,232,232,1) 10%,
-	                            rgba(232,232,232,0) 11%,
-	                            rgba(232,232,232,0) 100%) !important;
-}
 /* autohide */
 .treestyletab-tabbar-toolbar[treestyletab-tabbar-autohide][treestyletab-mode="vertical"]
   #treestyletab-tabbar-resizer-box {
diff --git a/skin/classic/treestyletab/square/base.css b/skin/classic/treestyletab/square/base.css
index 3d1487d..6d1adb2 100644
--- a/skin/classic/treestyletab/square/base.css
+++ b/skin/classic/treestyletab/square/base.css
@@ -17,23 +17,6 @@
 	-moz-appearance: none;
 	background: darkgray !important;
 }
-/* these styles are required to cover narrow scrollbars. */
-.tabbrowser-tabs[treestyletab-style~="border"][treestyletab-mode="vertical"]
-  .scrollbox-innerbox {
-	background: linear-gradient(to left,
-	                            rgba(169,169,169,1) 0%,
-	                            rgba(169,169,169,1) 10%,
-	                            rgba(169,169,169,0) 11%,
-	                            rgba(169,169,169,0) 100%) !important;
-}
-.tabbrowser-tabs[treestyletab-style~="border"][treestyletab-tabbar-position="left"][treestyletab-invert-scrollbar="true"]
-  .scrollbox-innerbox {
-	background: linear-gradient(to right,
-	                            rgba(169,169,169,1) 0%,
-	                            rgba(169,169,169,1) 10%,
-	                            rgba(169,169,169,0) 11%,
-	                            rgba(169,169,169,0) 100%) !important;
-}
 
 .tabbrowser-strip[treestyletab-mode="vertical"],
 .treestyletab-tabbar-toolbar[treestyletab-mode="vertical"],
diff --git a/skin/classic/treestyletab/square/vertigo.css b/skin/classic/treestyletab/square/vertigo.css
index 2d8ecb9..68bd86b 100644
--- a/skin/classic/treestyletab/square/vertigo.css
+++ b/skin/classic/treestyletab/square/vertigo.css
@@ -1,23 +1,5 @@
 @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
 
-/* these styles are required to cover narrow scrollbars. */
-.tabbrowser-tabs[treestyletab-mode="vertical"]
-  .scrollbox-innerbox {
-	background: linear-gradient(to left,
-	                            -moz-dialog 0%,
-	                            -moz-dialog 10%,
-	                            transparent 11%,
-	                            transparent 100%) !important;
-}
-.tabbrowser-tabs[treestyletab-tabbar-position="left"][treestyletab-invert-scrollbar="true"]
-  .scrollbox-innerbox {
-	background: linear-gradient(to right,
-	                            -moz-dialog 0%,
-	                            -moz-dialog 10%,
-	                            transparent 11%,
-	                            transparent 100%) !important;
-}
-
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"]),
 .tabbrowser-tabs:not([treestyletab-tabbar-position="top"])
   .tabbrowser-tab:not([pinned]),
diff --git a/treestyletab.update.rdf b/treestyletab.update.rdf
deleted file mode 100644
index 161072f..0000000
--- a/treestyletab.update.rdf
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-        xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-    <rdf:Description rdf:about="urn:mozilla:extension:treestyletab at piro.sakura.ne.jp">
-        <em:updates>
-            <rdf:Seq>
-                <rdf:li>
-                    <rdf:Description>
-                        <em:version>0.16.2016021602</em:version>
-                        <em:targetApplication>
-                            <rdf:Description>
-                                <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
-                                <em:minVersion>38.0</em:minVersion>
-                                <em:maxVersion>46.0a1</em:maxVersion>
-                                <em:updateLink>http://piro.sakura.ne.jp/xul/xpi/treestyletab.xpi?version=0.16.2016021602</em:updateLink>
-                                <em:updateHash>sha1:7fb200bbf69bc1f103df2630234183f9310511f2</em:updateHash>
-                            </rdf:Description>
-                        </em:targetApplication>
-                    </rdf:Description>
-                </rdf:li>
-            </rdf:Seq>
-        </em:updates>
-        <em:signature>
-            MIGRMAsGCSqGSIb3DQEBDQOBgQB/n6kVPTDADsmj0/gvaPxVLLLuUCYKmEiTOzMG
-            ujOVtb86gl7U7yRRkV71LVPAjxSmOc6oKhAVO5wcIua2DlmNsO1wg9xXGnVa4/ub
-            zFxNi1+bPAJtLn3rebkx0aoTSPSy42WLz7zr5YbpQqEyfb+RbHY7oWI5qierVCFD
-            U5iJ4g==
-        </em:signature>
-    </rdf:Description>
-</rdf:RDF>

-- 
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