diff --git a/.hgtags b/.hgtags
index 4d2aec76733f6e54253525e9b51ac7c7db8d1719..dd0dc4499ac4dbd9c5e8f87356dcb13cb4db4018 100755
--- a/.hgtags
+++ b/.hgtags
@@ -486,3 +486,5 @@ a9f2d0cb11f73b06858e6083bb50083becc3f9cd 3.7.9-release
 64799eb298834073a3e9992cd8d27c3cb9d30b10 3.7.11-release
 3b44ea8988cb902f0dda8429e8d5e4569e304532 3.7.12-release
 d86a7e1bc96d27b683f951d3701d5b7042158c68 3.7.13-release
+a7872554f3665588f1e8347d472cec3a299254b3 3.7.14-release
+3f11f57f2b4d15a9f987d12bc70ef507eefb5018 3.7.15-release
diff --git a/autobuild.xml b/autobuild.xml
index c813e7728862f1d063f7d32d098b029f003834e6..b6586b25b7d211849d1282f60d2922675c253474 100755
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -66,9 +66,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>69ae3b1c9cdb0ebc0d0e1ac8413e3eb7</string>
+              <string>8da309d24fb0bad8eaaa667fb04c6dc7</string>
               <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/SDL-1.2.14-linux-20110309.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-sdl-update/rev/290561/arch/Linux/installer/SDL-1.2.15-linux-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -138,9 +138,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>e6caaeea16131e1f2343ecd7765e3147</string>
+              <string>127c6c37726b11a0750cd4d3b920beff</string>
               <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.7.1-darwin-20110217.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-ares-update/rev/290399/arch/Darwin/installer/ares-1.10.0-darwin-20140529.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
@@ -150,9 +150,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>0745872db83d45f4ab3bdc697d98e264</string>
+              <string>92f6a454d90b5740a38fb68e369cc13e</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/223275/arch/Linux/installer/ares-1.7.1-linux-20110310.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-ares-update/rev/290399/arch/Linux/installer/ares-1.10.0-linux-20140529.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -162,9 +162,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>1dcec6babd249a2597114d4ac226c461</string>
+              <string>887c93c4075beefefa44b69fb2c0461e</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/220963/arch/CYGWIN/installer/ares-1.7.1-windows-20110211.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-ares-update/rev/290399/arch/CYGWIN/installer/ares-1.10.0-windows-20140529.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -186,9 +186,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>06dd7af75e1eb179aed54fd58d8688af</string>
+              <string>b57789bd22dd166aade4a35ec5d36fbb</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/270698/arch/Darwin/installer/boost-1.52.0-darwin-20130221.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-boost-update/rev/290566/arch/Darwin/installer/boost-1.55.0-darwin-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
@@ -198,9 +198,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>50c8b50b7cced52cc5656fb44e9b12cf</string>
+              <string>2f076eae296600a1b810ce375dc4b42d</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/270698/arch/Linux/installer/boost-1.52.0-linux-20130222.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-boost-update/rev/290566/arch/Linux/installer/boost-1.55.0-linux-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -210,9 +210,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>742fc9675b033df7f9c6f215ff250f6c</string>
+              <string>8af0500013739866a41cfc2ce90e4f4b</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/270698/arch/CYGWIN/installer/boost-1.52.0-windows-20130221.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-boost-update/rev/290566/arch/CYGWIN/installer/boost-1.55.0-windows-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -234,9 +234,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>480b27a0cb39a4adfcdeabef895de3e1</string>
+              <string>68dc13f49a686331df6f0128c5483da3</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/227230/arch/Darwin/installer/colladadom-2.2-darwin-20110420.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-colladadom-update/rev/290576/arch/Darwin/installer/colladadom-2.3-darwin-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
@@ -246,9 +246,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>be7321370b69b6d66938b82a9230a067</string>
+              <string>bdec5fe5fd008da4328f84115128ee61</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/233450/arch/Linux/installer/colladadom-2.2-linux-20110621.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-colladadom-update/rev/290576/arch/Linux/installer/colladadom-2.3-linux-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -258,9 +258,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>a9f548eb6f9aaf292508a8b09c7f2f73</string>
+              <string>ae103c9481be20cd6c035940832b2650</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/226584/arch/CYGWIN/installer/colladadom-2.2-windows-20110413.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-colladadom-update/rev/290576/arch/CYGWIN/installer/colladadom-2.3-windows-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -282,9 +282,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>f7d9b6a9c624364389b71209881f39de</string>
+              <string>f5a699c93beb1a854d0b51382b5cecc8</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-curl/rev/280289/arch/Darwin/installer/curl-7.24.0-darwin-20130826.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-curl-update/rev/290664/arch/Darwin/installer/curl-7.37.0-darwin-20140605.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
@@ -294,9 +294,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>58b7bf45383c1b1bc24afb303b1519c8</string>
+              <string>2bc285edffd0e55e0cd6290f39854a89</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-curl/rev/280289/arch/Linux/installer/curl-7.24.0-linux-20130826.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-curl-update/rev/290664/arch/Linux/installer/curl-7.37.0-linux-20140605.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -306,9 +306,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>8d9ccb0277a26bfe3f346c3c49ce4b58</string>
+              <string>8d3b197d7a114d2b688d2831a0a59757</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-curl/rev/280289/arch/CYGWIN/installer/curl-7.24.0-windows-20130826.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-curl-update/rev/290664/arch/CYGWIN/installer/curl-7.37.0-windows-20140605.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -546,9 +546,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>d8b08b657247566bde5fd853c7622478</string>
+              <string>2843c48e6c84a51e3d6aa05dace4c8c0</string>
               <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/fontconfig-2.8.0-linux-20110311.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-fontconfig-update/rev/290569/arch/Linux/installer/fontconfig-2.11.0-linux-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -594,9 +594,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>c0eacb6348e032fbc69cfdc4bd215ee4</string>
+              <string>71c8d80de052f0c2a49e4c7ddf1a56a0</string>
               <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.4.4-darwin-20110307.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-freetype-update/rev/290557/arch/Darwin/installer/freetype-2.4.4-darwin-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
@@ -606,9 +606,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>bd6f84f9fb3c2e68850676d06935373f</string>
+              <string>52f87a65cc61ec4b05721c079d015b19</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-freetype/rev/271684/arch/Linux/installer/freetype-2.4.4-linux-20130312.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-freetype-update/rev/290557/arch/Linux/installer/freetype-2.4.4-linux-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -618,9 +618,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>271349827b939406162ce42e42cd18e0</string>
+              <string>6e9fc0fe628a7c88f6f614bf3b0450ae</string>
               <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.4.4-windows-20110218.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-freetype-update/rev/290557/arch/CYGWIN/installer/freetype-2.4.4-windows-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -747,14 +747,14 @@
           </map>
         </map>
       </map>
-      <key>google_breakpad</key>
+      <key>gmock</key>
       <map>
         <key>license</key>
         <string>bsd</string>
         <key>license_file</key>
-        <string>LICENSES/google_breakpad.txt</string>
+        <string>LICENSES/gmock.txt</string>
         <key>name</key>
-        <string>google_breakpad</string>
+        <string>gmock</string>
         <key>platforms</key>
         <map>
           <key>darwin</key>
@@ -762,9 +762,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>aff5566e04003de0383941981198e04e</string>
+              <string>36b0ea1a8be38f5749a7b13536b871ab</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/273073/arch/Darwin/installer/google_breakpad-0.0.0-rev1099-darwin-20130329.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-google-mock-update/rev/290574/arch/Darwin/installer/gmock-1.7.0-darwin-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
@@ -774,9 +774,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>52257e5eb166a0b69c9c0c38f6e1920e</string>
+              <string>3de99704847b34c7acccf5ab87222f6c</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/273079/arch/Linux/installer/google_breakpad-0.0.0-rev1099-linux-20130329.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-google-mock-update/rev/290574/arch/Linux/installer/gmock-1.7.0-linux-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -786,23 +786,23 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>a1e519d08c507c12f9d412b2ae8328c8</string>
+              <string>5d91c1d03780aa26bcd5481145ee9e86</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/279804/arch/CYGWIN/installer/google_breakpad-0.0.0-rev1099-windows-20130813.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-google-mock-update/rev/290574/arch/CYGWIN/installer/gmock-1.7.0-windows-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
           </map>
         </map>
       </map>
-      <key>googlemock</key>
+      <key>google_breakpad</key>
       <map>
         <key>license</key>
         <string>bsd</string>
         <key>license_file</key>
-        <string>LICENSES/googlemock.txt</string>
+        <string>LICENSES/google_breakpad.txt</string>
         <key>name</key>
-        <string>googlemock</string>
+        <string>google_breakpad</string>
         <key>platforms</key>
         <map>
           <key>darwin</key>
@@ -810,9 +810,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>886ee428f058005ab7f90f61784ec9d9</string>
+              <string>aff5566e04003de0383941981198e04e</string>
               <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-darwin-20101004.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/273073/arch/Darwin/installer/google_breakpad-0.0.0-rev1099-darwin-20130329.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
@@ -822,9 +822,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>782ca04e56d8eab755adcae297cafa7c</string>
+              <string>52257e5eb166a0b69c9c0c38f6e1920e</string>
               <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-linux-20101001.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/273079/arch/Linux/installer/google_breakpad-0.0.0-rev1099-linux-20130329.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -834,9 +834,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>98994d5b0b4b3d43be22aa6a5c36e6fa</string>
+              <string>a1e519d08c507c12f9d412b2ae8328c8</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-mock-graham/rev/272961/arch/CYGWIN/installer/gmock-1.6.0-windows-20130327.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/279804/arch/CYGWIN/installer/google_breakpad-0.0.0-rev1099-windows-20130813.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -1194,9 +1194,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>6fe1adf12d98bce9111f60ee762007b9</string>
+              <string>80a84bbbb363e1a38f39bb6be8a3f166</string>
               <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.5.1-darwin-20110222.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libpng-update/rev/290558/arch/Darwin/installer/libpng-1.6.8-darwin-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
@@ -1206,9 +1206,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>0681ab7e1988dfdbdad7dd9edb7760ee</string>
+              <string>3368a25b361c22a03f7ec7e0f8d5ff9d</string>
               <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.5.1-linux-20110223.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libpng-update/rev/290558/arch/Linux/installer/libpng-1.6.8-linux-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -1218,9 +1218,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>f194ba857ca8dd86483a3ef24535d0db</string>
+              <string>596f4798f90941817b1ca5009c24d16a</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-libpng/rev/226532/arch/CYGWIN/installer/libpng-1.5.1-windows-20110413.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libpng-update/rev/290558/arch/CYGWIN/installer/libpng-1.6.8-windows-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -1261,18 +1261,42 @@
         <string>libxml2</string>
         <key>platforms</key>
         <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>4a5880b8235beb5ca21f1e252a46e342</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libxml-update/rev/290562/arch/Darwin/installer/libxml2-2.9.1-darwin-20140602.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
           <key>linux</key>
           <map>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>fd34e3e818ad7dd26add1f05e6069c11</string>
+              <string>7eb90f075730f8d7d176f8fb7bad5ef5</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-libxml/rev/282218/arch/Linux/installer/libxml2-2.7.8-linux-20131009.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libxml-update/rev/290562/arch/Linux/installer/libxml2-2.9.1-linux-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
           </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>ba20e2634b4c249a7064620d135f7972</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libxml-update/rev/290562/arch/CYGWIN/installer/libxml2-2.9.1-windows-20140602.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
         </map>
       </map>
       <key>llappearanceutility-source</key>
@@ -1420,9 +1444,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>4a98d727561cd1f4ac5ee02907411df1</string>
+              <string>79afb464255be2be7c02fdfac10bcd5c</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/250147/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20120228.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-llqtwebkit2/rev/290663/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20140605.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
@@ -1432,9 +1456,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>f50e5f0cc880c55b3f0f7e67dc8f7221</string>
+              <string>090190a8dd80efe1f0933c7ed307e6f1</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/250147/arch/Linux/installer/llqtwebkit-4.7.1-linux-20120228.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-llqtwebkit2/rev/290663/arch/Linux/installer/llqtwebkit-4.7.1-linux-20140605.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -1444,9 +1468,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>5e3cd6af397e853a963a6de40d440ff4</string>
+              <string>650f2a30a83eacde238fcc87ff161190</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/250147/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20120228.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-llqtwebkit2/rev/290663/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20140605.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -1597,36 +1621,26 @@
           </map>
         </map>
       </map>
-      <key>openSSL</key>
+      <key>openal_soft</key>
       <map>
         <key>license</key>
-        <string>openSSL</string>
+        <string>lgpl</string>
         <key>license_file</key>
-        <string>LICENSES/openssl.txt</string>
+        <string>LICENSES/OPENAL.txt</string>
         <key>name</key>
-        <string>openSSL</string>
+        <string>openal_soft</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>facee34b8bd57ad602157e65a5af1a49</string>
-              <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openssl-0.9.8q-darwin-20110211.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
           <key>linux</key>
           <map>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>3d40be8566fa4b9df9a38e2a0f9ea467</string>
+              <string>fccdca18a950ac9363c6fb39118b80e1</string>
+              <key>hash_algorithm</key>
+              <string>md5</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/226882/arch/Linux/installer/openssl-1.0.0d-linux-20110418.tar.bz2</string>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-3ad86a1c-linux-20110114.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -1636,35 +1650,47 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>774c7f0a0312bee3054757a623e227bc</string>
+              <string>04df406f3e5d04cf176660bdac66c3a1</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/220986/arch/CYGWIN/installer/openssl-0.9.8q-windows-20110211.tar.bz2</string>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-1.12.854-1.1.0-windows-20110301.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
           </map>
         </map>
+        <key>version</key>
+        <string>3ad86a1c</string>
       </map>
-      <key>openal_soft</key>
+      <key>openjpeg</key>
       <map>
         <key>license</key>
-        <string>lgpl</string>
+        <string>openjpeg</string>
         <key>license_file</key>
-        <string>LICENSES/OPENAL.txt</string>
+        <string>LICENSES/openjpeg.txt</string>
         <key>name</key>
-        <string>openal_soft</string>
+        <string>openjpeg</string>
         <key>platforms</key>
         <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>4be51c7cca7d84831e30b63279df7ae5</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-darwin-20110302.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
           <key>linux</key>
           <map>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>fccdca18a950ac9363c6fb39118b80e1</string>
-              <key>hash_algorithm</key>
-              <string>md5</string>
+              <string>fb2382014c79e0049746e4e29bd834f9</string>
               <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-3ad86a1c-linux-20110114.tar.bz2</string>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-linux-20110314.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -1674,25 +1700,23 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>04df406f3e5d04cf176660bdac66c3a1</string>
+              <string>ca5765af55f798724d601720afdf6953</string>
               <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-1.12.854-1.1.0-windows-20110301.tar.bz2</string>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-windows-20110302.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
           </map>
         </map>
-        <key>version</key>
-        <string>3ad86a1c</string>
       </map>
-      <key>openjpeg</key>
+      <key>openssl</key>
       <map>
         <key>license</key>
-        <string>openjpeg</string>
+        <string>openssl</string>
         <key>license_file</key>
-        <string>LICENSES/openjpeg.txt</string>
+        <string>LICENSES/openssl.txt</string>
         <key>name</key>
-        <string>openjpeg</string>
+        <string>openssl</string>
         <key>platforms</key>
         <map>
           <key>darwin</key>
@@ -1700,9 +1724,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>4be51c7cca7d84831e30b63279df7ae5</string>
+              <string>4db126327bbb125ea2490c79c73103bf</string>
               <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-darwin-20110302.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-openssl-update/rev/290662/arch/Darwin/installer/openssl-1.0.1h-darwin-20140605.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
@@ -1712,9 +1736,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>fb2382014c79e0049746e4e29bd834f9</string>
+              <string>0665c18f8cdbe2f90cb0a2f088cfe1a6</string>
               <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-linux-20110314.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-openssl-update/rev/290662/arch/Linux/installer/openssl-1.0.1h-linux-20140605.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -1724,9 +1748,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>ca5765af55f798724d601720afdf6953</string>
+              <string>138997e1a73c65525d45c00f43f08010</string>
               <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-windows-20110302.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-openssl-update/rev/290662/arch/CYGWIN/installer/openssl-1.0.1h-windows-20140605.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -1748,9 +1772,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>a8e74694a0f4248228c13c845ed0a6f8</string>
+              <string>af0d38a4c56b52c4df40a4ff0d51efef</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-pcre/rev/228822/arch/Darwin/installer/pcre-7.6-darwin-20110504.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-pcre-update/rev/290406/arch/Darwin/installer/pcre-8.35-darwin-20140529.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
@@ -1760,9 +1784,21 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>bb0abe962b3b8208ed2dab0424aab33d</string>
+              <string>5e6368d39b95f2c0d5162dac2c17c67f</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-pcre-update/rev/290406/arch/Linux/installer/pcre-8.35-linux-20140530.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>9250f74fed826ad1b8700229e964519d</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-pcre/rev/228822/arch/Linux/installer/pcre-7.6-linux-20110504.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-pcre-update/rev/290406/arch/CYGWIN/installer/pcre-8.35-windows-20140529.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -1928,9 +1964,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>49b8de20f3bb43537f51311894a72de1</string>
+              <string>6658071e3b54b1dd5f5279227aff402a</string>
               <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.2.5-darwin-20110211.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-zlib-update/rev/290556/arch/Darwin/installer/zlib-1.2.8-darwin-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
@@ -1940,9 +1976,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>7b4cf3aa2c04937d0a20761516587896</string>
+              <string>63a62bb3cbef2aad3cca49cb6f2d0aeb</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-zlib/rev/223739/arch/Linux/installer/zlib-1.2.5-linux-20110314.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-zlib-update/rev/290556/arch/Linux/installer/zlib-1.2.8-linux-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -1952,9 +1988,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>5852192646681817fc3c3a8c95e91c1e</string>
+              <string>ab45a628e22a495814e806ce46081806</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-zlib/rev/220983/arch/CYGWIN/installer/zlib-1.2.5-windows-20110211.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-zlib-update/rev/290556/arch/CYGWIN/installer/zlib-1.2.8-windows-20140602.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
diff --git a/doc/contributions.txt b/doc/contributions.txt
index 7e8ab46b1a43b53b9fa8fb78c2a51e91e97ae5e8..2d27562e37a5cd6413b75d880fb80e464b004a8b 100755
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -323,6 +323,7 @@ Cinder Roxley
     STORM-1951
     STORM-2035
     STORM-2036
+    STORM-2037
 Clara Young
 Coaldust Numbers
     VWR-1095
@@ -712,6 +713,9 @@ Jonathan Yap
 	STORM-1986
 	STORM-1981
 	STORM-2015
+	STORM-2031
+	STORM-2030
+	STORM-2034
 	STORM-2018
 Kadah Coba
 	STORM-1060
@@ -990,6 +994,38 @@ Nicky Perian
 	STORM-1090
 	STORM-1828
 Nicoladie Gymnast
+NiranV Dean
+    STORM-2040
+    STORM-2042
+    STORM-2043
+    STORM-2044
+    STORM-2045
+    STORM-2046
+    STORM-2047
+    STORM-2048
+    STORM-2049
+    STORM-2050
+    STORM-2051
+    STORM-2052
+    STORM-2057
+    STORM-2058
+    STORM-2059
+    STORM-2060
+    STORM-2061
+    STORM-2063
+    STORM-2065
+    STORM-2066
+    STORM-2068
+    STORM-2073
+    STORM-2076
+    BUG-372
+    BUG-1179
+    BUG-6835
+    BUG-6837
+    BUG-6839
+    BUG-6840
+    BUG-6958
+    BUG-7020
 Nounouch Hapmouche
 	VWR-238
 Ollie Kubrick
@@ -1183,6 +1219,7 @@ Sovereign Engineer
     OPEN-189
     STORM-1972
     OPEN-195
+    OPEN-217
 SpacedOut Frye
 	VWR-34
 	VWR-45
@@ -1358,6 +1395,7 @@ Whirly Fizzle
 	VWR-29543
 	MAINT-873
 	STORM-1930
+	BUG-6659
 Whoops Babii
 	VWR-631
 	VWR-1640
diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt
index 410d25ad972a7b90ff98b044eff8ff55fc83baed..24ea59ca49b2cc144908f8c11227564383c9e9be 100755
--- a/indra/CMakeLists.txt
+++ b/indra/CMakeLists.txt
@@ -71,7 +71,6 @@ add_subdirectory(${LIBS_OPEN_PREFIX}media_plugins)
 
 if (LINUX)
   add_subdirectory(${VIEWER_PREFIX}linux_crash_logger)
-  add_subdirectory(${VIEWER_PREFIX}linux_updater)
   if (INSTALL_PROPRIETARY)
       include(LLAppearanceUtility)
       add_subdirectory(${LLAPPEARANCEUTILITY_SRC_DIR} ${LLAPPEARANCEUTILITY_BIN_DIR})
@@ -86,9 +85,8 @@ elseif (WINDOWS)
   if (EXISTS ${VIEWER_DIR}win_setup)
     add_subdirectory(${VIEWER_DIR}win_setup)
   endif (EXISTS ${VIEWER_DIR}win_setup)
-  add_subdirectory(${VIEWER_PREFIX}win_updater)
-  # add_dependencies(viewer windows-updater windows-setup windows-crash-logger)
-  add_dependencies(viewer windows-updater windows-crash-logger)
+  # add_dependencies(viewer windows-setup windows-crash-logger)
+  add_dependencies(viewer windows-crash-logger)
 elseif (SOLARIS)
   add_subdirectory(solaris_crash_logger)
   add_dependencies(viewer solaris-crash-logger)
diff --git a/indra/cmake/00-COMPILE-LINK-RUN.txt b/indra/cmake/00-COMPILE-LINK-RUN.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d08cc2dc0cf49b67fdc0631f62b2ffb890fbcfaa
--- /dev/null
+++ b/indra/cmake/00-COMPILE-LINK-RUN.txt
@@ -0,0 +1,344 @@
+
+    A short guide to compiling, linking, running and debugging issues
+    in the viewer and its packaged libraries.
+
+Introduction
+
+    A recent pass through some third-party libraries resulted in the
+    collection of a lot of information about how things should and
+    shouldn't be built in the viewer.  Some of that is presented below
+    with hints and rules about doing things well.  What's presented is
+    a guideline only.  Not all suggestions are hard rules and you'll
+    find exceptions all over.  Some exceptions arise from solid
+    reasoning, others may be legacy that hasn't been re-examined.
+
+    Use good engineering judgement when applying this information.
+
+Compilation
+
+  Windows Targets
+
+    Significant compilation flags and defines follow:
+
+    ----------------------------------------------------------------------------
+    Option                Release          RelWithDebInfo          Debug
+    ----------------------------------------------------------------------------
+    wchar_t             /Zc:wchar_t-             "                   "
+    RTL type               /MD                  /MD                 /MDd
+    FLoating Point       /fp:fast                "                   "
+    Debug Info        /Zi (app/dll), /Z7 (lib)   "                   "
+    Optimizer           /O2 /Ob2 /GR       /Od /Ob0 /GR           /Od /GR
+    Incr. Link      /INCREMENTAL:NO        /INCREMENTAL       /INCREMENTAL:NO
+    Debug                /DEBUG               /DEBUG              /DEBUG
+                         /OPT:REF
+    Ignore Libs          LIBCMT               LIBCMT      LIBCMT;LIBCMTD;MSVCRT
+    Alignment           Default                  "                   "
+
+    Defines        WIN32                         "                   "
+                   _WINDOWS                      "                   "
+                   LL_RELEASE=1          LL_RELEASE=1               n/a
+                   LL_RELEASE_FOR_DOWNLOAD=1    n/a                 n/a
+                   NDEBUG                NDEBUG               _DEBUG
+                           n/a                  n/a           LL_DEBUG=1
+                           n/a           LL_RELEASE_WITH_\          n/a
+                                         DEBUG_INFO=1
+                           n/a                  n/a           _SCL_SECURE_NO_WARNINGS=1
+                   _SECURE_STL=0         _SECURE_STL=0        _SECURE_STL=0
+                   _HAS_ITERATOR_DEBUGGING=0    n/a                 n/a
+                   LL_WINDOWS=1                  "                   "
+                   UNICODE                       "                   "
+                   _UNICODE                      "                   "
+                   WINVER=0x0501                 "                   "
+                   _WIN32_WINNT=0x0501           "                   "
+                   LL_OS_DRAGDROP_ENABLED=1      "                   "
+                   CARES_STATICLIB               "                   "
+                   LIB_NDOF=1                    "                   "
+
+    ----------------------------------------------------------------------------
+    Notes:
+
+    1.  /Zc:wchar_t-.  Not certain where this comes from.  It may be
+    due to a default set of compilation flags in Qt 4.X that then
+    propagates outward.  In Qt 5.X, this setting is flipped back to
+    default (wchar_t is a built-in).  Other options for dealing with
+    this include:
+
+    http://msdn.microsoft.com/en-us/library/dh8che7s%28v=vs.110%29.aspx
+
+    Recommend trying to stay with /Zc:wchar_t (the default) when
+    adding libraries.  If incompatible, you'll typically get some
+    missing ostream '<<' operators or something similar in the stream
+    headers.
+
+    2.  /Z7 (VC 7.0 compatibility symbols) gives us debug information
+    in the static libraries we build.  Otherwise builds generate
+    vc100.pdb files all over the place which generally aren't useful.
+    DLL's and .EXEs are to get /Zi or /ZI with separate .PDB files.
+    These .PDB files can then be packaged up in symbol tarballs for
+    the crash dump analyzer or used in debugging.  There are issues here
+    for VS 2013 (see below).
+
+
+  Mac Targets
+
+    Fairly straightforward, optimization level is easily changed (may
+    be little or negative gain for -O3 and RelWithDebInfo should be
+    kicked up to 1 or 2.  Boost debug symbols to dwarf-2 with a goal
+    of dwarf-2 in separate dSYM file when building .dylibs and
+    executables.
+
+    ----------------------------------------------------------------------------
+    Option                Release          RelWithDebInfo          Debug
+    ----------------------------------------------------------------------------
+    Strip Debug Symbols     On                   "                   "
+    During Copy
+
+    Generate Debug Syms     On                   "                   "
+
+    Level Debug Syms    -gdwarf-2                "                   "
+
+    Optimization           -O3                  -O0                 -O0
+
+    PIC                -fPIC -DPIC               "                   "
+
+    Defines        LL_RELEASE=1          LL_RELEASE=1               n/a
+                   LL_RELEASE_FOR_DOWNLOAD=1    n/a                 n/a
+                   NDEBUG                NDEBUG               _DEBUG
+                           n/a                  n/a           LL_DEBUG=1
+                           n/a           LL_RELEASE_WITH_\          n/a
+                                         DEBUG_INFO=1
+                   LL_DARWIN=1                   "                   "
+                   LL_OS_DRAGDROP_ENABLED=1      "                   "
+                   CARES_STATICLIB               "                   "
+                   LIB_NDOF=1                    "                   "
+
+    ----------------------------------------------------------------------------
+    Notes:
+
+    1.  We’re also building dylibs in a somewhat unusual way.  They’re
+    currently being generated with a link path of
+    ‘@executable_path/../Resources/<library>’.  If we were to follow
+    the recommendations in dyld’s man page, we’d instead reference
+    ‘@loader_path/<library>’, use -rpath on the executable link
+    (pointing to the ‘Resources’ subdir of the main executable), and
+    be able to avoid some symlinking in the .app tree.
+
+    2.  Use the -headerpad_max_install_names link option on all .dylibs.
+
+
+  Linux Targets
+
+    Not much variety here.
+
+    ----------------------------------------------------------------------------
+    Option                Release          RelWithDebInfo          Debug
+    ----------------------------------------------------------------------------
+    Debug Level     -g (-g0/1 better?)          -g                  -g
+    During Copy
+
+    Optimization            -O2                 -O0                 -O0
+
+    PIC                    -fPIC                 "                   "
+    ----------------------------------------------------------------------------
+    Notes:
+
+
+Linking
+
+    The library update work has generally moved in the direction of
+    preferring static libraries over dynamic (Qt4 being the notable
+    exception).  It also mostly eliminated the extremely bad practice
+    of having multiple versions of a library built into an image.
+
+    How bad was it?  Very.  Appalling.  A nightmare.  On Windows, at
+    least four versions of zlib (1.2.3, 1.2.5, 1.2.6, unknown), three
+    versions of Boost (1.45, 1.48, 1.52), two versions of OpenSSL
+    (0.9.8q, 1.0.0g) and three different builds of libexpat
+    2.0.5/1.5.2 were used.  Mac was worse with five builds or versions
+    of zlib, two of PCRE, two of c-ares, and three of OpenSSL.  Linux
+    topped that by adding two builds of libpng.
+
+    DO NOT ALLOW THIS TO HAPPEN AGAIN.  It isn't enough to update a
+    library and then stuff a new triplet of S3 URLs into the viewer's
+    autobuild.xml.  If you update a library you MUST:
+
+    *  Update the autobuild.xml of ALL consumers of the library.  In
+    the case of zlib, that meant updating freetype, libpng, openssl,
+    libxml2, fontconfig, curl, Boost, SDL, llqtwebkit, google-mock and
+    colladadom.
+
+    *  Confirm by test and observation that the consumers actually use
+    your library rather than 'call home to mother' and find
+    system-supplied versions of your library.  This may consist of
+    watching configuration scripts, probing with ldd/depends/otool,
+    pulling text out of binaries with 'strings'.  The previously-
+    mentioned libraries all have a README.Linden file that gives
+    examples specific to the consumer library.
+
+    *  DO NOT RE-EXPORT LIBRARIES.  Colladadom was the worst offender
+    of this rule.  As a shared library, it was re-exporting part, but
+    not all, of Boost filesystem and system, some zlib, some PCRE,
+    some libxml2 and minizip.  This meant that depending upon link-
+    time and run-time symbol resolution, data constructed with one
+    version of a library might be processed by a method built in a
+    second, incompatible version of the library.  Switching colladadom
+    to a static library ended the re-export problem.
+
+    *  Preventing re-export is not sufficient.  other libraries will
+    still be shipped as shared and they can still have Singleton and
+    Fragile Base Class issues.  A DLL may be built with a static
+    archive of a library that has global data.  That same static
+    archive might be linked into the application proper.  An object
+    created with a method in the DLL may pass into a method in the
+    application where the archive's global data has a second instance
+    and no knowledge of the object.  This is a failure due to an
+    assumption of Singleton global data which leads to some kind of
+    failure.  This is the same effect as when, in Windows, both MSVCRT
+    and MSVCRTD get activated in a program.  If you're lucky, some
+    asserts fail in that case having to do with file handle global
+    data.
+
+
+Running
+
+    Windows Debug Build.  Seems to have been rendered nearly useless
+    by having the LL_CHECK_MEMORY define in llmemory.h calling
+    _CrtCheckMemory().  Viewer is almost useful disabling this in
+    llvoavatar code alone but not quite.
+
+
+Futures
+
+  Static Versus Dynamic Libraries
+
+    One solution to the above linking problems is the use of static
+    libraries for everything.  Single version, singleton instancing of
+    data, etc.  But it's not the 1950's and we're not running our
+    applications on bare metal.  Every platform comes with 100s of
+    libraries waiting to interfere with operations by breaking the
+    single-version and singleton-data assumption.
+
+    Additionally, there are libraries that simply expect to be built
+    into shared libraries.  Qt4 is one such.  The version we're using
+    now, 4.7.1, is actually trying to disable both Webkit and plugin
+    modules because we're building it statically on Mac and Linux.
+    It's only because of configuration bugs that we're getting the
+    functionality out of it that we want.
+
+    With enough libraries and a single, global namespace, eventually
+    there will be collisions and there may not be a warning.  All it
+    takes is two programmers who thought that 'FILE * open_file(const
+    char *);' was a safe signature to use between compilation units in
+    their libraries and glorious debugging sessions are in your
+    future.  Having debugged it, you will now become the proud owner
+    of a one-off version of one of those libraries that uses a special
+    symbol prefix which you will be maintaining forever.
+
+    Lastly, we have some binary blobs that we must use as delivered.
+    Executables can be isolated at run-time if necessary.  Shared
+    libraries are a different problem.  They may bring their own
+    library dependencies that affect link- and run-time symbol
+    resolution and they'll impose that on us according to platform
+    rules.
+
+    So, what to do?  My natural bias for large software is to use
+    shared libraries for everything.  It's a path to single-version
+    and singleton data and isolates namespaces and prevents
+    interactions.  It also has some field serviceability benefits if
+    you need to debug some bizarre problem a user has.
+
+    But there's a local preference for static.  Here, my
+    rules-of-thumb are:
+
+    * Static library used by default.
+
+    * Shared library where the library must be built shared.
+
+    * Shared library if that is the only means to enforce the
+      single-version and singleton-data requirements.
+
+    * Shared library *on a case-by-case basis* if the library is also
+      provided by the platform and some benefit is plausible.  (An
+      example of this is freetype/fontconfig on Linux.  The .so
+      versions we build with, and incompletely ship, are inferior in
+      behavior to the platform libraries.  By being shared libraries,
+      the platform-supplied option is available to all Linux users.)
+
+    In all cases, beware of cmake which appears to collapse and move
+    library references in links.  This can drastically affect symbol
+    resolution when there are multiple sources for a symbol.
+
+  General
+
+    VS 2013.  The /Z7 flag is rumored to be somewhat broken in 2013.
+    But it also sounds like there are explicit controls to name .PDB
+    files associated with static archives.  That would make this an
+    ideal time to switch to /Zi or /ZI everywhere with explicit naming
+    and bring all the .PDBs together.
+
+    The embedded browser technology (e.g. Qt4 with Webkit) is the
+    800-pound gorilla in the viewer.  When starting any major work,
+    decide what changes you need here as those changes will propagate
+    outwards forcing many other decisions (cf: /Zc:wchar_t- flag).
+
+    The current package structure (./include, ./lib/release,
+    ./lib/debug, etc.) really works against the conventions used by
+    configure-like programs.  I wasted a lot of time getting each
+    library to work with our structure without having to go back to
+    automake/autoconf.  For Linux and Mac (and even for Windows), a
+    structure like the following where each grouping is optional would
+    probably save some work:
+
+        ./debug/bin
+               /include
+               /lib
+        ./debug/shared/bin
+                      /include
+                      /lib
+        ./debug/static/bin
+                      /include
+                      /lib
+        ./release/bin
+                 /include
+                 /lib
+        ...
+
+    In zlib and openssl and in a few of the libraries that consume
+    them, I experimented with packaging both static and shared
+    libraries and then having the consumer library move the unwanted
+    pieces out of the way to use the library type of choice (see
+    restore_dylibs() and restore_sos() functions).  It was a bit fussy
+    and simplicity and clarity are the keys to maintaining libraries
+    in the future.
+
+    But it did suggest another approach.  The idea is that every build
+    pre-stages inputs.  Before anything is built, package pieces are
+    copied or symlinked from the 'stage/packages' area to the
+    'stage/input' area.  Builds then proceed with a single set of
+    -I/-L options for the dependencies.  And products are built and
+    installed in a similar output staging structure for the next
+    consumer:
+
+        stage/packages/<package>/[above structure]
+        stage/input/{bin,include,lib}
+        stage/<package>/[above structure]
+
+    Next library project.  I'd recommend working on the related set of
+    libexpat, apr, aprutil, xmlrpc-epi.  We know libexpat has some
+    updates that should improve stability.  Libapr consumes it and it
+    could use some /Z7 flag work to get rid of some 1000's of PDB
+    warnings and improve our debug symbols.
+
+    Miscellany to be sorted out:
+
+    * The packaging of libfreetype and libfontconfig on Linux.
+    Determine what the right thing is, do it.
+
+    * Maybe do something with ICU4C.  Qt5 will require it and a number
+    of our packages can consume it typically replacing iconv or some
+    other library.  But it is a huge bolus of static data.  It can be
+    trimmed, but still.
+
+    * Revisit openssl.  Package as a shared library?  Replace with
+    LibreSSL when available?  Start using platform-supplied crypto?
+
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index 6a0f7a214c6d877ce1ea83eb71b1425895fbbe55..52b0f4e8b404904bcea4ccd671ee59bf5e701716 100755
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -62,7 +62,7 @@ if (WINDOWS)
   add_definitions(
       /DLL_WINDOWS=1
       /DNOMINMAX
-      /DDOM_DYNAMIC
+#      /DDOM_DYNAMIC            # For shared library colladadom
       /DUNICODE
       /D_UNICODE 
       /GS
diff --git a/indra/cmake/Boost.cmake b/indra/cmake/Boost.cmake
index 50ac27d402065e0151f548e63ff2c67abbd7758e..25e54b7cbd73e169ca5c0bc7b9551100c7737c2e 100755
--- a/indra/cmake/Boost.cmake
+++ b/indra/cmake/Boost.cmake
@@ -8,6 +8,7 @@ if (USESYSTEMLIBS)
   include(FindBoost)
 
   set(BOOST_CONTEXT_LIBRARY boost_context-mt)
+  set(BOOST_COROUTINE_LIBRARY boost_coroutine-mt)
   set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt)
   set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt)
   set(BOOST_REGEX_LIBRARY boost_regex-mt)
@@ -17,10 +18,11 @@ if (USESYSTEMLIBS)
 else (USESYSTEMLIBS)
   use_prebuilt_binary(boost)
   set(Boost_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
-  set(BOOST_VERSION "1.52")
+  set(BOOST_VERSION "1.55")
 
   if (WINDOWS)
     if(MSVC80)
+      # This should be obsolete at this point
       set(BOOST_CONTEXT_LIBRARY 
           optimized libboost_context-vc80-mt-${BOOST_VERSION}
           debug libboost_context-vc80-mt-gd-${BOOST_VERSION})
@@ -47,6 +49,9 @@ else (USESYSTEMLIBS)
       set(BOOST_CONTEXT_LIBRARY 
           optimized libboost_context-mt
           debug libboost_context-mt-gd)
+      set(BOOST_COROUTINE_LIBRARY 
+          optimized libboost_coroutine-mt
+          debug libboost_coroutine-mt-gd)
       set(BOOST_FILESYSTEM_LIBRARY 
           optimized libboost_filesystem-mt
           debug libboost_filesystem-mt-gd)
@@ -70,6 +75,9 @@ else (USESYSTEMLIBS)
     set(BOOST_CONTEXT_LIBRARY
         optimized boost_context-mt
         debug boost_context-mt-d)
+    set(BOOST_COROUTINE_LIBRARY
+        optimized boost_coroutine-mt
+        debug boost_coroutine-mt-d)
     set(BOOST_FILESYSTEM_LIBRARY
         optimized boost_filesystem-mt
         debug boost_filesystem-mt-d)
@@ -92,6 +100,9 @@ else (USESYSTEMLIBS)
     set(BOOST_CONTEXT_LIBRARY
         optimized boost_context-mt
         debug boost_context-mt-d)
+    set(BOOST_COROUTINE_LIBRARY
+        optimized boost_coroutine-mt
+        debug boost_coroutine-mt-d)
     set(BOOST_FILESYSTEM_LIBRARY
         optimized boost_filesystem-mt
         debug boost_filesystem-mt-d)
diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
index 4f1b6640c2466b6052ebc9e7554bdc3a6e62b688..28202f85d648f036e7689447f3f4ea8649c3647b 100755
--- a/indra/cmake/Copy3rdPartyLibs.cmake
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -40,7 +40,6 @@ if(WINDOWS)
         libapriconv-1.dll
         ssleay32.dll
         libeay32.dll
-        libcollada14dom22-d.dll
         glod.dll    
         libhunspell.dll
         )
@@ -53,7 +52,6 @@ if(WINDOWS)
         libapriconv-1.dll
         ssleay32.dll
         libeay32.dll
-        libcollada14dom22.dll
         glod.dll
         libhunspell.dll
         )
@@ -213,15 +211,12 @@ elseif(DARWIN)
         libapr-1.dylib
         libaprutil-1.0.dylib
         libaprutil-1.dylib
+        libexception_handler.dylib
         libexpat.1.5.2.dylib
         libexpat.dylib
         libGLOD.dylib
-        libllqtwebkit.dylib
-        libminizip.a
-        libndofdev.dylib
         libhunspell-1.3.0.dylib
-        libexception_handler.dylib
-        libcollada14dom.dylib
+        libndofdev.dylib
        )
 
     if (FMODEX)
@@ -259,35 +254,21 @@ elseif(LINUX)
         libapr-1.so.0
         libaprutil-1.so.0
         libatk-1.0.so
-        libboost_context-mt.so.${BOOST_VERSION}.0
-        libboost_filesystem-mt.so.${BOOST_VERSION}.0
-        libboost_program_options-mt.so.${BOOST_VERSION}.0
-        libboost_regex-mt.so.${BOOST_VERSION}.0
-        libboost_signals-mt.so.${BOOST_VERSION}.0
-        libboost_system-mt.so.${BOOST_VERSION}.0
-        libboost_thread-mt.so.${BOOST_VERSION}.0
-        libcollada14dom.so
-        libcrypto.so.1.0.0
         libdb-5.1.so
         libexpat.so
         libexpat.so.1
+        libfreetype.so.6.6.2
         libfreetype.so.6
         libGLOD.so
-        libgmock_main.so
-        libgmock.so.0
         libgmodule-2.0.so
         libgobject-2.0.so
-        libgtest_main.so
-        libgtest.so.0
         libhunspell-1.3.so.0.0.0
-        libminizip.so
         libopenal.so
         libopenjpeg.so
-        libssl.so
         libuuid.so.16
         libuuid.so.16.0.22
-        libssl.so.1.0.0
-        libfontconfig.so.1.4.4
+        libfontconfig.so.1.8.0
+        libfontconfig.so.1
        )
 
     if (USE_TCMALLOC)
diff --git a/indra/cmake/FreeType.cmake b/indra/cmake/FreeType.cmake
index 02c5b37f28410fc81102f845d38f3a9049701ce2..a36485f6d0fb6cf4f2c5a768cbb98d316f193336 100755
--- a/indra/cmake/FreeType.cmake
+++ b/indra/cmake/FreeType.cmake
@@ -7,7 +7,7 @@ if (USESYSTEMLIBS)
   pkg_check_modules(FREETYPE REQUIRED freetype2)
 else (USESYSTEMLIBS)
   use_prebuilt_binary(freetype)
-  set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
+  set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/freetype2/)
   set(FREETYPE_LIBRARIES freetype)
 endif (USESYSTEMLIBS)
 
diff --git a/indra/cmake/GoogleMock.cmake b/indra/cmake/GoogleMock.cmake
index c4c96a9af7042f51f67d19d59ab0006bac5a0dfd..cac072988e8288bb69329b6af1732112ce2e492b 100755
--- a/indra/cmake/GoogleMock.cmake
+++ b/indra/cmake/GoogleMock.cmake
@@ -2,7 +2,7 @@
 include(Prebuilt)
 include(Linking)
 
-use_prebuilt_binary(googlemock)
+use_prebuilt_binary(gmock)
 
 set(GOOGLEMOCK_INCLUDE_DIRS 
     ${LIBS_PREBUILT_DIR}/include)
diff --git a/indra/cmake/LLPrimitive.cmake b/indra/cmake/LLPrimitive.cmake
index 67c2115237cfbebb3ba7f71fcbdfea478d00fc63..93626f689fda6f9ed450bc65696a4d0410f663dd 100755
--- a/indra/cmake/LLPrimitive.cmake
+++ b/indra/cmake/LLPrimitive.cmake
@@ -6,32 +6,40 @@ include(Boost)
 
 use_prebuilt_binary(colladadom)
 use_prebuilt_binary(pcre)
+use_prebuilt_binary(libxml2)
 
 set(LLPRIMITIVE_INCLUDE_DIRS
     ${LIBS_OPEN_DIR}/llprimitive
     )
 if (WINDOWS)
-    set(LLPRIMITIVE_LIBRARIES
+    set(LLPRIMITIVE_LIBRARIES 
         debug llprimitive
         optimized llprimitive
-        debug libcollada14dom22-d
-        optimized libcollada14dom22
+        debug libcollada14dom23-sd
+        optimized libcollada14dom23-s
+        libxml2_a
+        debug pcrecppd
+        optimized pcrecpp
+        debug pcred
+        optimized pcre
         ${BOOST_SYSTEM_LIBRARIES}
         )
-elseif (LINUX)
-    use_prebuilt_binary(libxml2)
-    set(LLPRIMITIVE_LIBRARIES
+elseif (DARWIN)
+    set(LLPRIMITIVE_LIBRARIES 
         llprimitive
-        collada14dom
+        debug collada14dom-d
+        optimized collada14dom
         minizip
         xml2
         pcrecpp
         pcre
+        iconv           # Required by libxml2
         )
-else (WINDOWS)
-    set(LLPRIMITIVE_LIBRARIES
+elseif (LINUX)
+    set(LLPRIMITIVE_LIBRARIES 
         llprimitive
-        collada14dom
+        debug collada14dom-d
+        optimized collada14dom
         minizip
         xml2
         pcrecpp
diff --git a/indra/cmake/Linking.cmake b/indra/cmake/Linking.cmake
index b9c9e531fce292acc672e6ef9643626d4b6b41b5..74fe3f11377d096bc3e57fdaba85360168cb9a65 100755
--- a/indra/cmake/Linking.cmake
+++ b/indra/cmake/Linking.cmake
@@ -6,6 +6,7 @@ set(${CMAKE_CURRENT_LIST_FILE}_INCLUDED "YES")
 include(Variables)
 
 set(ARCH_PREBUILT_DIRS ${AUTOBUILD_INSTALL_DIR}/lib)
+set(ARCH_PREBUILT_DIRS_PLUGINS ${AUTOBUILD_INSTALL_DIR}/plugins)
 set(ARCH_PREBUILT_DIRS_RELEASE ${AUTOBUILD_INSTALL_DIR}/lib/release)
 set(ARCH_PREBUILT_DIRS_DEBUG ${AUTOBUILD_INSTALL_DIR}/lib/debug)
 if (WINDOWS)
diff --git a/indra/cmake/OpenSSL.cmake b/indra/cmake/OpenSSL.cmake
index 5b469f74f9a12d1085d3cfa8886fdcd7a03f8f89..eb548bdcc1393d90fe9e8cdeac1f6ae32c1d3745 100755
--- a/indra/cmake/OpenSSL.cmake
+++ b/indra/cmake/OpenSSL.cmake
@@ -7,7 +7,7 @@ set(OpenSSL_FIND_REQUIRED ON)
 if (USESYSTEMLIBS)
   include(FindOpenSSL)
 else (USESYSTEMLIBS)
-  use_prebuilt_binary(openSSL)
+  use_prebuilt_binary(openssl)
   if (WINDOWS)
     set(OPENSSL_LIBRARIES ssleay32 libeay32)
   else (WINDOWS)
@@ -17,7 +17,7 @@ else (USESYSTEMLIBS)
 endif (USESYSTEMLIBS)
 
 if (LINUX)
-  set(CRYPTO_LIBRARIES crypto)
+  set(CRYPTO_LIBRARIES crypto dl)
 elseif (DARWIN)
   set(CRYPTO_LIBRARIES crypto)
 endif (LINUX)
diff --git a/indra/cmake/PNG.cmake b/indra/cmake/PNG.cmake
index 173d59391e1ebb33f5e79a6a7034552b4eed17fd..248a875a19bd6bfd451f9d8ec1d6ee3967e09c51 100755
--- a/indra/cmake/PNG.cmake
+++ b/indra/cmake/PNG.cmake
@@ -9,13 +9,26 @@ if (USESYSTEMLIBS)
 else (USESYSTEMLIBS)
   use_prebuilt_binary(libpng)
   if (WINDOWS)
-    set(PNG_LIBRARIES libpng15)
-    set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng15)
+    set(PNG_LIBRARIES libpng16)
+    set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng16)
   elseif(DARWIN)
-    set(PNG_LIBRARIES png15)
-    set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng15)
+    set(PNG_LIBRARIES png16)
+    set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng16)
   else()
-    set(PNG_LIBRARIES png15)
-    set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng15)
+    #
+    # When we have updated static libraries in competition with older
+    # shared libraries and we want the former to win, we need to do some
+    # extra work.  The *_PRELOAD_ARCHIVES settings are invoked early
+    # and will pull in the entire archive to the binary giving it 
+    # priority in symbol resolution.  Beware of cmake moving the
+    # achive load itself to another place on the link command line.  If
+    # that happens, you can try something like -Wl,-lpng16 here to hide
+    # the archive.  Also be aware that the linker will not tolerate a
+    # second whole-archive load of the archive.  See viewer's
+    # CMakeLists.txt for more information.
+    #
+    set(PNG_PRELOAD_ARCHIVES -Wl,--whole-archive png16 -Wl,--no-whole-archive)
+    set(PNG_LIBRARIES png16)
+    set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng16)
   endif()
 endif (USESYSTEMLIBS)
diff --git a/indra/cmake/WebKitLibPlugin.cmake b/indra/cmake/WebKitLibPlugin.cmake
index 76f2c148db634ac3a62564d3142d6fcd348bda83..f7c548a2fda5381b77ef026e41e5086d59b46609 100755
--- a/indra/cmake/WebKitLibPlugin.cmake
+++ b/indra/cmake/WebKitLibPlugin.cmake
@@ -1,6 +1,7 @@
 # -*- cmake -*-
 include(Linking)
 include(Prebuilt)
+include(OpenSSL)
 
 if (USESYSTEMLIBS)
   # The minimal version, 4.4.3, is rather arbitrary: it's the version in Debian/Lenny.
@@ -36,27 +37,32 @@ endif (USESYSTEMLIBS)
 
 if (WINDOWS)
     set(WEBKIT_PLUGIN_LIBRARIES 
-    debug llqtwebkitd
-    debug QtWebKitd4
-    debug QtOpenGLd4
-    debug QtNetworkd4
-    debug QtGuid4
-    debug QtCored4
-    debug qtmaind
-    optimized llqtwebkit
-    optimized QtWebKit4
-    optimized QtOpenGL4
-    optimized QtNetwork4
-    optimized QtGui4
-    optimized QtCore4
-    optimized qtmain
+        debug llqtwebkitd
+        debug QtWebKitd4
+        debug QtOpenGLd4
+        debug QtNetworkd4
+        debug QtGuid4
+        debug QtCored4
+        debug qtmaind
+        optimized llqtwebkit
+        optimized QtWebKit4
+        optimized QtOpenGL4
+        optimized QtNetwork4
+        optimized QtGui4
+        optimized QtCore4
+        optimized qtmain
     )
 elseif (DARWIN)
     set(WEBKIT_PLUGIN_LIBRARIES
-        optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib
-        debug ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib
-        )
+        ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.a
+        ${ARCH_PREBUILT_DIRS_RELEASE}/libQtWebKit.4.dylib
+        ${ARCH_PREBUILT_DIRS_RELEASE}/libQtOpenGL.4.dylib
+        ${ARCH_PREBUILT_DIRS_RELEASE}/libQtNetwork.4.dylib
+        ${ARCH_PREBUILT_DIRS_RELEASE}/libQtGui.4.dylib
+        ${ARCH_PREBUILT_DIRS_RELEASE}/libQtCore.4.dylib
+       )
 elseif (LINUX)
+    # *HUH:  What does this do?
     set(WEBKIT_PLUGIN_LIBRARIES ${LLQTWEBKIT_LIBRARY} ${QT_LIBRARIES} ${QT_PLUGIN_LIBRARIES})
     set(WEBKIT_PLUGIN_LIBRARIES
         llqtwebkit
@@ -68,9 +74,10 @@ elseif (LINUX)
         QtWebKit
         QtOpenGL
         QtNetwork
+        ${OPENSSL_LIBRARIES}
         QtGui
         QtCore
-        jscore
+#        jscore
 #        qgif
 #        qjpeg
 #        jpeg
diff --git a/indra/cmake/ZLIB.cmake b/indra/cmake/ZLIB.cmake
index b99a8644c92ca2d637264d5b87a2c052194b7f39..6cff0753b25f5d6ea55448bd866e27ce8609a2f9 100755
--- a/indra/cmake/ZLIB.cmake
+++ b/indra/cmake/ZLIB.cmake
@@ -13,10 +13,23 @@ else (USESYSTEMLIBS)
     set(ZLIB_LIBRARIES 
       debug zlibd
       optimized zlib)
-  else (WINDOWS)
+  elseif (LINUX)
+    #
+    # When we have updated static libraries in competition with older
+    # shared libraries and we want the former to win, we need to do some
+    # extra work.  The *_PRELOAD_ARCHIVES settings are invoked early
+    # and will pull in the entire archive to the binary giving it 
+    # priority in symbol resolution.  Beware of cmake moving the
+    # achive load itself to another place on the link command line.  If
+    # that happens, you can try something like -Wl,-lz here to hide
+    # the archive.  Also be aware that the linker will not tolerate a
+    # second whole-archive load of the archive.  See viewer's
+    # CMakeLists.txt for more information.
+    #
+    set(ZLIB_PRELOAD_ARCHIVES -Wl,--whole-archive z -Wl,--no-whole-archive)
+    set(ZLIB_LIBRARIES z)
+  elseif (DARWIN)
     set(ZLIB_LIBRARIES z)
   endif (WINDOWS)
-  if (WINDOWS OR LINUX)
-    set(ZLIB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/zlib)
-  endif (WINDOWS OR LINUX)
+  set(ZLIB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/zlib)
 endif (USESYSTEMLIBS)
diff --git a/indra/edit-me-to-trigger-new-build.txt b/indra/edit-me-to-trigger-new-build.txt
index c63ad74682b6ce81f684bcf591a71f7b6526aa06..6f2087d58088cbfeeb19f3b201e1f67bbb0b34dc 100755
--- a/indra/edit-me-to-trigger-new-build.txt
+++ b/indra/edit-me-to-trigger-new-build.txt
@@ -1 +1,2 @@
 2014-02-25 10:34
+
diff --git a/indra/linux_updater/CMakeLists.txt b/indra/linux_updater/CMakeLists.txt
deleted file mode 100644
index 4a9e82f9b620b3a0202e974d60c73c868f25bccb..0000000000000000000000000000000000000000
--- a/indra/linux_updater/CMakeLists.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-# -*- cmake -*-
-
-project(linux_updater)
-
-include(00-Common)
-include(CURL)
-include(CARes)
-include(OpenSSL)
-include(UI)
-include(LLCommon)
-include(LLMessage)
-include(LLVFS)
-include(LLXML)
-include(LLUI)
-include(Linking)
-
-include_directories(
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLVFS_INCLUDE_DIRS}
-    ${LLXML_INCLUDE_DIRS}
-    ${LLUI_INCLUDE_DIRS}
-    ${CURL_INCLUDE_DIRS}
-    ${CARES_INCLUDE_DIRS}
-    ${OPENSSL_INCLUDE_DIRS}
-    ${UI_INCLUDE_DIRS}
-    )
-include_directories(SYSTEM
-    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
-    ${LLXML_SYSTEM_INCLUDE_DIRS}
-    )
-
-set(linux_updater_SOURCE_FILES linux_updater.cpp)
-
-set(linux_updater_HEADER_FILES CMakeLists.txt)
-
-set_source_files_properties(${linux_updater_HEADER_FILES}
-                            PROPERTIES HEADER_FILES_ONLY TRUE)
-
-list(APPEND linux_updater_SOURCE_FILES ${linux_updater_HEADER_FILES})
-
-add_executable(linux-updater ${linux_updater_SOURCE_FILES})
-
-target_link_libraries(linux-updater
-    ${CURL_LIBRARIES}
-    ${CARES_LIBRARIES}
-    ${OPENSSL_LIBRARIES}
-    ${CRYPTO_LIBRARIES}
-    ${LLMESSAGE_LIBRARIES}
-    ${UI_LIBRARIES}
-    ${LLXML_LIBRARIES}
-    ${LLUI_LIBRARIES}
-    ${LLVFS_LIBRARIES}
-    ${LLCOMMON_LIBRARIES}
-    )
-
-add_custom_target(linux-updater-target ALL
-                  DEPENDS linux-updater)
diff --git a/indra/linux_updater/linux_updater.cpp b/indra/linux_updater/linux_updater.cpp
deleted file mode 100644
index 5c94deba0215e737749a40f88a979f11dcdf2f7e..0000000000000000000000000000000000000000
--- a/indra/linux_updater/linux_updater.cpp
+++ /dev/null
@@ -1,926 +0,0 @@
-/**
- * @file linux_updater.cpp
- * @author Kyle Ambroff <ambroff@lindenlab.com>, Tofu Linden
- * @brief Viewer update program for unix platforms that support GTK+
- *
- * $LicenseInfo:firstyear=2008&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#include <unistd.h>
-#include <signal.h>
-#include <errno.h>
-#include <set>
-#include <iostream>
-
-#include "linden_common.h"
-#include "llerrorcontrol.h"
-#include "llfile.h"
-#include "lldir.h"
-#include "lldiriterator.h"
-
-/*==========================================================================*|
-// IQA-490: Use of LLTrans -- by this program at least -- appears to be buggy.
-// With it, the 3.3.2 beta 1 linux-updater.bin crashes; without it seems stable.
-#include "llxmlnode.h"
-#include "lltrans.h"
-|*==========================================================================*/
-
-static class LLTrans
-{
-public:
-	LLTrans();
-	static std::string getString(const std::string& key);
-
-private:
-	std::string _getString(const std::string& key) const;
-
-	typedef std::map<std::string, std::string> MessageMap;
-	MessageMap mMessages;
-} sLLTransInstance;
-
-#include <curl/curl.h>
-#include <map>
-#include <boost/foreach.hpp>
-
-extern "C" {
-#include <gtk/gtk.h>
-}
-
-const guint UPDATE_PROGRESS_TIMEOUT = 100;
-const guint UPDATE_PROGRESS_TEXT_TIMEOUT = 1000;
-const guint ROTATE_IMAGE_TIMEOUT = 8000;
-
-typedef struct _updater_app_state {
-	std::string app_name;
-	std::string url;
-	std::string file;
-	std::string image_dir;
-	std::string dest_dir;
-	std::string strings_dirs;
-	std::string strings_file;
-
-	LLDirIterator *image_dir_iter;
-
-	GtkWidget *window;
-	GtkWidget *progress_bar;
-	GtkWidget *image;
-
-	double progress_value;
-	bool activity_mode;
-
-	guint image_rotation_timeout_id;
-	guint progress_update_timeout_id;
-	guint update_progress_text_timeout_id;
-
-	bool failure;
-} UpdaterAppState;
-
-// List of entries from strings.xml to always replace
-static std::set<std::string> default_trans_args;
-void init_default_trans_args()
-{
-        default_trans_args.insert("SECOND_LIFE"); // World
-        default_trans_args.insert("APP_NAME");
-        default_trans_args.insert("SECOND_LIFE_GRID");
-        default_trans_args.insert("SUPPORT_SITE");
-}
-
-bool translate_init(std::string comma_delim_path_list,
-		    std::string base_xml_name)
-{
-	return true;
-/*==========================================================================*|
-	init_default_trans_args();
-
-	// extract paths string vector from comma-delimited flat string
-	std::vector<std::string> paths;
-	LLStringUtil::getTokens(comma_delim_path_list, paths, ","); // split over ','
-
-	for(std::vector<std::string>::iterator it = paths.begin(), end_it = paths.end();
-		it != end_it;
-		++it)
-	{
-		(*it) = gDirUtilp->findSkinnedFilename(*it, base_xml_name);
-	}
-
-	// suck the translation xml files into memory
-	LLXMLNodePtr root;
-	bool success = LLXMLNode::getLayeredXMLNode(root, paths);
-	if (!success)
-	{
-		// couldn't load string table XML
-		return false;
-	}
-	else
-	{
-		// get those strings out of the XML
-		LLTrans::parseStrings(root, default_trans_args);
-		return true;
-	}
-|*==========================================================================*/
-}
-
-
-void updater_app_ui_init(void);
-void updater_app_quit(UpdaterAppState *app_state);
-void parse_args_and_init(int argc, char **argv, UpdaterAppState *app_state);
-std::string next_image_filename(std::string& image_path, LLDirIterator& iter);
-void display_error(GtkWidget *parent, std::string title, std::string message);
-BOOL install_package(std::string package_file, std::string destination);
-BOOL spawn_viewer(UpdaterAppState *app_state);
-
-extern "C" {
-	void on_window_closed(GtkWidget *sender, GdkEvent *event, gpointer state);
-	gpointer worker_thread_cb(gpointer *data);
-	int download_progress_cb(gpointer data, double t, double d, double utotal, double ulnow);
-	gboolean rotate_image_cb(gpointer data);
-	gboolean progress_update_timeout(gpointer data);
-	gboolean update_progress_text_timeout(gpointer data);
-}
-
-void updater_app_ui_init(UpdaterAppState *app_state)
-{
-	GtkWidget *vbox;
-	GtkWidget *summary_label;
-	GtkWidget *description_label;
-	GtkWidget *frame;
-
-	llassert(app_state != NULL);
-
-	// set up window and main container
-	std::string window_title = LLTrans::getString("UpdaterWindowTitle");
-	app_state->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-	gtk_window_set_title(GTK_WINDOW(app_state->window),
-			     window_title.c_str());
-	gtk_window_set_resizable(GTK_WINDOW(app_state->window), FALSE);
-	gtk_window_set_position(GTK_WINDOW(app_state->window),
-				GTK_WIN_POS_CENTER_ALWAYS);
-
-	gtk_container_set_border_width(GTK_CONTAINER(app_state->window), 12);
-	g_signal_connect(G_OBJECT(app_state->window), "delete-event",
-			 G_CALLBACK(on_window_closed), app_state);
-
-	vbox = gtk_vbox_new(FALSE, 6);
-	gtk_container_add(GTK_CONTAINER(app_state->window), vbox);
-
-	// set top label
-	std::ostringstream label_ostr;
-	label_ostr << "<big><b>"
-		   << LLTrans::getString("UpdaterNowUpdating")
-		   << "</b></big>";
-
-	summary_label = gtk_label_new(NULL);
-	gtk_label_set_use_markup(GTK_LABEL(summary_label), TRUE);
-	gtk_label_set_markup(GTK_LABEL(summary_label),
-			     label_ostr.str().c_str());
-	gtk_misc_set_alignment(GTK_MISC(summary_label), 0, 0.5);
-	gtk_box_pack_start(GTK_BOX(vbox), summary_label, FALSE, FALSE, 0);
-
-	// create the description label
-	description_label = gtk_label_new(LLTrans::getString("UpdaterUpdatingDescriptive").c_str());
-	gtk_label_set_line_wrap(GTK_LABEL(description_label), TRUE);
-	gtk_misc_set_alignment(GTK_MISC(description_label), 0, 0.5);
-	gtk_box_pack_start(GTK_BOX(vbox), description_label, FALSE, FALSE, 0);
-
-	// If an image path has been set, load the background images
-	if (!app_state->image_dir.empty()) {
-		frame = gtk_frame_new(NULL);
-		gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
-		gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0);
-
-		// load the first image
-		app_state->image = gtk_image_new_from_file
-			(next_image_filename(app_state->image_dir, *app_state->image_dir_iter).c_str());
-		gtk_widget_set_size_request(app_state->image, 340, 310);
-		gtk_container_add(GTK_CONTAINER(frame), app_state->image);
-
-		// rotate the images every 5 seconds
-		app_state->image_rotation_timeout_id = g_timeout_add
-			(ROTATE_IMAGE_TIMEOUT, rotate_image_cb, app_state);
-	}
-
-	// set up progress bar, and update it roughly every 1/10 of a second
-	app_state->progress_bar = gtk_progress_bar_new();
-	gtk_progress_bar_set_text(GTK_PROGRESS_BAR(app_state->progress_bar),
-				  LLTrans::getString("UpdaterProgressBarTextWithEllipses").c_str());
-	gtk_box_pack_start(GTK_BOX(vbox),
-			   app_state->progress_bar, FALSE, TRUE, 0);
-	app_state->progress_update_timeout_id = g_timeout_add
-		(UPDATE_PROGRESS_TIMEOUT, progress_update_timeout, app_state);
-	app_state->update_progress_text_timeout_id = g_timeout_add
-		(UPDATE_PROGRESS_TEXT_TIMEOUT, update_progress_text_timeout, app_state);
-
-	gtk_widget_show_all(app_state->window);
-}
-
-gboolean rotate_image_cb(gpointer data)
-{
-	UpdaterAppState *app_state;
-	std::string filename;
-
-	llassert(data != NULL);
-	app_state = (UpdaterAppState *) data;
-
-	filename = next_image_filename(app_state->image_dir, *app_state->image_dir_iter);
-
-	gdk_threads_enter();
-	gtk_image_set_from_file(GTK_IMAGE(app_state->image), filename.c_str());
-	gdk_threads_leave();
-
-	return TRUE;
-}
-
-std::string next_image_filename(std::string& image_path, LLDirIterator& iter)
-{
-	std::string image_filename;
-	iter.next(image_filename);
-	return gDirUtilp->add(image_path, image_filename);
-}
-
-void on_window_closed(GtkWidget *sender, GdkEvent* event, gpointer data)
-{
-	UpdaterAppState *app_state;
-
-	llassert(data != NULL);
-	app_state = (UpdaterAppState *) data;
-
-	updater_app_quit(app_state);
-}
-
-void updater_app_quit(UpdaterAppState *app_state)
-{
-	if (app_state != NULL)
-	{
-		g_source_remove(app_state->progress_update_timeout_id);
-
-		if (!app_state->image_dir.empty())
-		{
-			g_source_remove(app_state->image_rotation_timeout_id);
-		}
-	}
-
-	gtk_main_quit();
-}
-
-void display_error(GtkWidget *parent, std::string title, std::string message)
-{
-	GtkWidget *dialog;
-
-	dialog = gtk_message_dialog_new(GTK_WINDOW(parent),
-					GTK_DIALOG_DESTROY_WITH_PARENT,
-					GTK_MESSAGE_ERROR,
-					GTK_BUTTONS_OK,
-					"%s", message.c_str());
-	gtk_window_set_title(GTK_WINDOW(dialog), title.c_str());
-	gtk_dialog_run(GTK_DIALOG(dialog));
-	gtk_widget_destroy(dialog);
-}
-
-gpointer worker_thread_cb(gpointer data)
-{
-	UpdaterAppState *app_state;
-	CURL *curl;
-	CURLcode result;
-	FILE *package_file;
-	GError *error = NULL;
-	int fd;
-
-	//g_return_val_if_fail (data != NULL, NULL);
-	app_state = (UpdaterAppState *) data;
-
-	try {
-
-		if(!app_state->url.empty())
-		{
-			char* tmp_local_filename = NULL;
-			// create temporary file to store the package.
-			fd = g_file_open_tmp
-				("secondlife-update-XXXXXX", &tmp_local_filename, &error);
-			if (error != NULL)
-			{
-				LL_ERRS() << "Unable to create temporary file: "
-					   << error->message
-					   << LL_ENDL;
-
-				g_error_free(error);
-				throw 0;
-			}
-
-			if(tmp_local_filename != NULL)
-			{
-				app_state->file = tmp_local_filename;
-				g_free(tmp_local_filename);
-			}
-
-			package_file = fdopen(fd, "wb");
-			if (package_file == NULL)
-			{
-				LL_ERRS() << "Failed to create temporary file: "
-					   << app_state->file.c_str()
-					   << LL_ENDL;
-
-				gdk_threads_enter();
-				display_error(app_state->window,
-							  LLTrans::getString("UpdaterFailDownloadTitle"),
-							  LLTrans::getString("UpdaterFailUpdateDescriptive"));
-				gdk_threads_leave();
-				throw 0;
-			}
-
-			// initialize curl and start downloading the package
-			LL_INFOS() << "Downloading package: " << app_state->url << LL_ENDL;
-
-			curl = curl_easy_init();
-			if (curl == NULL)
-			{
-				LL_ERRS() << "Failed to initialize libcurl" << LL_ENDL;
-
-				gdk_threads_enter();
-				display_error(app_state->window,
-							  LLTrans::getString("UpdaterFailDownloadTitle"),
-							  LLTrans::getString("UpdaterFailUpdateDescriptive"));
-				gdk_threads_leave();
-				throw 0;
-			}
-
-			curl_easy_setopt(curl, CURLOPT_URL, app_state->url.c_str());
-			curl_easy_setopt(curl, CURLOPT_NOSIGNAL, TRUE);
-			curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, TRUE);
-			curl_easy_setopt(curl, CURLOPT_WRITEDATA, package_file);
-			curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE);
-			curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION,
-							 &download_progress_cb);
-			curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, app_state);
-
-			result = curl_easy_perform(curl);
-			fclose(package_file);
-			curl_easy_cleanup(curl);
-
-			if (result)
-			{
-				LL_ERRS() << "Failed to download update: "
-					   << app_state->url
-					   << LL_ENDL;
-
-				gdk_threads_enter();
-				display_error(app_state->window,
-							  LLTrans::getString("UpdaterFailDownloadTitle"),
-							  LLTrans::getString("UpdaterFailUpdateDescriptive"));
-				gdk_threads_leave();
-
-				throw 0;
-			}
-		}
-
-		// now pulse the progres bar back and forth while the package is
-		// being unpacked
-		gdk_threads_enter();
-		std::string installing_msg = LLTrans::getString("UpdaterNowInstalling");
-		gtk_progress_bar_set_text(
-			GTK_PROGRESS_BAR(app_state->progress_bar),
-			installing_msg.c_str());
-		app_state->activity_mode = TRUE;
-		gdk_threads_leave();
-
-		// *TODO: if the destination is not writable, terminate this
-		// thread and show file chooser?
-		if (!install_package(app_state->file.c_str(), app_state->dest_dir))
-		{
-			LL_WARNS() << "Failed to install package to destination: "
-				<< app_state->dest_dir
-				<< LL_ENDL;
-
-			gdk_threads_enter();
-			display_error(app_state->window,
-						  LLTrans::getString("UpdaterFailInstallTitle"),
-						  LLTrans::getString("UpdaterFailUpdateDescriptive"));
-			//"Failed to update " + app_state->app_name,
-			gdk_threads_leave();
-			throw 0;
-		}
-
-		// try to spawn the new viewer
-		if (!spawn_viewer(app_state))
-		{
-			LL_WARNS() << "Viewer was not installed properly in : "
-				<< app_state->dest_dir
-				<< LL_ENDL;
-
-			gdk_threads_enter();
-			display_error(app_state->window,
-						  LLTrans::getString("UpdaterFailStartTitle"),
-						  LLTrans::getString("UpdaterFailUpdateDescriptive"));
-			gdk_threads_leave();
-			throw 0;
-		}
-	}
-	catch (...)
-	{
-		app_state->failure = TRUE;
-	}
-
-	gdk_threads_enter();
-	updater_app_quit(app_state);
-	gdk_threads_leave();
-
-	return NULL;
-}
-
-
-gboolean less_anal_gspawnsync(gchar **argv,
-			      gchar **stderr_output,
-			      gint *child_exit_status,
-			      GError **spawn_error)
-{
-	// store current SIGCHLD handler if there is one, replace with default
-	// handler to make glib happy
-	struct sigaction sigchld_backup;
-	struct sigaction sigchld_appease_glib;
-	sigchld_appease_glib.sa_handler = SIG_DFL;
-	sigemptyset(&sigchld_appease_glib.sa_mask);
-	sigchld_appease_glib.sa_flags = 0;
-	sigaction(SIGCHLD, &sigchld_appease_glib, &sigchld_backup);
-
-	gboolean rtn = g_spawn_sync(NULL,
-				    argv,
-				    NULL,
-				    (GSpawnFlags) (G_SPAWN_STDOUT_TO_DEV_NULL),
-				    NULL,
-				    NULL,
-				    NULL,
-				    stderr_output,
-				    child_exit_status,
-				    spawn_error);
-
-	// restore SIGCHLD handler
-	sigaction(SIGCHLD, &sigchld_backup, NULL);
-
-	return rtn;
-}
-
-
-// perform a rename, or perform a (prompted) root rename if that fails
-int
-rename_with_sudo_fallback(const std::string& filename, const std::string& newname)
-{
-	int rtncode = ::rename(filename.c_str(), newname.c_str());
-	LL_DEBUGS() << "rename result is: " << rtncode << " / " << errno << LL_ENDL;
-	if (rtncode && (EACCES == errno || EPERM == errno || EXDEV == errno))
-	{
-		LL_INFOS() << "Permission problem in rename, or moving between different mount points.  Retrying as a mv under a sudo." << LL_ENDL;
-		// failed due to permissions, try again as a gksudo or kdesu mv wrapper hack
-		char *sudo_cmd = NULL;
-		sudo_cmd = g_find_program_in_path("gksudo");
-		if (!sudo_cmd)
-		{
-			sudo_cmd = g_find_program_in_path("kdesu");
-		}
-		if (sudo_cmd)
-		{
-			char *mv_cmd = NULL;
-			mv_cmd = g_find_program_in_path("mv");
-			if (mv_cmd)
-			{
-				char *src_string_copy = g_strdup(filename.c_str());
-				char *dst_string_copy = g_strdup(newname.c_str());
-				char* argv[] =
-					{
-						sudo_cmd,
-						mv_cmd,
-						src_string_copy,
-						dst_string_copy,
-						NULL
-					};
-
-				gchar *stderr_output = NULL;
-				gint child_exit_status = 0;
-				GError *spawn_error = NULL;
-				if (!less_anal_gspawnsync(argv, &stderr_output,
-							  &child_exit_status, &spawn_error))
-				{
-					LL_WARNS() << "Failed to spawn child process: "
-						<< spawn_error->message
-						<< LL_ENDL;
-				}
-				else if (child_exit_status)
-				{
-					LL_WARNS() << "mv command failed: "
-						<< (stderr_output ? stderr_output : "(no reason given)")
-						<< LL_ENDL;
-				}
-				else
-				{
-					// everything looks good, clear the error code
-					rtncode = 0;
-				}
-
-				g_free(src_string_copy);
-				g_free(dst_string_copy);
-				if (spawn_error) g_error_free(spawn_error);
-			}
-		}
-	}
-	return rtncode;
-}
-
-gboolean install_package(std::string package_file, std::string destination)
-{
-	char *tar_cmd = NULL;
-	std::ostringstream command;
-
-	// Find the absolute path to the 'tar' command.
-	tar_cmd = g_find_program_in_path("tar");
-	if (!tar_cmd)
-	{
-		LL_ERRS() << "`tar' was not found in $PATH" << LL_ENDL;
-		return FALSE;
-	}
-	LL_INFOS() << "Found tar command: " << tar_cmd << LL_ENDL;
-
-	// Unpack the tarball in a temporary place first, then move it to
-	// its final destination
-	std::string tmp_dest_dir = gDirUtilp->getTempFilename();
-	if (LLFile::mkdir(tmp_dest_dir, 0744))
-	{
-		LL_ERRS() << "Failed to create directory: "
-		       << destination
-		       << LL_ENDL;
-
-		return FALSE;
-	}
-
-	char *package_file_string_copy = g_strdup(package_file.c_str());
-	char *tmp_dest_dir_string_copy = g_strdup(tmp_dest_dir.c_str());
-	gchar *argv[8] = {
-		tar_cmd,
-		const_cast<gchar*>("--strip"), const_cast<gchar*>("1"),
-		const_cast<gchar*>("-xjf"),
-		package_file_string_copy,
-		const_cast<gchar*>("-C"), tmp_dest_dir_string_copy,
-		NULL,
-	};
-
-	LL_INFOS() << "Untarring package: " << package_file << LL_ENDL;
-
-	// store current SIGCHLD handler if there is one, replace with default
-	// handler to make glib happy
-	struct sigaction sigchld_backup;
-	struct sigaction sigchld_appease_glib;
-	sigchld_appease_glib.sa_handler = SIG_DFL;
-	sigemptyset(&sigchld_appease_glib.sa_mask);
-	sigchld_appease_glib.sa_flags = 0;
-	sigaction(SIGCHLD, &sigchld_appease_glib, &sigchld_backup);
-
-	gchar *stderr_output = NULL;
-	gint child_exit_status = 0;
-	GError *untar_error = NULL;
-	if (!less_anal_gspawnsync(argv, &stderr_output,
-				  &child_exit_status, &untar_error))
-	{
-		LL_WARNS() << "Failed to spawn child process: "
-			<< untar_error->message
-			<< LL_ENDL;
-		return FALSE;
-	}
-
-	if (child_exit_status)
-	{
-	 	LL_WARNS() << "Untar command failed: "
-			<< (stderr_output ? stderr_output : "(no reason given)")
-			<< LL_ENDL;
-		return FALSE;
-	}
-
-	g_free(tar_cmd);
-	g_free(package_file_string_copy);
-	g_free(tmp_dest_dir_string_copy);
-	g_free(stderr_output);
-	if (untar_error) g_error_free(untar_error);
-
-	// move the existing package out of the way if it exists
-	if (gDirUtilp->fileExists(destination))
-	{
-		std::string backup_dir = destination + ".backup";
-		int oldcounter = 1;
-		while (gDirUtilp->fileExists(backup_dir))
-		{
-			// find a foo.backup.N folder name that isn't taken yet
-			backup_dir = destination + ".backup." + llformat("%d", oldcounter);
-			++oldcounter;
-		}
-
-		if (rename_with_sudo_fallback(destination, backup_dir))
-		{
-			LL_WARNS() << "Failed to move directory: '"
-				<< destination << "' -> '" << backup_dir
-				<< LL_ENDL;
-			return FALSE;
-		}
-	}
-
-	// The package has been unpacked in a staging directory, now we just
-	// need to move it to its destination.
-	if (rename_with_sudo_fallback(tmp_dest_dir, destination))
-	{
-		LL_WARNS() << "Failed to move installation to the destination: "
-			<< destination
-			<< LL_ENDL;
-		return FALSE;
-	}
-
-	// \0/ Success!
-	return TRUE;
-}
-
-gboolean progress_update_timeout(gpointer data)
-{
-	UpdaterAppState *app_state;
-
-	llassert(data != NULL);
-
-	app_state = (UpdaterAppState *) data;
-
-	gdk_threads_enter();
-	if (app_state->activity_mode)
-	{
-		gtk_progress_bar_pulse
-			(GTK_PROGRESS_BAR(app_state->progress_bar));
-	}
-	else
-	{
-		gtk_progress_set_value(GTK_PROGRESS(app_state->progress_bar),
-				       app_state->progress_value);
-	}
-	gdk_threads_leave();
-
-	return TRUE;
-}
-
-gboolean update_progress_text_timeout(gpointer data)
-{
-	UpdaterAppState *app_state;
-
-	llassert(data != NULL);
-	app_state = (UpdaterAppState *) data;
-
-	if (app_state->activity_mode == TRUE)
-	{
-		// We no longer need this timeout, it will be removed.
-		return FALSE;
-	}
-
-	if (!app_state->progress_value)
-	{
-		return TRUE;
-	}
-
-	std::string progress_text = llformat((LLTrans::getString("UpdaterProgressBarText")+" (%.0f%%)").c_str(), app_state->progress_value);
-
-	gdk_threads_enter();
-	gtk_progress_bar_set_text(GTK_PROGRESS_BAR(app_state->progress_bar),
-				  progress_text.c_str());
-	gdk_threads_leave();
-
-	return TRUE;
-}
-
-int download_progress_cb(gpointer data,
-			 double t,
-			 double d,
-			 double utotal,
-			 double ulnow)
-{
-	UpdaterAppState *app_state;
-
-	llassert(data != NULL);
-	app_state = (UpdaterAppState *) data;
-
-	if (t <= 0.0)
-	{
-		app_state->progress_value = 0;
-	}
-	else
-	{
-		app_state->progress_value = d * 100.0 / t;
-	}
-	return 0;
-}
-
-BOOL spawn_viewer(UpdaterAppState *app_state)
-{
-	llassert(app_state != NULL);
-
-	std::string cmd = app_state->dest_dir + "/secondlife";
-	GError *error = NULL;
-
-	// We want to spawn the Viewer on the same display as the updater app
-	gboolean success = gdk_spawn_command_line_on_screen
-		(gtk_widget_get_screen(app_state->window), cmd.c_str(), &error);
-
-	if (!success)
-	{
-		LL_WARNS() << "Failed to launch viewer: " << error->message
-			<< LL_ENDL;
-	}
-
-	if (error) g_error_free(error);
-
-	return success;
-}
-
-void show_usage_and_exit()
-{
-	std::cout << "Usage: linux-updater <--url URL | --file FILE> --name NAME --dest PATH --stringsdir PATH1,PATH2 --stringsfile FILE"
-		  << "[--image-dir PATH]"
-		  << std::endl;
-	exit(1);
-}
-
-void parse_args_and_init(int argc, char **argv, UpdaterAppState *app_state)
-{
-	int i;
-
-	for (i = 1; i < argc; i++)
-	{
-		if ((!strcmp(argv[i], "--url")) && (++i < argc))
-		{
-			app_state->url = argv[i];
-		}
-		else if ((!strcmp(argv[i], "--file")) && (++i < argc))
-		{
-			app_state->file = argv[i];
-		}
-		else if ((!strcmp(argv[i], "--name")) && (++i < argc))
-		{
-			app_state->app_name = argv[i];
-		}
-		else if ((!strcmp(argv[i], "--image-dir")) && (++i < argc))
-		{
-			app_state->image_dir = argv[i];
-			app_state->image_dir_iter = new LLDirIterator(argv[i], "*.jpg");
-		}
-		else if ((!strcmp(argv[i], "--dest")) && (++i < argc))
-		{
-			app_state->dest_dir = argv[i];
-		}
-		else if ((!strcmp(argv[i], "--stringsdir")) && (++i < argc))
-		{
-			app_state->strings_dirs = argv[i];
-		}
-		else if ((!strcmp(argv[i], "--stringsfile")) && (++i < argc))
-		{
-			app_state->strings_file = argv[i];
-		}
-		else
-		{
-			// show usage, an invalid option was given.
-			show_usage_and_exit();
-		}
-	}
-
-	if (app_state->app_name.empty()
-	    || (app_state->url.empty() && app_state->file.empty())
-	    || app_state->dest_dir.empty())
-	{
-		show_usage_and_exit();
-	}
-
-	app_state->progress_value = 0.0;
-	app_state->activity_mode = FALSE;
-	app_state->failure = FALSE;
-
-	translate_init(app_state->strings_dirs, app_state->strings_file);
-}
-
-int main(int argc, char **argv)
-{
-	UpdaterAppState* app_state = new UpdaterAppState;
-
-	parse_args_and_init(argc, argv, app_state);
-
-	// Initialize logger, and rename old log file
-	gDirUtilp->initAppDirs("SecondLife");
-	LLError::initForApplication
-		(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, ""));
-	std::string old_log_file = gDirUtilp->getExpandedFilename
-		(LL_PATH_LOGS, "updater.log.old");
-	std::string log_file =
-		gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "updater.log");
-	LLFile::rename(log_file, old_log_file);
-	LLError::logToFile(log_file);
-
-	// initialize gthreads and gtk+
-	if (!g_thread_supported())
-	{
-		g_thread_init(NULL);
-		gdk_threads_init();
-	}
-
-	gtk_init(&argc, &argv);
-
-	// create UI
-	updater_app_ui_init(app_state);
-
-	//LL_INFOS() << "SAMPLE TRANSLATION IS: " << LLTrans::getString("LoginInProgress") << LL_ENDL;
-
-	// create download thread
-	g_thread_create(GThreadFunc(worker_thread_cb), app_state, FALSE, NULL);
-
-	gdk_threads_enter();
-	gtk_main();
-	gdk_threads_leave();
-
-	// Delete the file only if created from url download.
-	if(!app_state->url.empty() && !app_state->file.empty())
-	{
-		if (gDirUtilp->fileExists(app_state->file))
-		{
-			LLFile::remove(app_state->file);
-		}
-	}
-
-	bool success = !app_state->failure;
-	delete app_state->image_dir_iter;
-	delete app_state;
-	return success ? 0 : 1;
-}
-
-/*****************************************************************************
-*   Dummy LLTrans implementation (IQA-490)
-*****************************************************************************/
-static LLTrans sStaticStrings;
-
-// lookup
-std::string LLTrans::_getString(const std::string& key) const
-{
-	MessageMap::const_iterator found = mMessages.find(key);
-	if (found != mMessages.end())
-	{
-		return found->second;
-	}
-	LL_WARNS("linux_updater") << "No message for key '" << key
-							  << "' -- add to LLTrans::LLTrans() in linux_updater.cpp"
-							  << LL_ENDL;
-	return key;
-}
-
-// static lookup
-std::string LLTrans::getString(const std::string& key)
-{
-    return sLLTransInstance._getString(key);
-}
-
-// initialization
-LLTrans::LLTrans()
-{
-	typedef std::pair<const char*, const char*> Pair;
-	static const Pair data[] =
-	{
-		Pair("UpdaterFailDownloadTitle",
-			 "Failed to download update"),
-		Pair("UpdaterFailInstallTitle",
-			 "Failed to install update"),
-		Pair("UpdaterFailStartTitle",
-			 "Failed to start viewer"),
-		Pair("UpdaterFailUpdateDescriptive",
-			 "An error occurred while updating Second Life. "
-			 "Please download the latest version from www.secondlife.com."),
-		Pair("UpdaterNowInstalling",
-			 "Installing Second Life..."),
-		Pair("UpdaterNowUpdating",
-			 "Now updating Second Life..."),
-		Pair("UpdaterProgressBarText",
-			 "Downloading update"),
-		Pair("UpdaterProgressBarTextWithEllipses",
-			 "Downloading update..."),
-		Pair("UpdaterUpdatingDescriptive",
-			 "Your Second Life Viewer is being updated to the latest release. "
-			 "This may take some time, so please be patient."),
-		Pair("UpdaterWindowTitle",
-			 "Second Life Update")
-	};
-
-	BOOST_FOREACH(Pair pair, data)
-	{
-		mMessages[pair.first] = pair.second;
-	}
-}
diff --git a/indra/llaudio/llaudiodecodemgr.h b/indra/llaudio/llaudiodecodemgr.h
index 7a9b807d04db0ccc7247e443b319f928e3165e09..8228e20e8cb0b523a099148c39237131fe24f768 100755
--- a/indra/llaudio/llaudiodecodemgr.h
+++ b/indra/llaudio/llaudiodecodemgr.h
@@ -24,7 +24,7 @@
  */
 
 #ifndef LL_LLAUDIODECODEMGR_H
-#define LL_LLAUDIODECODEMG_H
+#define LL_LLAUDIODECODEMGR_H
 
 #include "stdtypes.h"
 
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index 8eeb1869361dc06977aaef841097b226c9886589..763f5a3521ee41ccf1cbc2f69878924ec1d2ad4e 100755
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -301,7 +301,7 @@ if (LL_TESTS)
   LL_ADD_INTEGRATION_TEST(llunits "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(stringize "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(lleventdispatcher "" "${test_libs}")
-  LL_ADD_INTEGRATION_TEST(lleventcoro "" "${test_libs};${BOOST_CONTEXT_LIBRARY}")
+  LL_ADD_INTEGRATION_TEST(lleventcoro "" "${test_libs};${BOOST_CONTEXT_LIBRARY};${BOOST_COROUTINE_LIBRARY};${BOOST_SYSTEM_LIBRARY}")
   LL_ADD_INTEGRATION_TEST(llprocess "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(llleap "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(llstreamqueue "" "${test_libs}")
diff --git a/indra/llcommon/llmemory.h b/indra/llcommon/llmemory.h
index db52f2b1f478e624f96af05d03aa9ff8384394f1..7d1d541a4b6b40cb6b03da8b4e6764d7357f158c 100755
--- a/indra/llcommon/llmemory.h
+++ b/indra/llcommon/llmemory.h
@@ -257,7 +257,8 @@ inline void ll_memcpy_nonaliased_aligned_16(char* __restrict dst, const char* __
 	assert((bytes % sizeof(F32))== 0); 
 	ll_assert_aligned(src,16);
 	ll_assert_aligned(dst,16);
-	assert((src < dst) ? ((src + bytes) < dst) : ((dst + bytes) < src));
+
+	assert((src < dst) ? ((src + bytes) <= dst) : ((dst + bytes) <= src));
 	assert(bytes%16==0);
 
 	char* end = dst + bytes;
diff --git a/indra/llmessage/lltransfermanager.cpp b/indra/llmessage/lltransfermanager.cpp
index d6db20d7a33b5ee90871231069aa6ded38b968a5..ec7b21d8b60b6f3dc20d4627e08b56ca4444d9f2 100755
--- a/indra/llmessage/lltransfermanager.cpp
+++ b/indra/llmessage/lltransfermanager.cpp
@@ -1260,9 +1260,13 @@ bool LLTransferTarget::addDelayedPacket(
 		size);
 
 #ifdef _DEBUG
-	if (mDelayedPacketMap.find(packet_id) != mDelayedPacketMap.end())
+    transfer_packet_map::iterator iter = mDelayedPacketMap.find(packet_id);
+	if (iter != mDelayedPacketMap.end())
 	{
-		LL_ERRS() << "Packet ALREADY in delayed packet map!" << LL_ENDL;
+        if (!(iter->second->mSize == size) && !(iter->second->mDatap == datap))
+        {
+            LL_ERRS() << "Packet ALREADY in delayed packet map!" << LL_ENDL;
+        }
 	}
 #endif
 
diff --git a/indra/mac_updater/mac_updater.cpp b/indra/mac_updater/mac_updater.cpp
deleted file mode 100644
index f533d47b18574932d8523d7fbc5c28fa59e56450..0000000000000000000000000000000000000000
--- a/indra/mac_updater/mac_updater.cpp
+++ /dev/null
@@ -1,1266 +0,0 @@
-/** 
- * @file mac_updater.cpp
- * @brief 
- *
- * $LicenseInfo:firstyear=2006&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#include "linden_common.h"
-
-#include <boost/format.hpp>
-
-#include <libgen.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#include <curl/curl.h>
-#include <pthread.h>
-
-#include "llerror.h"
-#include "lltimer.h"
-#include "lldir.h"
-#include "llfile.h"
-
-#include "llstring.h"
-
-#include <Carbon/Carbon.h>
-
-#include "llerrorcontrol.h"
-
-#if LL_DARWIN
-// FSPathMakeRef, FSObjectCopy, deprecations...
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#endif
-
-enum
-{
-	kEventClassCustom = 'Cust',
-	kEventCustomProgress = 'Prog',
-	kEventParamCustomCurValue = 'Cur ',
-	kEventParamCustomMaxValue = 'Max ',
-	kEventParamCustomText = 'Text',
-	kEventCustomDone = 'Done',
-};
-
-WindowRef gWindow = NULL;
-EventHandlerRef gEventHandler = NULL;
-OSStatus gFailure = noErr;
-Boolean gCancelled = false;
-
-const char *gUpdateURL;
-const char *gProductName;
-const char *gBundleID;
-const char *gDmgFile;
-const char *gMarkerPath;
-
-void *updatethreadproc(void*);
-
-pthread_t updatethread;
-
-OSStatus setProgress(int cur, int max)
-{
-	OSStatus err;
-	ControlRef progressBar = NULL;
-	ControlID id;
-
-	id.signature = 'prog';
-	id.id = 0;
-
-	err = GetControlByID(gWindow, &id, &progressBar);
-	if(err == noErr)
-	{
-		Boolean indeterminate;
-		
-		if(max == 0)
-		{
-			indeterminate = true;
-			err = SetControlData(progressBar, kControlEntireControl, kControlProgressBarIndeterminateTag, sizeof(Boolean), (Ptr)&indeterminate);
-		}
-		else
-		{
-			double percentage = (double)cur / (double)max;
-			SetControlMinimum(progressBar, 0);
-			SetControlMaximum(progressBar, 100);
-			SetControlValue(progressBar, (SInt16)(percentage * 100));
-
-			indeterminate = false;
-			err = SetControlData(progressBar, kControlEntireControl, kControlProgressBarIndeterminateTag, sizeof(Boolean), (Ptr)&indeterminate);
-
-			Draw1Control(progressBar);
-		}
-	}
-
-	return(err);
-}
-
-OSStatus setProgressText(CFStringRef text)
-{
-	OSStatus err;
-	ControlRef progressText = NULL;
-	ControlID id;
-
-	id.signature = 'what';
-	id.id = 0;
-
-	err = GetControlByID(gWindow, &id, &progressText);
-	if(err == noErr)
-	{
-		err = SetControlData(progressText, kControlEntireControl, kControlStaticTextCFStringTag, sizeof(CFStringRef), (Ptr)&text);
-		Draw1Control(progressText);
-	}
-
-	return(err);
-}
-
-OSStatus sendProgress(long cur, long max, CFStringRef text = NULL)
-{
-	OSStatus result;
-	EventRef evt;
-	
-	result = CreateEvent( 
-			NULL,
-			kEventClassCustom, 
-			kEventCustomProgress,
-			0, 
-			kEventAttributeNone, 
-			&evt);
-	
-	// This event needs to be targeted at the window so it goes to the window's handler.
-	if(result == noErr)
-	{
-		EventTargetRef target = GetWindowEventTarget(gWindow);
-		result = SetEventParameter (
-			evt,
-			kEventParamPostTarget,
-			typeEventTargetRef,
-			sizeof(target),
-			&target);
-	}
-
-	if(result == noErr)
-	{
-		result = SetEventParameter (
-			evt,
-			kEventParamCustomCurValue,
-			typeLongInteger,
-			sizeof(cur),
-			&cur);
-	}
-
-	if(result == noErr)
-	{
-		result = SetEventParameter (
-			evt,
-			kEventParamCustomMaxValue,
-			typeLongInteger,
-			sizeof(max),
-			&max);
-	}
-	
-	if(result == noErr)
-	{
-		if(text != NULL)
-		{
-			result = SetEventParameter (
-				evt,
-				kEventParamCustomText,
-				typeCFStringRef,
-				sizeof(text),
-				&text);
-		}
-	}
-	
-	if(result == noErr)
-	{
-		// Send the event
-		PostEventToQueue(
-			GetMainEventQueue(),
-			evt,
-			kEventPriorityStandard);
-
-	}
-	
-	return(result);
-}
-
-OSStatus sendDone(void)
-{
-	OSStatus result;
-	EventRef evt;
-	
-	result = CreateEvent( 
-			NULL,
-			kEventClassCustom, 
-			kEventCustomDone,
-			0, 
-			kEventAttributeNone, 
-			&evt);
-	
-	// This event needs to be targeted at the window so it goes to the window's handler.
-	if(result == noErr)
-	{
-		EventTargetRef target = GetWindowEventTarget(gWindow);
-		result = SetEventParameter (
-			evt,
-			kEventParamPostTarget,
-			typeEventTargetRef,
-			sizeof(target),
-			&target);
-	}
-
-	if(result == noErr)
-	{
-		// Send the event
-		PostEventToQueue(
-			GetMainEventQueue(),
-			evt,
-			kEventPriorityStandard);
-
-	}
-	
-	return(result);
-}
-
-OSStatus dialogHandler(EventHandlerCallRef handler, EventRef event, void *userdata)
-{
-	OSStatus result = eventNotHandledErr;
-	OSStatus err;
-	UInt32 evtClass = GetEventClass(event);
-	UInt32 evtKind = GetEventKind(event);
-	
-	if((evtClass == kEventClassCommand) && (evtKind == kEventCommandProcess))
-	{
-		HICommand cmd;
-		err = GetEventParameter(event, kEventParamDirectObject, typeHICommand, NULL, sizeof(cmd), NULL, &cmd);
-		
-		if(err == noErr)
-		{
-			switch(cmd.commandID)
-			{				
-				case kHICommandCancel:
-					gCancelled = true;
-//					QuitAppModalLoopForWindow(gWindow);
-					result = noErr;
-				break;
-			}
-		}
-	}
-	else if((evtClass == kEventClassCustom) && (evtKind == kEventCustomProgress))
-	{
-		// Request to update the progress dialog
-		long cur = 0;
-		long max = 0;
-		CFStringRef text = NULL;
-		(void) GetEventParameter(event, kEventParamCustomCurValue, typeLongInteger, NULL, sizeof(cur), NULL, &cur);
-		(void) GetEventParameter(event, kEventParamCustomMaxValue, typeLongInteger, NULL, sizeof(max), NULL, &max);
-		(void) GetEventParameter(event, kEventParamCustomText, typeCFStringRef, NULL, sizeof(text), NULL, &text);
-		
-		err = setProgress(cur, max);
-		if(err == noErr)
-		{
-			if(text != NULL)
-			{
-				setProgressText(text);
-			}
-		}
-		
-		result = noErr;
-	}
-	else if((evtClass == kEventClassCustom) && (evtKind == kEventCustomDone))
-	{
-		// We're done.  Exit the modal loop.
-		QuitAppModalLoopForWindow(gWindow);
-		result = noErr;
-	}
-	
-	return(result);
-}
-
-#if 0
-size_t curl_download_callback(void *data, size_t size, size_t nmemb,
-										  void *user_data)
-{
-	S32 bytes = size * nmemb;
-	char *cdata = (char *) data;
-	for (int i =0; i < bytes; i += 1)
-	{
-		gServerResponse.append(cdata[i]);
-	}
-	return bytes;
-}
-#endif
-
-int curl_progress_callback_func(void *clientp,
-							  double dltotal,
-							  double dlnow,
-							  double ultotal,
-							  double ulnow)
-{
-	int max = (int)(dltotal / 1024.0);
-	int cur = (int)(dlnow / 1024.0);
-	sendProgress(cur, max);
-	
-	if(gCancelled)
-		return(1);
-
-	return(0);
-}
-
-int parse_args(int argc, char **argv)
-{
-	int j;
-
-	for (j = 1; j < argc; j++) 
-	{
-		if ((!strcmp(argv[j], "-url")) && (++j < argc)) 
-		{
-			gUpdateURL = argv[j];
-		}
-		else if ((!strcmp(argv[j], "-name")) && (++j < argc)) 
-		{
-			gProductName = argv[j];
-		}
-		else if ((!strcmp(argv[j], "-bundleid")) && (++j < argc)) 
-		{
-			gBundleID = argv[j];
-		}
-		else if ((!strcmp(argv[j], "-dmg")) && (++j < argc)) 
-		{
-			gDmgFile = argv[j];
-		}
-		else if ((!strcmp(argv[j], "-marker")) && (++j < argc)) 
-		{
-			gMarkerPath = argv[j];;
-		}
-	}
-
-	return 0;
-}
-
-int main(int argc, char **argv)
-{
-	// We assume that all the logs we're looking for reside on the current drive
-	gDirUtilp->initAppDirs("SecondLife");
-
-	LLError::initForApplication( gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, ""));
-
-	// Rename current log file to ".old"
-	std::string old_log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "updater.log.old");
-	std::string log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "updater.log");
-	LLFile::rename(log_file.c_str(), old_log_file.c_str());
-
-	// Set the log file to updater.log
-	LLError::logToFile(log_file);
-
-	/////////////////////////////////////////
-	//
-	// Process command line arguments
-	//
-	gUpdateURL  = NULL;
-	gProductName = NULL;
-	gBundleID = NULL;
-	gDmgFile = NULL;
-	gMarkerPath = NULL;
-	parse_args(argc, argv);
-	if ((gUpdateURL == NULL) && (gDmgFile == NULL))
-	{
-		llinfos << "Usage: mac_updater -url <url> | -dmg <dmg file> [-name <product_name>] [-program <program_name>]" << llendl;
-		exit(1);
-	}
-	else
-	{
-		llinfos << "Update url is: " << gUpdateURL << llendl;
-		if (gProductName)
-		{
-			llinfos << "Product name is: " << gProductName << llendl;
-		}
-		else
-		{
-			gProductName = "Second Life";
-		}
-		if (gBundleID)
-		{
-			llinfos << "Bundle ID is: " << gBundleID << llendl;
-		}
-		else
-		{
-			gBundleID = "com.secondlife.indra.viewer";
-		}
-	}
-	
-	llinfos << "Starting " << gProductName << " Updater" << llendl;
-
-	// Real UI...
-	OSStatus err;
-	IBNibRef nib = NULL;
-	
-	err = CreateNibReference(CFSTR("AutoUpdater"), &nib);
-
-	char windowTitle[MAX_PATH];		/* Flawfinder: ignore */
-	snprintf(windowTitle, sizeof(windowTitle), "%s Updater", gProductName);		
-	CFStringRef windowTitleRef = NULL;
-	windowTitleRef = CFStringCreateWithCString(NULL, windowTitle, kCFStringEncodingUTF8);
-	
-	if(err == noErr)
-	{
-		err = CreateWindowFromNib(nib, CFSTR("Updater"), &gWindow);
-	}
-
-	if (err == noErr)
-	{
-		err = SetWindowTitleWithCFString(gWindow, windowTitleRef);	
-	}
-	CFRelease(windowTitleRef);
-
-	if(err == noErr)
-	{
-		// Set up an event handler for the window.
-		EventTypeSpec handlerEvents[] = 
-		{
-			{ kEventClassCommand, kEventCommandProcess },
-			{ kEventClassCustom, kEventCustomProgress },
-			{ kEventClassCustom, kEventCustomDone }
-		};
-		InstallStandardEventHandler(GetWindowEventTarget(gWindow));
-		InstallWindowEventHandler(
-				gWindow, 
-				NewEventHandlerUPP(dialogHandler), 
-				GetEventTypeCount (handlerEvents), 
-				handlerEvents, 
-				0, 
-				&gEventHandler);
-	}
-	
-	if(err == noErr)
-	{
-		ShowWindow(gWindow);
-		SelectWindow(gWindow);
-	}
-		
-	if(err == noErr)
-	{
-		pthread_create(&updatethread, 
-                         NULL,
-                         &updatethreadproc, 
-                         NULL);
-						 
-	}
-	
-	if(err == noErr)
-	{
-		RunAppModalLoopForWindow(gWindow);
-	}
-
-	void *threadresult;
-
-	pthread_join(updatethread, &threadresult);
-
-	if(!gCancelled && (gFailure != noErr))
-	{
-		// Something went wrong.  Since we always just tell the user to download a new version, we don't really care what.
-		AlertStdCFStringAlertParamRec params;
-		SInt16 retval_mac = 1;
-		DialogRef alert = NULL;
-		OSStatus err;
-
-		params.version = kStdCFStringAlertVersionOne;
-		params.movable = false;
-		params.helpButton = false;
-		params.defaultText = (CFStringRef)kAlertDefaultOKText;
-		params.cancelText = 0;
-		params.otherText = 0;
-		params.defaultButton = 1;
-		params.cancelButton = 0;
-		params.position = kWindowDefaultPosition;
-		params.flags = 0;
-
-		err = CreateStandardAlert(
-				kAlertStopAlert,
-				CFSTR("Error"),
-				CFSTR("An error occurred while updating Second Life.  Please download the latest version from www.secondlife.com."),
-				&params,
-				&alert);
-		
-		if(err == noErr)
-		{
-			err = RunStandardAlert(
-					alert,
-					NULL,
-					&retval_mac);
-		}
-		
-		if(gMarkerPath != 0)
-		{
-			// Create a install fail marker that can be used by the viewer to
-			// detect install problems.
-			std::ofstream stream(gMarkerPath);
-			if(stream) stream << -1;
-		}
-		exit(-1);
-	} else {
-		exit(0);
-	}
-
-	if(gWindow != NULL)
-	{
-		DisposeWindow(gWindow);
-	}
-	
-	if(nib != NULL)
-	{
-		DisposeNibReference(nib);
-	}
-	
-	return 0;
-}
-
-bool isDirWritable(FSRef &dir)
-{
-	bool result = false;
-	
-	// Test for a writable directory by creating a directory, then deleting it again.
-	// This is kinda lame, but will pretty much always give the right answer.
-	
-	OSStatus err = noErr;
-	char temp[PATH_MAX] = "";		/* Flawfinder: ignore */
-
-	err = FSRefMakePath(&dir, (UInt8*)temp, sizeof(temp));
-
-	if(err == noErr)
-	{
-		strncat(temp, "/.test_XXXXXX", (sizeof(temp) - strlen(temp)) - 1);
-		
-		if(mkdtemp(temp) != NULL)
-		{
-			// We were able to make the directory.  This means the directory is writable.
-			result = true;
-			
-			// Clean up.
-			rmdir(temp);
-		}
-	}
-
-#if 0
-	// This seemed like a good idea, but won't tell us if we're on a volume mounted read-only.
-	UInt8 perm;
-	err = FSGetUserPrivilegesPermissions(&targetParentRef, &perm, NULL);
-	if(err == noErr)
-	{
-		if(perm & kioACUserNoMakeChangesMask)
-		{
-			// Parent directory isn't writable.
-			llinfos << "Target parent directory not writable." << llendl;
-			err = -1;
-			replacingTarget = false;
-		}
-	}
-#endif
-
-	return result;
-}
-
-static std::string HFSUniStr255_to_utf8str(const HFSUniStr255* src)
-{
-	llutf16string string16((U16*)&(src->unicode), src->length);
-	std::string result = utf16str_to_utf8str(string16);
-	return result;
-}
-
-int restoreObject(const char* aside, const char* target, const char* path, const char* object)
-{
-	char source[PATH_MAX] = "";		/* Flawfinder: ignore */
-	char dest[PATH_MAX] = "";		/* Flawfinder: ignore */
-	snprintf(source, sizeof(source), "%s/%s/%s", aside, path, object);		
-	snprintf(dest, sizeof(dest), "%s/%s", target, path);		
-	FSRef sourceRef;
-	FSRef destRef;
-	OSStatus err;
-	err = FSPathMakeRef((UInt8 *)source, &sourceRef, NULL);
-	if(err != noErr) return false;
-	err = FSPathMakeRef((UInt8 *)dest, &destRef, NULL);
-	if(err != noErr) return false;
-
-	llinfos << "Copying " << source << " to " << dest << llendl;
-
-	err = FSCopyObjectSync(
-			&sourceRef,
-			&destRef,
-			NULL,
-			NULL,
-			kFSFileOperationOverwrite);
-
-	if(err != noErr) return false;
-	return true;
-}
-
-// Replace any mention of "Second Life" with the product name.
-void filterFile(const char* filename)
-{
-	char temp[PATH_MAX] = "";		/* Flawfinder: ignore */
-	// First copy the target's version, so we can run it through sed.
-	snprintf(temp, sizeof(temp), "cp '%s' '%s.tmp'", filename, filename);		
-	system(temp);		/* Flawfinder: ignore */
-
-	// Now run it through sed.
-	snprintf(temp, sizeof(temp), 		
-			"sed 's/Second Life/%s/g' '%s.tmp' > '%s'", gProductName, filename, filename);
-	system(temp);		/* Flawfinder: ignore */
-}
-
-static bool isFSRefViewerBundle(FSRef *targetRef)
-{
-	bool result = false;
-	CFURLRef targetURL = NULL;
-	CFBundleRef targetBundle = NULL;
-	CFStringRef targetBundleID = NULL;
-	CFStringRef sourceBundleID = NULL;
-
-	targetURL = CFURLCreateFromFSRef(NULL, targetRef);
-
-	if(targetURL == NULL)
-	{
-		llinfos << "Error creating target URL." << llendl;
-	}
-	else
-	{
-		targetBundle = CFBundleCreate(NULL, targetURL);
-	}
-	
-	if(targetBundle == NULL)
-	{
-		llinfos << "Failed to create target bundle." << llendl;
-	}
-	else
-	{
-		targetBundleID = CFBundleGetIdentifier(targetBundle);
-	}
-	
-	if(targetBundleID == NULL)
-	{
-		llinfos << "Couldn't retrieve target bundle ID." << llendl;
-	}
-	else
-	{
-		sourceBundleID = CFStringCreateWithCString(NULL, gBundleID, kCFStringEncodingUTF8);
-		if(CFStringCompare(sourceBundleID, targetBundleID, 0) == kCFCompareEqualTo)
-		{
-			// This is the bundle we're looking for.
-			result = true;
-		}
-		else
-		{
-			llinfos << "Target bundle ID mismatch." << llendl;
-		}
-	}
-	
-	// Don't release targetBundleID -- since we don't retain it, it's released when targetBundle is released.
-	if(targetURL != NULL)
-		CFRelease(targetURL);
-	if(targetBundle != NULL)
-		CFRelease(targetBundle);
-	
-	return result;
-}
-
-// Search through the directory specified by 'parent' for an item that appears to be a Second Life viewer.
-static OSErr findAppBundleOnDiskImage(FSRef *parent, FSRef *app)
-{
-	FSIterator		iterator;
-	bool			found = false;
-
-	OSErr err = FSOpenIterator( parent, kFSIterateFlat, &iterator );
-	if(!err)
-	{
-		do
-		{
-			ItemCount actualObjects = 0;
-			Boolean containerChanged = false;
-			FSCatalogInfo info;
-			FSRef ref;
-			HFSUniStr255 unicodeName;
-			err = FSGetCatalogInfoBulk( 
-					iterator, 
-					1, 
-					&actualObjects, 
-					&containerChanged,
-					kFSCatInfoNodeFlags, 
-					&info, 
-					&ref,
-					NULL, 
-					&unicodeName );
-			
-			if(actualObjects == 0)
-				break;
-				
-			if(!err)
-			{
-				// Call succeeded and not done with the iteration.
-				std::string name = HFSUniStr255_to_utf8str(&unicodeName);
-
-				llinfos << "Considering \"" << name << "\"" << llendl;
-
-				if(info.nodeFlags & kFSNodeIsDirectoryMask)
-				{
-					// This is a directory.  See if it's a .app
-					if(name.find(".app") != std::string::npos)
-					{
-						// Looks promising.  Check to see if it has the right bundle identifier.
-						if(isFSRefViewerBundle(&ref))
-						{
-							llinfos << name << " is the one" << llendl;
-							// This is the one.  Return it.
-							*app = ref;
-							found = true;
-							break;
-						} else {
-							llinfos << name << " is not the bundle we are looking for; move along" << llendl;
-						}
-
-					}
-				}
-			}
-		}
-		while(!err);
-		
-		llinfos << "closing the iterator" << llendl;
-		
-		FSCloseIterator(iterator);
-		
-		llinfos << "closed" << llendl;
-	}
-	
-	if(!err && !found)
-		err = fnfErr;
-		
-	return err;
-}
-
-void *updatethreadproc(void*)
-{
-	char tempDir[PATH_MAX] = "";		/* Flawfinder: ignore */
-	FSRef tempDirRef;
-	char temp[PATH_MAX] = "";	/* Flawfinder: ignore */
-	// *NOTE: This buffer length is used in a scanf() below.
-	char deviceNode[1024] = "";	/* Flawfinder: ignore */
-	LLFILE *downloadFile = NULL;
-	OSStatus err;
-	ProcessSerialNumber psn;
-	char target[PATH_MAX] = "";		/* Flawfinder: ignore */
-	FSRef targetRef;
-	FSRef targetParentRef;
-	FSVolumeRefNum targetVol;
-	FSRef trashFolderRef;
-	Boolean replacingTarget = false;
-
-	memset(&tempDirRef, 0, sizeof(tempDirRef));
-	memset(&targetRef, 0, sizeof(targetRef));
-	memset(&targetParentRef, 0, sizeof(targetParentRef));
-	
-	try
-	{
-		// Attempt to get a reference to the Second Life application bundle containing this updater.
-		// Any failures during this process will cause us to default to updating /Applications/Second Life.app
-		{
-			FSRef myBundle;
-
-			err = GetCurrentProcess(&psn);
-			if(err == noErr)
-			{
-				err = GetProcessBundleLocation(&psn, &myBundle);
-			}
-
-			if(err == noErr)
-			{
-				// Sanity check:  Make sure the name of the item referenced by targetRef is "Second Life.app".
-				FSRefMakePath(&myBundle, (UInt8*)target, sizeof(target));
-				
-				llinfos << "Updater bundle location: " << target << llendl;
-			}
-			
-			// Our bundle should be in Second Life.app/Contents/Resources/AutoUpdater.app
-			// so we need to go up 3 levels to get the path to the main application bundle.
-			if(err == noErr)
-			{
-				err = FSGetCatalogInfo(&myBundle, kFSCatInfoNone, NULL, NULL, NULL, &targetRef);
-			}
-			if(err == noErr)
-			{
-				err = FSGetCatalogInfo(&targetRef, kFSCatInfoNone, NULL, NULL, NULL, &targetRef);
-			}
-			if(err == noErr)
-			{
-				err = FSGetCatalogInfo(&targetRef, kFSCatInfoNone, NULL, NULL, NULL, &targetRef);
-			}
-			
-			// And once more to get the parent of the target
-			if(err == noErr)
-			{
-				err = FSGetCatalogInfo(&targetRef, kFSCatInfoNone, NULL, NULL, NULL, &targetParentRef);
-			}
-			
-			if(err == noErr)
-			{
-				FSRefMakePath(&targetRef, (UInt8*)target, sizeof(target));
-				llinfos << "Path to target: " << target << llendl;
-			}
-			
-			// Sanity check: make sure the target is a bundle with the right identifier
-			if(err == noErr)
-			{
-				// Assume the worst...
-				err = -1;
-
-				if(isFSRefViewerBundle(&targetRef))
-				{
-					// This is the bundle we're looking for.
-					err = noErr;
-					replacingTarget = true;
-				}
-			}
-			
-			// Make sure the target's parent directory is writable.
-			if(err == noErr)
-			{
-				if(!isDirWritable(targetParentRef))
-				{
-					// Parent directory isn't writable.
-					llinfos << "Target parent directory not writable." << llendl;
-					err = -1;
-					replacingTarget = false;
-				}
-			}
-
-			if(err != noErr)
-			{
-				Boolean isDirectory;
-				llinfos << "Target search failed, defaulting to /Applications/" << gProductName << ".app." << llendl;
-				
-				// Set up the parent directory
-				err = FSPathMakeRef((UInt8*)"/Applications", &targetParentRef, &isDirectory);
-				if((err != noErr) || (!isDirectory))
-				{
-					// We're so hosed.
-					llinfos << "Applications directory not found, giving up." << llendl;
-					throw 0;
-				}
-				
-				snprintf(target, sizeof(target), "/Applications/%s.app", gProductName);		
-
-				memset(&targetRef, 0, sizeof(targetRef));
-				err = FSPathMakeRef((UInt8*)target, &targetRef, NULL);
-				if(err == fnfErr)
-				{
-					// This is fine, just means we're not replacing anything.
-					err = noErr;
-					replacingTarget = false;
-				}
-				else
-				{
-					replacingTarget = true;
-				}
-
-				// Make sure the target's parent directory is writable.
-				if(err == noErr)
-				{
-					if(!isDirWritable(targetParentRef))
-					{
-						// Parent directory isn't writable.
-						llinfos << "Target parent directory not writable." << llendl;
-						err = -1;
-						replacingTarget = false;
-					}
-				}
-
-			}
-			
-			// If we haven't fixed all problems by this point, just bail.
-			if(err != noErr)
-			{
-				llinfos << "Unable to pick a target, giving up." << llendl;
-				throw 0;
-			}
-		}
-		
-		// Find the volID of the volume the target resides on
-		{
-			FSCatalogInfo info;
-			err = FSGetCatalogInfo(
-				&targetParentRef,
-				kFSCatInfoVolume,
-				&info,
-				NULL, 
-				NULL,  
-				NULL);
-				
-			if(err != noErr)
-				throw 0;
-			
-			targetVol = info.volume;
-		}
-
-		// Find the temporary items and trash folders on that volume.
-		err = FSFindFolder(
-			targetVol,
-			kTrashFolderType,
-			true,
-			&trashFolderRef);
-
-		if(err != noErr)
-			throw 0;
-
-#if 0 // *HACK for DEV-11935 see below for details.
-
-		FSRef tempFolderRef;
-
-		err = FSFindFolder(
-			targetVol,
-			kTemporaryFolderType,
-			true,
-			&tempFolderRef);
-		
-		if(err != noErr)
-			throw 0;
-		
-		err = FSRefMakePath(&tempFolderRef, (UInt8*)temp, sizeof(temp));
-
-		if(err != noErr)
-			throw 0;
-
-#else		
-
-		// *HACK for DEV-11935  the above kTemporaryFolderType query was giving
-		// back results with path names that seem to be too long to be used as
-		// mount points.  I suspect this incompatibility was introduced in the
-		// Leopard 10.5.2 update, but I have not verified this. 
-		char const HARDCODED_TMP[] = "/tmp";
-		strncpy(temp, HARDCODED_TMP, sizeof(HARDCODED_TMP));
-
-#endif // 0 *HACK for DEV-11935
-		
-		// Skip downloading the file if the dmg was passed on the command line.
-		std::string dmgName;
-		if(gDmgFile != NULL) {
-			dmgName = basename((char *)gDmgFile);
-			char * dmgDir = dirname((char *)gDmgFile);
-			strncpy(tempDir, dmgDir, sizeof(tempDir));
-			err = FSPathMakeRef((UInt8*)tempDir, &tempDirRef, NULL);
-			if(err != noErr) throw 0;
-			chdir(tempDir);
-			goto begin_install;
-		} else {
-			// Continue on to download file.
-			dmgName = "SecondLife.dmg";
-		}
-
-		
-		strncat(temp, "/SecondLifeUpdate_XXXXXX", (sizeof(temp) - strlen(temp)) - 1);
-		if(mkdtemp(temp) == NULL)
-		{
-			throw 0;
-		}
-		
-		strncpy(tempDir, temp, sizeof(tempDir));
-		temp[sizeof(tempDir) - 1] = '\0';
-		
-		llinfos << "tempDir is " << tempDir << llendl;
-
-		err = FSPathMakeRef((UInt8*)tempDir, &tempDirRef, NULL);
-
-		if(err != noErr)
-			throw 0;
-				
-		chdir(tempDir);
-		
-		snprintf(temp, sizeof(temp), "SecondLife.dmg");		
-		
-		downloadFile = LLFile::fopen(temp, "wb");		/* Flawfinder: ignore */
-		if(downloadFile == NULL)
-		{
-			throw 0;
-		}
-
-		{
-			CURL *curl = curl_easy_init();
-
-			curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
-	//		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &curl_download_callback);
-			curl_easy_setopt(curl, CURLOPT_FILE, downloadFile);
-			curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0);
-			curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, &curl_progress_callback_func);
-			curl_easy_setopt(curl, CURLOPT_URL,	gUpdateURL);
-			curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
-			
-			sendProgress(0, 1, CFSTR("Downloading..."));
-			
-			CURLcode result = curl_easy_perform(curl);
-			
-			curl_easy_cleanup(curl);
-			
-			if(gCancelled)
-			{
-				llinfos << "User cancel, bailing out."<< llendl;
-				throw 0;
-			}
-			
-			if(result != CURLE_OK)
-			{
-				llinfos << "Error " << result << " while downloading disk image."<< llendl;
-				throw 0;
-			}
-			
-			fclose(downloadFile);
-			downloadFile = NULL;
-		}
-
-	begin_install:
-		sendProgress(0, 0, CFSTR("Mounting image..."));
-		LLFile::mkdir("mnt", 0700);
-		
-		// NOTE: we could add -private at the end of this command line to keep the image from showing up in the Finder,
-		//		but if our cleanup fails, this makes it much harder for the user to unmount the image.
-		std::string mountOutput;
-		boost::format cmdFormat("hdiutil attach %s -mountpoint mnt");
-		cmdFormat % dmgName;
-		FILE* mounter = popen(cmdFormat.str().c_str(), "r");		/* Flawfinder: ignore */
-		
-		if(mounter == NULL)
-		{
-			llinfos << "Failed to mount disk image, exiting."<< llendl;
-			throw 0;
-		}
-		
-		// We need to scan the output from hdiutil to find the device node it uses to attach the disk image.
-		// If we don't have this information, we can't detach it later.
-		while(mounter != NULL)
-		{
-			size_t len = fread(temp, 1, sizeof(temp)-1, mounter);
-			temp[len] = 0;
-			mountOutput.append(temp);
-			if(len < sizeof(temp)-1)
-			{
-				// End of file or error.
-				int result = pclose(mounter);
-				if(result != 0)
-				{
-					// NOTE: We used to abort here, but pclose() started returning 
-					// -1, possibly when the size of the DMG passed a certain point 
-					llinfos << "Unexpected result closing pipe: " << result << llendl; 
-				}
-				mounter = NULL;
-			}
-		}
-		
-		if(!mountOutput.empty())
-		{
-			const char *s = mountOutput.c_str();
-			const char *prefix = "/dev/";
-			char *sub = strstr(s, prefix);
-			
-			if(sub != NULL)
-			{
-				sub += strlen(prefix);	/* Flawfinder: ignore */
-				sscanf(sub, "%1023s", deviceNode);	/* Flawfinder: ignore */
-			}
-		}
-		
-		if(deviceNode[0] != 0)
-		{
-			llinfos << "Disk image attached on /dev/" << deviceNode << llendl;
-		}
-		else
-		{
-			llinfos << "Disk image device node not found!" << llendl;
-			throw 0; 
-		}
-		
-		// Get an FSRef to the new application on the disk image
-		FSRef sourceRef;
-		FSRef mountRef;
-		snprintf(temp, sizeof(temp), "%s/mnt", tempDir);		
-
-		llinfos << "Disk image mount point is: " << temp << llendl;
-
-		err = FSPathMakeRef((UInt8 *)temp, &mountRef, NULL);
-		if(err != noErr)
-		{
-			llinfos << "Couldn't make FSRef to disk image mount point." << llendl;
-			throw 0;
-		}
-
-		sendProgress(0, 0, CFSTR("Searching for the app bundle..."));
-		err = findAppBundleOnDiskImage(&mountRef, &sourceRef);
-		if(err != noErr)
-		{
-			llinfos << "Couldn't find application bundle on mounted disk image." << llendl;
-			throw 0;
-		}
-		else
-		{
-			llinfos << "found the bundle." << llendl;
-		}
-
-		sendProgress(0, 0, CFSTR("Preparing to copy files..."));
-		
-		FSRef asideRef;
-		char aside[MAX_PATH];		/* Flawfinder: ignore */
-		
-		// this will hold the name of the destination target
-		CFStringRef appNameRef;
-
-		if(replacingTarget)
-		{
-			// Get the name of the target we're replacing
-			HFSUniStr255 appNameUniStr;
-			err = FSGetCatalogInfo(&targetRef, 0, NULL, &appNameUniStr, NULL, NULL);
-			if(err != noErr)
-				throw 0;
-			appNameRef = FSCreateStringFromHFSUniStr(NULL, &appNameUniStr);
-			
-			// Move aside old version (into work directory)
-			err = FSMoveObject(&targetRef, &tempDirRef, &asideRef);
-			if(err != noErr)
-			{
-				llwarns << "failed to move aside old version (error code " << 
-					err << ")" << llendl;
-				throw 0;
-			}
-
-			// Grab the path for later use.
-			err = FSRefMakePath(&asideRef, (UInt8*)aside, sizeof(aside));
-		}
-		else
-		{
-			// Construct the name of the target based on the product name
-			char appName[MAX_PATH];		/* Flawfinder: ignore */
-			snprintf(appName, sizeof(appName), "%s.app", gProductName);		
-			appNameRef = CFStringCreateWithCString(NULL, appName, kCFStringEncodingUTF8);
-		}
-		
-		sendProgress(0, 0, CFSTR("Copying files..."));
-		
-		llinfos << "Starting copy..." << llendl;
-
-		// Copy the new version from the disk image to the target location.
-		err = FSCopyObjectSync(
-				&sourceRef,
-				&targetParentRef,
-				appNameRef,
-				&targetRef,
-				kFSFileOperationDefaultOptions);
-		
-		// Grab the path for later use.
-		err = FSRefMakePath(&targetRef, (UInt8*)target, sizeof(target));
-		if(err != noErr)
-			throw 0;
-
-		llinfos << "Copy complete. Target = " << target << llendl;
-
-		if(err != noErr)
-		{
-			// Something went wrong during the copy.  Attempt to put the old version back and bail.
-			(void)FSDeleteObject(&targetRef);
-			if(replacingTarget)
-			{
-				(void)FSMoveObject(&asideRef, &targetParentRef, NULL);
-			}
-			throw 0;
-		}
-		else
-		{
-			// The update has succeeded.  Clear the cache directory.
-
-			sendProgress(0, 0, CFSTR("Clearing cache..."));
-	
-			llinfos << "Clearing cache..." << llendl;
-			
-			gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE,""), "*.*");
-			
-			llinfos << "Clear complete." << llendl;
-
-		}
-	}
-	catch(...)
-	{
-		if(!gCancelled)
-			if(gFailure == noErr)
-				gFailure = -1;
-	}
-
-	// Failures from here on out are all non-fatal and not reported.
-	sendProgress(0, 3, CFSTR("Cleaning up..."));
-
-	// Close disk image file if necessary
-	if(downloadFile != NULL)
-	{
-		llinfos << "Closing download file." << llendl;
-
-		fclose(downloadFile);
-		downloadFile = NULL;
-	}
-
-	sendProgress(1, 3);
-	// Unmount image
-	if(deviceNode[0] != 0)
-	{
-		llinfos << "Detaching disk image." << llendl;
-
-		snprintf(temp, sizeof(temp), "hdiutil detach '%s'", deviceNode);		
-		system(temp);		/* Flawfinder: ignore */
-	}
-
-	sendProgress(2, 3);
-
-	// Move work directory to the trash
-	if(tempDir[0] != 0)
-	{
-		llinfos << "Moving work directory to the trash." << llendl;
-
-		FSRef trashRef;
-		OSStatus err = FSMoveObjectToTrashSync(&tempDirRef, &trashRef, 0); 
-		if(err != noErr) {
-			llwarns << "failed to move files to trash, (error code " <<
-				err << ")" << llendl;
-		}
-	}
-	
-	if(!gCancelled  && !gFailure && (target[0] != 0))
-	{
-		llinfos << "Touching application bundle." << llendl;
-
-		snprintf(temp, sizeof(temp), "touch '%s'", target);		
-		system(temp);		/* Flawfinder: ignore */
-
-		llinfos << "Launching updated application." << llendl;
-
-		snprintf(temp, sizeof(temp), "open '%s'", target);		
-		system(temp);		/* Flawfinder: ignore */
-	}
-
-	sendDone();
-	
-	return(NULL);
-}
-
-#if LL_DARWIN
-#pragma GCC diagnostic warning "-Wdeprecated-declarations"
-#endif
diff --git a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
index 93d2a8fa6e59971cda12e5073413f3de85610447..ff1ed8bfbcd52ad415dbeacc9295c6250df66ed0 100755
--- a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
+++ b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
@@ -28,26 +28,26 @@
 
 #include "linden_common.h"
 
-#if defined(LL_DARWIN)
-	#include <QuickTime/QuickTime.h>
-#elif defined(LL_WINDOWS)
-	#include "llwin32headers.h"
-	#include "MacTypes.h"
-	#include "QTML.h"
-	#include "Movies.h"
-	#include "QDoffscreen.h"
-	#include "FixMath.h"
-	#include "QTLoadLibraryUtils.h"
-#endif
-
 #include "llgl.h"
-
+ 
 #include "llplugininstance.h"
 #include "llpluginmessage.h"
 #include "llpluginmessageclasses.h"
 #include "media_plugin_base.h"
-
+ 
 #if LL_QUICKTIME_ENABLED
+ 
+#if defined(LL_DARWIN)
+#include <QuickTime/QuickTime.h>
+#elif defined(LL_WINDOWS)
+#include "llwin32headers.h"
+#include "MacTypes.h"
+#include "QTML.h"
+#include "Movies.h"
+#include "QDoffscreen.h"
+#include "FixMath.h"
+#include "QTLoadLibraryUtils.h"
+#endif
 
 
 
diff --git a/indra/media_plugins/webkit/CMakeLists.txt b/indra/media_plugins/webkit/CMakeLists.txt
index 0c1c3d800e1646aedf25caf4ad87083beef9b71b..5a8fe90bdd3e9d7c22ee1cc63e8d85ec043b65e9 100755
--- a/indra/media_plugins/webkit/CMakeLists.txt
+++ b/indra/media_plugins/webkit/CMakeLists.txt
@@ -121,12 +121,12 @@ if (DARWIN)
   )
 
   # copy the webkit dylib to the build directory
-  add_custom_command(
-    TARGET media_plugin_webkit POST_BUILD
-#    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/libllqtwebkit.dylib
-    COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/
-    DEPENDS media_plugin_webkit ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib
-    )
+#   add_custom_command(
+#     TARGET media_plugin_webkit POST_BUILD
+# #    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/libllqtwebkit.dylib
+#     COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/
+#     DEPENDS media_plugin_webkit ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib
+#     )
     
 endif (DARWIN)
 
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 3e296c8d9f52f2e345d55b5b85b76de4196f46d9..279d98e5c0ad837be147a9a55d9804ecd98ffa2c 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -47,6 +47,8 @@ include(VisualLeakDetector)
 include(GLOD)
 include(CMakeCopyIfDifferent)
 include(LLAppearance)
+include(PNG)
+include(ZLIB)
 
 if (NOT HAVOK_TPV)
    # When using HAVOK_TPV, the library is precompiled, so no need for this
@@ -1765,7 +1767,6 @@ if (WINDOWS)
       media_plugin_webkit
       winmm_shim
       windows-crash-logger
-      windows-updater
       )
 
     if (FMODEX)
@@ -1811,7 +1812,6 @@ if (WINDOWS)
 
     add_dependencies(${VIEWER_BINARY_NAME}
       SLPlugin
-      windows-updater
       windows-crash-logger
       )
 
@@ -1891,13 +1891,37 @@ else (WINDOWS)
         )
 endif (WINDOWS)
 
-# *NOTE - this list is very sensitive to ordering, test carefully on all
+# *NOTE: - this list is very sensitive to ordering, test carefully on all
 # platforms if you change the releative order of the entries here.
 # In particular, cmake 2.6.4 (when buidling with linux/makefile generators)
 # appears to sometimes de-duplicate redundantly listed dependencies improperly.
 # To work around this, higher level modules should be listed before the modules
 # that they depend upon. -brad
+#
+# *NOTE:  On mixing system shared libraries and updated static archives.
+# We use a number of libraries that have an existence as system libraries,
+# internal-use libraries and applications libraries.  The most-referenced
+# one of these being libz where you can find four or more versions in play
+# at once.  On Linux, libz can be found at link and run time via a number
+# of paths:
+#     
+#      => -lfreetype
+#        => libz.so.1 (on install machine, not build)
+#      => -lSDL
+#        => libz.so.1 (on install machine, not build)
+#      => -lgdk-x11-2.0
+#        => libz.so.1
+#      => -lz
+#
+# We generally want the newest version of the library to provide all symbol
+# resolution.  To that end, when using static archives, the *_PRELOAD_ARCHIVES
+# variables, PNG_PRELOAD_ARCHIVES and ZLIB_PRELOAD_ARCHIVES, get the archives
+# dumped into the target binary and runtime lookup will find the most
+# modern version.
+
 target_link_libraries(${VIEWER_BINARY_NAME}
+    ${PNG_PRELOAD_ARCHIVES}
+    ${ZLIB_PRELOAD_ARCHIVES}
     ${UPDATER_LIBRARIES}
     ${GOOGLE_PERFTOOLS_LIBRARIES}
     ${LLAUDIO_LIBRARIES}
@@ -1924,6 +1948,7 @@ target_link_libraries(${VIEWER_BINARY_NAME}
     ${BOOST_PROGRAM_OPTIONS_LIBRARY}
     ${BOOST_REGEX_LIBRARY}
     ${BOOST_CONTEXT_LIBRARY}
+    ${BOOST_COROUTINE_LIBRARY}
     ${DBUSGLIB_LIBRARIES}
     ${OPENGL_LIBRARIES}
     ${FMODWRAPPER_LIBRARY} # must come after LLAudio
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index 35c6ac5179bf486944e8f38a19d468a9ad6164e0..36f601f10e93b9afb7e1de7d771a4afbbd1f50a1 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-3.7.14
+3.7.16
diff --git a/indra/newview/app_settings/filters/BlackAndWhite.xml b/indra/newview/app_settings/filters/BlackAndWhite.xml
index 101ed8233ab550e0809be18fedf9b55ebcbe108b..7894628d29d3e9c346becd73b466064c54637f46 100644
--- a/indra/newview/app_settings/filters/BlackAndWhite.xml
+++ b/indra/newview/app_settings/filters/BlackAndWhite.xml
@@ -1,19 +1,5 @@
 <llsd>
     <array>
-        <array>
-            <string>linearize</string>
-            <real>0.01</real>
-            <real>1.0</real>
-            <real>1.0</real>
-            <real>1.0</real>
-        </array>
-        <array>
-            <string>contrast</string>
-            <real>0.8</real>
-            <real>1.0</real>
-            <real>1.0</real>
-            <real>1.0</real>
-        </array>
         <array>
             <string>grayscale</string>
         </array>
diff --git a/indra/newview/app_settings/filters/Sepia.xml b/indra/newview/app_settings/filters/Sepia.xml
index 3d577b2998115d6660619732d5bdf89b00819b9d..81d7caf0eb4e265835ebbcf1e0cc455136a03a51 100644
--- a/indra/newview/app_settings/filters/Sepia.xml
+++ b/indra/newview/app_settings/filters/Sepia.xml
@@ -1,30 +1,5 @@
 <llsd>
     <array>
-        <array>
-            <string>linearize</string>
-            <real>0.01</real>
-            <real>1.0</real>
-            <real>1.0</real>
-            <real>1.0</real>
-        </array>
-        <array>
-            <string>contrast</string>
-            <real>0.8</real>
-            <real>1.0</real>
-            <real>1.0</real>
-            <real>1.0</real>
-        </array>
-        <array>
-            <string>stencil</string>
-            <string>vignette</string>
-            <string>fade</string>
-            <real>0.5</real>
-            <real>1.0</real>
-            <real>0.0</real>
-            <real>0.0</real>
-            <real>1.0</real>
-            <real>4.0</real>
-        </array>
         <array>
             <string>sepia</string>
         </array>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index e58fc01918b58ef874eb6a0f242470d509d5b0f7..667b3f2a36ac2fbb86f6edb967ecf802ccd42a46 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -80,7 +80,7 @@
       <key>Type</key>
       <string>Boolean</string>
       <key>Value</key>
-      <integer>0</integer>
+      <integer>1</integer>
     </map>
     <key>AgentPause</key>
     <map>
@@ -11475,17 +11475,6 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
-    <key>SnapshotFiltersEnabled</key>
-    <map>
-        <key>Comment</key>
-        <string>Enable filters in the Snapshot Advanced panel (experimental).</string>
-        <key>Persist</key>
-        <integer>1</integer>
-        <key>Type</key>
-        <string>Boolean</string>
-        <key>Value</key>
-        <integer>0</integer>
-    </map>
     <key>SnapshotFormat</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/icons/beta/secondlife_128.png b/indra/newview/icons/beta/secondlife_128.png
index fa42aa764bd2eb9ba528a264aa5cf9dc7ca82831..af5ae633359cd2ffa3c546d21307f901ab07bb2a 100755
Binary files a/indra/newview/icons/beta/secondlife_128.png and b/indra/newview/icons/beta/secondlife_128.png differ
diff --git a/indra/newview/icons/beta/secondlife_16.png b/indra/newview/icons/beta/secondlife_16.png
index ff648cf3fcd6f178a8211ef0d63f48c766028c08..9e6305d98ffcf057391b876f095400c102aefa84 100755
Binary files a/indra/newview/icons/beta/secondlife_16.png and b/indra/newview/icons/beta/secondlife_16.png differ
diff --git a/indra/newview/icons/beta/secondlife_256.png b/indra/newview/icons/beta/secondlife_256.png
index 245e2c3e9f6ccff71e98f7777643bc2ae708b48b..b0814fc18057d2ba03f707a589a8cb70ca2df159 100755
Binary files a/indra/newview/icons/beta/secondlife_256.png and b/indra/newview/icons/beta/secondlife_256.png differ
diff --git a/indra/newview/icons/beta/secondlife_32.png b/indra/newview/icons/beta/secondlife_32.png
index fd7f46bf4d7a98724a5c7a7ef97242b81013d6b6..a00b3cf53cff7d0f5fc431733f1c02fb08db0135 100755
Binary files a/indra/newview/icons/beta/secondlife_32.png and b/indra/newview/icons/beta/secondlife_32.png differ
diff --git a/indra/newview/icons/beta/secondlife_48.png b/indra/newview/icons/beta/secondlife_48.png
index cc3a795e2b610459c17dfab6540dc6e53f231d7d..551587b1cd78a6b24a06ac42a87b2302f754b17a 100755
Binary files a/indra/newview/icons/beta/secondlife_48.png and b/indra/newview/icons/beta/secondlife_48.png differ
diff --git a/indra/newview/icons/beta/secondlife_512.png b/indra/newview/icons/beta/secondlife_512.png
index a959bd9a9ec12e81fbd7ae1f264a70ab5ca966f1..99226de74e9bca136b09a92ee52fcd3d9e2e6352 100755
Binary files a/indra/newview/icons/beta/secondlife_512.png and b/indra/newview/icons/beta/secondlife_512.png differ
diff --git a/indra/newview/icons/project/secondlife_128.png b/indra/newview/icons/project/secondlife_128.png
index d67b8228f96e017870dac4f996f0e2f27bdbc235..b1b49973064e58488ac98e5dc28b8ce3763b3766 100755
Binary files a/indra/newview/icons/project/secondlife_128.png and b/indra/newview/icons/project/secondlife_128.png differ
diff --git a/indra/newview/icons/project/secondlife_16.png b/indra/newview/icons/project/secondlife_16.png
index 91493a033c93e2e33b889b77dbc1654bc2f64f0c..7d3d74b5344771afbd9f1ff1f8d75a441284f5ee 100755
Binary files a/indra/newview/icons/project/secondlife_16.png and b/indra/newview/icons/project/secondlife_16.png differ
diff --git a/indra/newview/icons/project/secondlife_256.png b/indra/newview/icons/project/secondlife_256.png
index cccfaf7cbafae6a1ebc16560f227128f86e544bb..88ad9592751afe6294fa4f15fbc280e82e2b13b8 100755
Binary files a/indra/newview/icons/project/secondlife_256.png and b/indra/newview/icons/project/secondlife_256.png differ
diff --git a/indra/newview/icons/project/secondlife_32.png b/indra/newview/icons/project/secondlife_32.png
index ad7b33f78931cc7603604de90ef29d2f72f51032..e55f75e1ddbba4df5e5ef466aa124ffcf873d8b7 100755
Binary files a/indra/newview/icons/project/secondlife_32.png and b/indra/newview/icons/project/secondlife_32.png differ
diff --git a/indra/newview/icons/project/secondlife_48.png b/indra/newview/icons/project/secondlife_48.png
index 104a931fbc92167e3f9c514b7b56ef4cba01849c..c29703e1649860de4544dd8660214d466ce1dbca 100755
Binary files a/indra/newview/icons/project/secondlife_48.png and b/indra/newview/icons/project/secondlife_48.png differ
diff --git a/indra/newview/icons/project/secondlife_512.png b/indra/newview/icons/project/secondlife_512.png
index 74e2fa9bc65a3f02dccf53a0add34cc9624ad569..4fa3474d701752310676d1b2b69bccd9d53c1f90 100755
Binary files a/indra/newview/icons/project/secondlife_512.png and b/indra/newview/icons/project/secondlife_512.png differ
diff --git a/indra/newview/icons/release/secondlife_128.png b/indra/newview/icons/release/secondlife_128.png
index bcf94dcae8fa6b7fda4eab2d75deaf8b756fac26..4c9544f49837be4dec00a426239a9191f9612f92 100755
Binary files a/indra/newview/icons/release/secondlife_128.png and b/indra/newview/icons/release/secondlife_128.png differ
diff --git a/indra/newview/icons/release/secondlife_16.png b/indra/newview/icons/release/secondlife_16.png
index 90311ea8b0e06d238ebfe7ba829c91d695e4b6e4..bb3168b8be416de728cf281814b56592a030d064 100755
Binary files a/indra/newview/icons/release/secondlife_16.png and b/indra/newview/icons/release/secondlife_16.png differ
diff --git a/indra/newview/icons/release/secondlife_256.png b/indra/newview/icons/release/secondlife_256.png
index a89fb4c74f1234bcc7a4efd522b1d02f42f66bf6..bece338a909ad32f782943ef7441fee930809191 100755
Binary files a/indra/newview/icons/release/secondlife_256.png and b/indra/newview/icons/release/secondlife_256.png differ
diff --git a/indra/newview/icons/release/secondlife_32.png b/indra/newview/icons/release/secondlife_32.png
index 530e8fc80ccf073fef4816c8f8152f61d7f43abc..736359c1475427ce71ef5e9fd9baa2de433fdf00 100755
Binary files a/indra/newview/icons/release/secondlife_32.png and b/indra/newview/icons/release/secondlife_32.png differ
diff --git a/indra/newview/icons/release/secondlife_48.png b/indra/newview/icons/release/secondlife_48.png
index cb33c51f8a6edd5e2913c120ae16c3e66616d66c..07d39ae5854c4d6d9a67b85d21abed1c4d2353bb 100755
Binary files a/indra/newview/icons/release/secondlife_48.png and b/indra/newview/icons/release/secondlife_48.png differ
diff --git a/indra/newview/icons/release/secondlife_512.png b/indra/newview/icons/release/secondlife_512.png
index f291e60586ec755259e20d892783ed347d19d701..53d1643f45b8f276f661798ee7acd87871cbd7d3 100755
Binary files a/indra/newview/icons/release/secondlife_512.png and b/indra/newview/icons/release/secondlife_512.png differ
diff --git a/indra/newview/icons/test/secondlife_128.png b/indra/newview/icons/test/secondlife_128.png
index 019f65db2885f4dd120b59681d7fdddd46c84bcb..486772b6d3e9c37d75b2a5e2715f1a1066a7f1d4 100755
Binary files a/indra/newview/icons/test/secondlife_128.png and b/indra/newview/icons/test/secondlife_128.png differ
diff --git a/indra/newview/icons/test/secondlife_16.png b/indra/newview/icons/test/secondlife_16.png
index 91493a033c93e2e33b889b77dbc1654bc2f64f0c..7d3d74b5344771afbd9f1ff1f8d75a441284f5ee 100755
Binary files a/indra/newview/icons/test/secondlife_16.png and b/indra/newview/icons/test/secondlife_16.png differ
diff --git a/indra/newview/icons/test/secondlife_256.png b/indra/newview/icons/test/secondlife_256.png
index f402424c51e957af470ac242b9a94029656625d3..56c781788d594e8b516c76dcec84266fc3774d28 100755
Binary files a/indra/newview/icons/test/secondlife_256.png and b/indra/newview/icons/test/secondlife_256.png differ
diff --git a/indra/newview/icons/test/secondlife_32.png b/indra/newview/icons/test/secondlife_32.png
index 80d6efe13d8bbd28d44d6a1a4a7bce001b5a4437..476029db61a079734e0e4c44dc4b129280d28f8f 100755
Binary files a/indra/newview/icons/test/secondlife_32.png and b/indra/newview/icons/test/secondlife_32.png differ
diff --git a/indra/newview/icons/test/secondlife_48.png b/indra/newview/icons/test/secondlife_48.png
index bba938feba214f83099956d36aeb9a2fd8912a5d..d7de7849f90b7cf1c4f54359d208e0e27c1eef88 100755
Binary files a/indra/newview/icons/test/secondlife_48.png and b/indra/newview/icons/test/secondlife_48.png differ
diff --git a/indra/newview/icons/test/secondlife_512.png b/indra/newview/icons/test/secondlife_512.png
index 10ff65312b6c5801e28a1734a4412a9a6ba28d46..a4b1e4974c6661aec54b0aee7e0bc9571957fec4 100755
Binary files a/indra/newview/icons/test/secondlife_512.png and b/indra/newview/icons/test/secondlife_512.png differ
diff --git a/indra/newview/llfloaterfacebook.cpp b/indra/newview/llfloaterfacebook.cpp
index 9e3f917eae9f98407b0beded1e1592679d36016f..6888e076aab65f686049f82425c94aef6939b7f6 100644
--- a/indra/newview/llfloaterfacebook.cpp
+++ b/indra/newview/llfloaterfacebook.cpp
@@ -58,7 +58,6 @@ static LLPanelInjector<LLFacebookStatusPanel> t_panel_status("llfacebookstatuspa
 static LLPanelInjector<LLFacebookPhotoPanel> t_panel_photo("llfacebookphotopanel");
 static LLPanelInjector<LLFacebookCheckinPanel> t_panel_checkin("llfacebookcheckinpanel");
 static LLPanelInjector<LLFacebookFriendsPanel> t_panel_friends("llfacebookfriendspanel");
-static LLPanelInjector<LLFacebookAccountPanel> t_panel_account("llfacebookaccountpanel");
 
 const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte
 const std::string DEFAULT_CHECKIN_LOCATION_URL = "http://maps.secondlife.com/";
@@ -99,13 +98,29 @@ S32 compute_jpeg_quality(S32 width, S32 height)
 LLFacebookStatusPanel::LLFacebookStatusPanel() :
 	mMessageTextEditor(NULL),
 	mPostButton(NULL),
-    mCancelButton(NULL)
+    mCancelButton(NULL),
+	mAccountCaptionLabel(NULL),
+	mAccountNameLabel(NULL),
+	mPanelButtons(NULL),
+	mConnectButton(NULL),
+	mDisconnectButton(NULL)
 {
+	mCommitCallbackRegistrar.add("SocialSharing.Connect", boost::bind(&LLFacebookStatusPanel::onConnect, this));
+	mCommitCallbackRegistrar.add("SocialSharing.Disconnect", boost::bind(&LLFacebookStatusPanel::onDisconnect, this));
+
+	setVisibleCallback(boost::bind(&LLFacebookStatusPanel::onVisibilityChange, this, _2));
+
 	mCommitCallbackRegistrar.add("SocialSharing.SendStatus", boost::bind(&LLFacebookStatusPanel::onSend, this));
 }
 
 BOOL LLFacebookStatusPanel::postBuild()
 {
+	mAccountCaptionLabel = getChild<LLTextBox>("account_caption_label");
+	mAccountNameLabel = getChild<LLTextBox>("account_name_label");
+	mPanelButtons = getChild<LLUICtrl>("panel_buttons");
+	mConnectButton = getChild<LLUICtrl>("connect_btn");
+	mDisconnectButton = getChild<LLUICtrl>("disconnect_btn");
+
 	mMessageTextEditor = getChild<LLUICtrl>("status_message");
 	mPostButton = getChild<LLUICtrl>("post_status_btn");
 	mCancelButton = getChild<LLUICtrl>("cancel_status_btn");
@@ -115,6 +130,16 @@ BOOL LLFacebookStatusPanel::postBuild()
 
 void LLFacebookStatusPanel::draw()
 {
+	LLFacebookConnect::EConnectionState connection_state = LLFacebookConnect::instance().getConnectionState();
+
+	//Disable the 'disconnect' button and the 'use another account' button when disconnecting in progress
+	bool disconnecting = connection_state == LLFacebookConnect::FB_DISCONNECTING;
+	mDisconnectButton->setEnabled(!disconnecting);
+
+	//Disable the 'connect' button when a connection is in progress
+	bool connecting = connection_state == LLFacebookConnect::FB_CONNECTION_IN_PROGRESS;
+	mConnectButton->setEnabled(!connecting);
+
     if (mMessageTextEditor && mPostButton && mCancelButton)
 	{
         bool no_ongoing_connection = !(LLFacebookConnect::instance().isTransactionOngoing());
@@ -131,7 +156,7 @@ void LLFacebookStatusPanel::onSend()
 {
 	LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookStatusPanel"); // just in case it is already listening
 	LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookStatusPanel", boost::bind(&LLFacebookStatusPanel::onFacebookConnectStateChange, this, _1));
-		
+	
 	// Connect to Facebook if necessary and then post
 	if (LLFacebookConnect::instance().isConnected())
 	{
@@ -160,6 +185,24 @@ bool LLFacebookStatusPanel::onFacebookConnectStateChange(const LLSD& data)
 	return false;
 }
 
+bool LLFacebookStatusPanel::onFacebookConnectAccountStateChange(const LLSD& data)
+{
+	if(LLFacebookConnect::instance().isConnected())
+	{
+		//In process of disconnecting so leave the layout as is
+		if(data.get("enum").asInteger() != LLFacebookConnect::FB_DISCONNECTING)
+		{
+			showConnectedLayout();
+		}
+	}
+	else
+	{
+		showDisconnectedLayout();
+	}
+
+	return false;
+}
+
 void LLFacebookStatusPanel::sendStatus()
 {
 	std::string message = mMessageTextEditor->getValue().asString();
@@ -169,6 +212,103 @@ void LLFacebookStatusPanel::sendStatus()
 	}
 }
 
+void LLFacebookStatusPanel::onVisibilityChange(BOOL visible)
+{
+	if(visible)
+	{
+		LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookAccountPanel");
+		LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookAccountPanel", boost::bind(&LLFacebookStatusPanel::onFacebookConnectAccountStateChange, this, _1));
+
+		LLEventPumps::instance().obtain("FacebookConnectInfo").stopListening("LLFacebookAccountPanel");
+		LLEventPumps::instance().obtain("FacebookConnectInfo").listen("LLFacebookAccountPanel", boost::bind(&LLFacebookStatusPanel::onFacebookConnectInfoChange, this));
+
+		//Connected
+		if(LLFacebookConnect::instance().isConnected())
+		{
+			showConnectedLayout();
+		}
+		//Check if connected (show disconnected layout in meantime)
+		else
+		{
+			showDisconnectedLayout();
+		}
+        if ((LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_NOT_CONNECTED) ||
+            (LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_CONNECTION_FAILED))
+        {
+            LLFacebookConnect::instance().checkConnectionToFacebook();
+        }
+	}
+	else
+	{
+		LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookAccountPanel");
+		LLEventPumps::instance().obtain("FacebookConnectInfo").stopListening("LLFacebookAccountPanel");
+	}
+}
+
+bool LLFacebookStatusPanel::onFacebookConnectInfoChange()
+{
+	LLSD info = LLFacebookConnect::instance().getInfo();
+	std::string clickable_name;
+
+	//Strings of format [http://www.somewebsite.com Click Me] become clickable text
+	if(info.has("link") && info.has("name"))
+	{
+		clickable_name = "[" + info["link"].asString() + " " + info["name"].asString() + "]";
+	}
+
+	mAccountNameLabel->setText(clickable_name);
+
+	return false;
+}
+
+void LLFacebookStatusPanel::showConnectButton()
+{
+	if(!mConnectButton->getVisible())
+	{
+		mConnectButton->setVisible(TRUE);
+		mDisconnectButton->setVisible(FALSE);
+	}
+}
+
+void LLFacebookStatusPanel::hideConnectButton()
+{
+	if(mConnectButton->getVisible())
+	{
+		mConnectButton->setVisible(FALSE);
+		mDisconnectButton->setVisible(TRUE);
+	}
+}
+
+void LLFacebookStatusPanel::showDisconnectedLayout()
+{
+	mAccountCaptionLabel->setText(getString("facebook_disconnected"));
+	mAccountNameLabel->setText(std::string(""));
+	showConnectButton();
+}
+
+void LLFacebookStatusPanel::showConnectedLayout()
+{
+	LLFacebookConnect::instance().loadFacebookInfo();
+
+	mAccountCaptionLabel->setText(getString("facebook_connected"));
+	hideConnectButton();
+}
+
+void LLFacebookStatusPanel::onConnect()
+{
+	LLFacebookConnect::instance().checkConnectionToFacebook(true);
+
+	//Clear only the facebook browser cookies so that the facebook login screen appears
+	LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com"); 
+}
+
+void LLFacebookStatusPanel::onDisconnect()
+{
+	LLFacebookConnect::instance().disconnectFromFacebook();
+
+	LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com"); 
+}
+
 void LLFacebookStatusPanel::clearAndClose()
 {
 	mMessageTextEditor->setValue("");
@@ -185,7 +325,6 @@ void LLFacebookStatusPanel::clearAndClose()
 ///////////////////////////
 
 LLFacebookPhotoPanel::LLFacebookPhotoPanel() :
-mSnapshotPanel(NULL),
 mResolutionComboBox(NULL),
 mRefreshBtn(NULL),
 mBtnPreview(NULL),
@@ -213,7 +352,6 @@ BOOL LLFacebookPhotoPanel::postBuild()
 {
 	setVisibleCallback(boost::bind(&LLFacebookPhotoPanel::onVisibilityChange, this, _2));
 	
-	mSnapshotPanel = getChild<LLUICtrl>("snapshot_panel");
 	mResolutionComboBox = getChild<LLUICtrl>("resolution_combobox");
 	mResolutionComboBox->setValue("[i1200,i630]"); // hardcoded defaults ftw!
 	mResolutionComboBox->setCommitCallback(boost::bind(&LLFacebookPhotoPanel::updateResolution, this, TRUE));
@@ -300,16 +438,9 @@ void LLFacebookPhotoPanel::draw()
 		// calc preview offset within the preview rect
 		const S32 local_offset_x = (thumbnail_rect.getWidth()  - thumbnail_w) / 2 ;
 		const S32 local_offset_y = (thumbnail_rect.getHeight() - thumbnail_h) / 2 ;
+		S32 offset_x = thumbnail_rect.mLeft + local_offset_x;
+		S32 offset_y = thumbnail_rect.mBottom + local_offset_y;
 
-		// calc preview offset within the floater rect
-        // Hack : To get the full offset, we need to take into account each and every offset of each widgets up to the floater.
-        // This is almost as arbitrary as using a fixed offset so that's what we do here for the sake of simplicity.
-        // *TODO : Get the offset looking through the hierarchy of widgets, should be done in postBuild() so to avoid traversing the hierarchy each time.
-		S32 offset_x = thumbnail_rect.mLeft + local_offset_x - 1;
-		S32 offset_y = thumbnail_rect.mBottom + local_offset_y - 39;
-        
-		mSnapshotPanel->localPointToOtherView(offset_x, offset_y, &offset_x, &offset_y, getParentByType<LLFloater>());
-        
 		gGL.matrixMode(LLRender::MM_MODELVIEW);
 		// Apply floater transparency to the texture unless the floater is focused.
 		F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency();
@@ -344,7 +475,7 @@ void LLFacebookPhotoPanel::onVisibilityChange(BOOL visible)
 			LLSnapshotLivePreview* preview = getPreviewView();
 			if(preview)
 			{
-				lldebugs << "opened, updating snapshot" << llendl;
+				LL_DEBUGS() << "opened, updating snapshot" << LL_ENDL;
 				preview->updateSnapshot(TRUE);
 			}
 		}
@@ -477,7 +608,7 @@ void LLFacebookPhotoPanel::updateControls()
 	BOOL got_snap = previewp && previewp->getSnapshotUpToDate();
     
 	// *TODO: Separate maximum size for Web images from postcards
-	lldebugs << "Is snapshot up-to-date? " << got_snap << llendl;
+	LL_DEBUGS() << "Is snapshot up-to-date? " << got_snap << LL_ENDL;
     
 	updateResolution(FALSE);
 }
@@ -507,13 +638,13 @@ void LLFacebookPhotoPanel::updateResolution(BOOL do_update)
 		if (width == 0 || height == 0)
 		{
 			// take resolution from current window size
-			lldebugs << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << llendl;
+			LL_DEBUGS() << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << LL_ENDL;
 			previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw());
 		}
 		else
 		{
 			// use the resolution from the selected pre-canned drop-down choice
-			lldebugs << "Setting preview res selected from combo: " << width << "x" << height << llendl;
+			LL_DEBUGS() << "Setting preview res selected from combo: " << width << "x" << height << LL_ENDL;
 			previewp->setSize(width, height);
 		}
 
@@ -887,164 +1018,6 @@ bool LLFacebookFriendsPanel::onConnectedToFacebook(const LLSD& data)
 	return false;
 }
 
-///////////////////////////
-//LLFacebookAccountPanel//////
-///////////////////////////
-
-LLFacebookAccountPanel::LLFacebookAccountPanel() : 
-mAccountCaptionLabel(NULL),
-mAccountNameLabel(NULL),
-mPanelButtons(NULL),
-mConnectButton(NULL),
-mDisconnectButton(NULL)
-{
-	mCommitCallbackRegistrar.add("SocialSharing.Connect", boost::bind(&LLFacebookAccountPanel::onConnect, this));
-	mCommitCallbackRegistrar.add("SocialSharing.Disconnect", boost::bind(&LLFacebookAccountPanel::onDisconnect, this));
-
-	setVisibleCallback(boost::bind(&LLFacebookAccountPanel::onVisibilityChange, this, _2));
-}
-
-BOOL LLFacebookAccountPanel::postBuild()
-{
-	mAccountCaptionLabel = getChild<LLTextBox>("account_caption_label");
-	mAccountNameLabel = getChild<LLTextBox>("account_name_label");
-	mPanelButtons = getChild<LLUICtrl>("panel_buttons");
-	mConnectButton = getChild<LLUICtrl>("connect_btn");
-	mDisconnectButton = getChild<LLUICtrl>("disconnect_btn");
-
-	return LLPanel::postBuild();
-}
-
-void LLFacebookAccountPanel::draw()
-{
-	LLFacebookConnect::EConnectionState connection_state = LLFacebookConnect::instance().getConnectionState();
-
-	//Disable the 'disconnect' button and the 'use another account' button when disconnecting in progress
-	bool disconnecting = connection_state == LLFacebookConnect::FB_DISCONNECTING;
-	mDisconnectButton->setEnabled(!disconnecting);
-
-	//Disable the 'connect' button when a connection is in progress
-	bool connecting = connection_state == LLFacebookConnect::FB_CONNECTION_IN_PROGRESS;
-	mConnectButton->setEnabled(!connecting);
-
-	LLPanel::draw();
-}
-
-void LLFacebookAccountPanel::onVisibilityChange(BOOL visible)
-{
-	if(visible)
-	{
-		LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookAccountPanel");
-		LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookAccountPanel", boost::bind(&LLFacebookAccountPanel::onFacebookConnectStateChange, this, _1));
-
-		LLEventPumps::instance().obtain("FacebookConnectInfo").stopListening("LLFacebookAccountPanel");
-		LLEventPumps::instance().obtain("FacebookConnectInfo").listen("LLFacebookAccountPanel", boost::bind(&LLFacebookAccountPanel::onFacebookConnectInfoChange, this));
-
-		//Connected
-		if(LLFacebookConnect::instance().isConnected())
-		{
-			showConnectedLayout();
-		}
-		//Check if connected (show disconnected layout in meantime)
-		else
-		{
-			showDisconnectedLayout();
-		}
-        if ((LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_NOT_CONNECTED) ||
-            (LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_CONNECTION_FAILED))
-        {
-            LLFacebookConnect::instance().checkConnectionToFacebook();
-        }
-	}
-	else
-	{
-		LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookAccountPanel");
-		LLEventPumps::instance().obtain("FacebookConnectInfo").stopListening("LLFacebookAccountPanel");
-	}
-}
-
-bool LLFacebookAccountPanel::onFacebookConnectStateChange(const LLSD& data)
-{
-	if(LLFacebookConnect::instance().isConnected())
-	{
-		//In process of disconnecting so leave the layout as is
-		if(data.get("enum").asInteger() != LLFacebookConnect::FB_DISCONNECTING)
-		{
-			showConnectedLayout();
-		}
-	}
-	else
-	{
-		showDisconnectedLayout();
-	}
-
-	return false;
-}
-
-bool LLFacebookAccountPanel::onFacebookConnectInfoChange()
-{
-	LLSD info = LLFacebookConnect::instance().getInfo();
-	std::string clickable_name;
-
-	//Strings of format [http://www.somewebsite.com Click Me] become clickable text
-	if(info.has("link") && info.has("name"))
-	{
-		clickable_name = "[" + info["link"].asString() + " " + info["name"].asString() + "]";
-	}
-
-	mAccountNameLabel->setText(clickable_name);
-
-	return false;
-}
-
-void LLFacebookAccountPanel::showConnectButton()
-{
-	if(!mConnectButton->getVisible())
-	{
-		mConnectButton->setVisible(TRUE);
-		mDisconnectButton->setVisible(FALSE);
-	}
-}
-
-void LLFacebookAccountPanel::hideConnectButton()
-{
-	if(mConnectButton->getVisible())
-	{
-		mConnectButton->setVisible(FALSE);
-		mDisconnectButton->setVisible(TRUE);
-	}
-}
-
-void LLFacebookAccountPanel::showDisconnectedLayout()
-{
-	mAccountCaptionLabel->setText(getString("facebook_disconnected"));
-	mAccountNameLabel->setText(std::string(""));
-	showConnectButton();
-}
-
-void LLFacebookAccountPanel::showConnectedLayout()
-{
-	LLFacebookConnect::instance().loadFacebookInfo();
-
-	mAccountCaptionLabel->setText(getString("facebook_connected"));
-	hideConnectButton();
-}
-
-void LLFacebookAccountPanel::onConnect()
-{
-	LLFacebookConnect::instance().checkConnectionToFacebook(true);
-
-	//Clear only the facebook browser cookies so that the facebook login screen appears
-	LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com"); 
-}
-
-void LLFacebookAccountPanel::onDisconnect()
-{
-	LLFacebookConnect::instance().disconnectFromFacebook();
-
-	LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com"); 
-}
-
 ////////////////////////
 //LLFloaterFacebook///////
 ////////////////////////
@@ -1094,7 +1067,7 @@ void LLFloaterFacebook::showPhotoPanel()
 	LLTabContainer* parent = dynamic_cast<LLTabContainer*>(mFacebookPhotoPanel->getParent());
 	if (!parent)
 	{
-		llwarns << "Cannot find panel container" << llendl;
+		LL_WARNS() << "Cannot find panel container" << LL_ENDL;
 		return;
 	}
 
diff --git a/indra/newview/llfloaterfacebook.h b/indra/newview/llfloaterfacebook.h
index 34356412d6e7021f95eba8d1ae550484a318c99b..a4ca666b200531bc21135d3a00a90ddeb01f980e 100644
--- a/indra/newview/llfloaterfacebook.h
+++ b/indra/newview/llfloaterfacebook.h
@@ -46,11 +46,28 @@ class LLFacebookStatusPanel : public LLPanel
 	void draw();
     void onSend();
 	bool onFacebookConnectStateChange(const LLSD& data);
+	bool onFacebookConnectAccountStateChange(const LLSD& data);
 
 	void sendStatus();
 	void clearAndClose();
 
 private:
+	void onVisibilityChange(BOOL new_visibility);
+	bool onFacebookConnectInfoChange();
+	void onConnect();
+	void onUseAnotherAccount();
+	void onDisconnect();
+
+	void showConnectButton();
+	void hideConnectButton();
+	void showDisconnectedLayout();
+	void showConnectedLayout();
+
+	LLTextBox * mAccountCaptionLabel;
+	LLTextBox * mAccountNameLabel;
+	LLUICtrl * mPanelButtons;
+	LLUICtrl * mConnectButton;
+	LLUICtrl * mDisconnectButton;
 	LLUICtrl* mMessageTextEditor;
 	LLUICtrl* mPostButton;
 	LLUICtrl* mCancelButton;
@@ -87,7 +104,6 @@ class LLFacebookPhotoPanel : public LLPanel
     
 	LLHandle<LLView> mPreviewHandle;
 
-	LLUICtrl * mSnapshotPanel;
 	LLUICtrl * mResolutionComboBox;
 	LLUICtrl * mFilterComboBox;
 	LLUICtrl * mRefreshBtn;
@@ -147,33 +163,6 @@ class LLFacebookFriendsPanel : public LLPanel, public LLFriendObserver
 	LLAvatarList* mSuggestedFriends;
 };
 
-class LLFacebookAccountPanel : public LLPanel
-{
-public:
-	LLFacebookAccountPanel();
-	BOOL postBuild();
-	void draw();
-
-private:
-	void onVisibilityChange(BOOL new_visibility);
-	bool onFacebookConnectStateChange(const LLSD& data);
-	bool onFacebookConnectInfoChange();
-	void onConnect();
-	void onUseAnotherAccount();
-	void onDisconnect();
-
-	void showConnectButton();
-	void hideConnectButton();
-	void showDisconnectedLayout();
-	void showConnectedLayout();
-
-	LLTextBox * mAccountCaptionLabel;
-	LLTextBox * mAccountNameLabel;
-	LLUICtrl * mPanelButtons;
-	LLUICtrl * mConnectButton;
-	LLUICtrl * mDisconnectButton;
-};
-
 class LLFloaterFacebook : public LLFloater
 {
 public:
diff --git a/indra/newview/llfloaterflickr.cpp b/indra/newview/llfloaterflickr.cpp
index 4e6d98ecfabc5362ab07c498f863316eb2122bec..36afab86b79b7b12bd18f450949aa57d1f50d60b 100644
--- a/indra/newview/llfloaterflickr.cpp
+++ b/indra/newview/llfloaterflickr.cpp
@@ -65,7 +65,6 @@ const std::string FLICKR_MACHINE_TAGS_NAMESPACE = "secondlife";
 ///////////////////////////
 
 LLFlickrPhotoPanel::LLFlickrPhotoPanel() :
-mSnapshotPanel(NULL),
 mResolutionComboBox(NULL),
 mRefreshBtn(NULL),
 mBtnPreview(NULL),
@@ -96,7 +95,6 @@ BOOL LLFlickrPhotoPanel::postBuild()
 {
 	setVisibleCallback(boost::bind(&LLFlickrPhotoPanel::onVisibilityChange, this, _2));
 	
-	mSnapshotPanel = getChild<LLUICtrl>("snapshot_panel");
 	mResolutionComboBox = getChild<LLUICtrl>("resolution_combobox");
 	mResolutionComboBox->setCommitCallback(boost::bind(&LLFlickrPhotoPanel::updateResolution, this, TRUE));
 	mFilterComboBox = getChild<LLUICtrl>("filters_combobox");
@@ -191,16 +189,9 @@ void LLFlickrPhotoPanel::draw()
 		// calc preview offset within the preview rect
 		const S32 local_offset_x = (thumbnail_rect.getWidth()  - thumbnail_w) / 2 ;
 		const S32 local_offset_y = (thumbnail_rect.getHeight() - thumbnail_h) / 2 ;
+		S32 offset_x = thumbnail_rect.mLeft + local_offset_x;
+		S32 offset_y = thumbnail_rect.mBottom + local_offset_y;
 
-		// calc preview offset within the floater rect
-        // Hack : To get the full offset, we need to take into account each and every offset of each widgets up to the floater.
-        // This is almost as arbitrary as using a fixed offset so that's what we do here for the sake of simplicity.
-        // *TODO : Get the offset looking through the hierarchy of widgets, should be done in postBuild() so to avoid traversing the hierarchy each time.
-		S32 offset_x = thumbnail_rect.mLeft + local_offset_x - 1;
-		S32 offset_y = thumbnail_rect.mBottom + local_offset_y - 39;
-        
-		mSnapshotPanel->localPointToOtherView(offset_x, offset_y, &offset_x, &offset_y, getParentByType<LLFloater>());
-        
 		gGL.matrixMode(LLRender::MM_MODELVIEW);
 		// Apply floater transparency to the texture unless the floater is focused.
 		F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency();
@@ -235,7 +226,7 @@ void LLFlickrPhotoPanel::onVisibilityChange(BOOL visible)
 			LLSnapshotLivePreview* preview = getPreviewView();
 			if(preview)
 			{
-				lldebugs << "opened, updating snapshot" << llendl;
+				LL_DEBUGS() << "opened, updating snapshot" << LL_ENDL;
 				preview->updateSnapshot(TRUE);
 			}
 		}
@@ -427,7 +418,7 @@ void LLFlickrPhotoPanel::updateControls()
 	BOOL got_snap = previewp && previewp->getSnapshotUpToDate();
 
 	// *TODO: Separate maximum size for Web images from postcards
-	lldebugs << "Is snapshot up-to-date? " << got_snap << llendl;
+	LL_DEBUGS() << "Is snapshot up-to-date? " << got_snap << LL_ENDL;
 
 	updateResolution(FALSE);
 }
@@ -457,13 +448,13 @@ void LLFlickrPhotoPanel::updateResolution(BOOL do_update)
 		if (width == 0 || height == 0)
 		{
 			// take resolution from current window size
-			lldebugs << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << llendl;
+			LL_DEBUGS() << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << LL_ENDL;
 			previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw());
 		}
 		else
 		{
 			// use the resolution from the selected pre-canned drop-down choice
-			lldebugs << "Setting preview res selected from combo: " << width << "x" << height << llendl;
+			LL_DEBUGS() << "Setting preview res selected from combo: " << width << "x" << height << LL_ENDL;
 			previewp->setSize(width, height);
 		}
 
@@ -726,7 +717,7 @@ void LLFloaterFlickr::showPhotoPanel()
 	LLTabContainer* parent = dynamic_cast<LLTabContainer*>(mFlickrPhotoPanel->getParent());
 	if (!parent)
 	{
-		llwarns << "Cannot find panel container" << llendl;
+		LL_WARNS() << "Cannot find panel container" << LL_ENDL;
 		return;
 	}
 
diff --git a/indra/newview/llfloaterflickr.h b/indra/newview/llfloaterflickr.h
index ba27c9a3d8bccbebf320f4a86c9731ab3f63932f..74da3bcea9ad214f01b106d58851e4b022740550 100644
--- a/indra/newview/llfloaterflickr.h
+++ b/indra/newview/llfloaterflickr.h
@@ -67,7 +67,6 @@ class LLFlickrPhotoPanel : public LLPanel
 
 	LLHandle<LLView> mPreviewHandle;
 
-	LLUICtrl * mSnapshotPanel;
 	LLUICtrl * mResolutionComboBox;
 	LLUICtrl * mFilterComboBox;
 	LLUICtrl * mRefreshBtn;
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 7213064746a7fbbd88fb8b6216c49de2972745ca..d01c089eaf0df67d857967b12d856cb54e27415f 100755
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -1517,6 +1517,8 @@ void LLPanelLandObjects::onClickRefresh(void* userdata)
 	LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
 	if (!region) return;
 
+	self->mBtnRefresh->setEnabled(false);
+
 	// ready the list for results
 	self->mOwnerList->deleteAllItems();
 	self->mOwnerList->setCommentText(LLTrans::getString("Searching"));
@@ -1576,6 +1578,7 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo
 		{
 			msg->getU32("DataExtended", "TimeStamp", most_recent_time, i);
 		}
+
 		if (owner_id.isNull())
 		{
 			continue;
@@ -1611,10 +1614,10 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo
 		item_params.columns.add().value(LLDate((time_t)most_recent_time)).font(FONT).column("mostrecent").type("date");
 
 		self->mOwnerList->addNameItemRow(item_params);
-
 		LL_DEBUGS() << "object owner " << owner_id << " (" << (is_group_owned ? "group" : "agent")
 				<< ") owns " << object_count << " objects." << LL_ENDL;
 	}
+
 	// check for no results
 	if (0 == self->mOwnerList->getItemCount())
 	{
@@ -1624,6 +1627,8 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo
 	{
 		self->mOwnerList->setEnabled(TRUE);
 	}
+
+	self->mBtnRefresh->setEnabled(true);
 }
 
 // static
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 5e9b25b474877c04d4771e21501edb4d00d9e806..a2af9da67024e02245c42766149a24cccac9abf9 100755
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -481,6 +481,17 @@ void LLFloaterRegionInfo::refresh()
 	}
 }
 
+void LLFloaterRegionInfo::enableTopButtons()
+{
+	getChildView("top_colliders_btn")->setEnabled(true);
+	getChildView("top_scripts_btn")->setEnabled(true);
+}
+
+void LLFloaterRegionInfo::disableTopButtons()
+{
+	getChildView("top_colliders_btn")->setEnabled(false);
+	getChildView("top_scripts_btn")->setEnabled(false);
+}
 
 ///----------------------------------------------------------------------------
 /// Local class implementation
@@ -1033,6 +1044,11 @@ void LLPanelRegionDebugInfo::onClickTopColliders(void* data)
 	if(!instance) return;
 	LLFloaterReg::showInstance("top_objects");
 	instance->clearList();
+	instance->disableRefreshBtn();
+
+	self->getChildView("top_colliders_btn")->setEnabled(false);
+	self->getChildView("top_scripts_btn")->setEnabled(false);
+
 	self->sendEstateOwnerMessage(gMessageSystem, "colliders", invoice, strings);
 }
 
@@ -1047,6 +1063,11 @@ void LLPanelRegionDebugInfo::onClickTopScripts(void* data)
 	if(!instance) return;
 	LLFloaterReg::showInstance("top_objects");
 	instance->clearList();
+	instance->disableRefreshBtn();
+
+	self->getChildView("top_colliders_btn")->setEnabled(false);
+	self->getChildView("top_scripts_btn")->setEnabled(false);
+
 	self->sendEstateOwnerMessage(gMessageSystem, "scripts", invoice, strings);
 }
 
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index 5bc4273d5f81ca68f83f13d8689ed2f7119e10c6..792f60ebc8260caa43870d2b762406457add8b26 100755
--- a/indra/newview/llfloaterregioninfo.h
+++ b/indra/newview/llfloaterregioninfo.h
@@ -96,6 +96,8 @@ class LLFloaterRegionInfo : public LLFloater
 	
 	void requestRegionInfo();
 	void requestMeshRezInfo();
+	void enableTopButtons();
+	void disableTopButtons();
 
 private:
 	
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index 960d3f35dd4bf4d8b41b4877791d8b06d85297a5..867702894261e7e5e0295a7379b8f026921ffeae 100755
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -62,7 +62,6 @@ const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512
 static LLDefaultChildRegistry::Register<LLSnapshotFloaterView> r("snapshot_floater_view");
 
 
-
 ///----------------------------------------------------------------------------
 /// Class LLFloaterSnapshot::Impl
 ///----------------------------------------------------------------------------
@@ -96,7 +95,6 @@ class LLFloaterSnapshot::Impl
 	static void onClickAutoSnap(LLUICtrl *ctrl, void* data);
 	static void onClickFilter(LLUICtrl *ctrl, void* data);
 	//static void onClickAdvanceSnap(LLUICtrl *ctrl, void* data);
-	static void onClickMore(void* data) ;
 	static void onClickUICheck(LLUICtrl *ctrl, void* data);
 	static void onClickHUDCheck(LLUICtrl *ctrl, void* data);
 	static void applyKeepAspectCheck(LLFloaterSnapshot* view, BOOL checked);
@@ -264,29 +262,34 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
 
 	BOOL advanced = gSavedSettings.getBOOL("AdvanceSnapshot");
 
-	// Show/hide advanced options.
-	LLPanel* advanced_options_panel = floaterp->getChild<LLPanel>("advanced_options_panel");
-	floaterp->getChild<LLButton>("advanced_options_btn")->setImageOverlay(advanced ? "TabIcon_Open_Off" : "TabIcon_Close_Off");
-	if (advanced != advanced_options_panel->getVisible())
+	//BD - Automatically calculate the size of our snapshot window to enlarge
+	//     the snapshot preview to its maximum size, this is especially helpfull
+	//     for pretty much every aspect ratio other than 1:1.
+	F32 panel_width = 400.f * gViewerWindow->getWorldViewAspectRatio();
+
+	//BD - Make sure we clamp at 700 here because 700 would be for 16:9 which we
+	//     consider the maximum. Everything bigger will be clamped and will have
+	//     a slightly smaller preview window which most likely won't fill up the
+	//     whole snapshot floater as it should.
+	if(panel_width > 700.f)
 	{
-		S32 panel_width = advanced_options_panel->getRect().getWidth();
-		floaterp->getChild<LLPanel>("advanced_options_panel")->setVisible(advanced);
-		S32 floater_width = floaterp->getRect().getWidth();
-		floater_width += (advanced ? panel_width : -panel_width);
-		floaterp->reshape(floater_width, floaterp->getRect().getHeight());
+		panel_width = 700.f;
 	}
 
-	if(!advanced) //set to original window resolution
+	S32 floater_width = 224.f;
+	if(advanced)
 	{
-		previewp->mKeepAspectRatio = TRUE;
-
-		floaterp->getChild<LLComboBox>("profile_size_combo")->setCurrentByIndex(0);
-		floaterp->getChild<LLComboBox>("postcard_size_combo")->setCurrentByIndex(0);
-		floaterp->getChild<LLComboBox>("texture_size_combo")->setCurrentByIndex(0);
-		floaterp->getChild<LLComboBox>("local_size_combo")->setCurrentByIndex(0);
+		floater_width = floater_width + panel_width;
+	}
 
-		LLSnapshotLivePreview* previewp = getPreviewView(floaterp);
-		previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw());
+	LLUICtrl* thumbnail_placeholder = floaterp->getChild<LLUICtrl>("thumbnail_placeholder");
+	thumbnail_placeholder->setVisible(advanced);
+	thumbnail_placeholder->reshape(panel_width, thumbnail_placeholder->getRect().getHeight());
+	floaterp->getChild<LLUICtrl>("image_res_text")->setVisible(advanced);
+	floaterp->getChild<LLUICtrl>("file_size_label")->setVisible(advanced);
+	if(!floaterp->isMinimized())
+	{
+		floaterp->reshape(floater_width, floaterp->getRect().getHeight());
 	}
 
 	bool use_freeze_frame = floaterp->getChild<LLUICtrl>("freeze_frame_check")->getValue().asBoolean();
@@ -388,7 +391,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
 			height_ctrl->setValue(h);
 		}
 
-		// Сlamp snapshot resolution to window size when showing UI or HUD in snapshot.
+		// Clamp snapshot resolution to window size when showing UI or HUD in snapshot.
 		if (gSavedSettings.getBOOL("RenderUIInSnapshot") || gSavedSettings.getBOOL("RenderHUDInSnapshot"))
 		{
 			S32 width = gViewerWindow->getWindowWidthRaw();
@@ -576,25 +579,11 @@ void LLFloaterSnapshot::Impl::onClickFilter(LLUICtrl *ctrl, void* data)
             LLComboBox* filterbox = static_cast<LLComboBox *>(view->getChild<LLComboBox>("filters_combobox"));
             std::string filter_name = (filterbox->getCurrentIndex() ? filterbox->getSimple() : "");
             previewp->setFilter(filter_name);
-            previewp->updateSnapshot(FALSE, TRUE);
+            previewp->updateSnapshot(TRUE);
         }
 	}
 }
 
-void LLFloaterSnapshot::Impl::onClickMore(void* data)
-{
-	BOOL visible = gSavedSettings.getBOOL("AdvanceSnapshot");
-	
-	LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
-	if (view)
-	{
-		view->impl.setStatus(Impl::STATUS_READY);
-		gSavedSettings.setBOOL("AdvanceSnapshot", !visible);
-		updateControls(view) ;
-		updateLayout(view) ;
-	}
-}
-
 // static
 void LLFloaterSnapshot::Impl::onClickUICheck(LLUICtrl *ctrl, void* data)
 {
@@ -772,6 +761,12 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL
 		S32 original_width = 0 , original_height = 0 ;
 		previewp->getSize(original_width, original_height) ;
 		
+		if (gSavedSettings.getBOOL("RenderUIInSnapshot") || gSavedSettings.getBOOL("RenderHUDInSnapshot"))
+		{ //clamp snapshot resolution to window size when showing UI or HUD in snapshot
+			width = llmin(width, gViewerWindow->getWindowWidthRaw());
+			height = llmin(height, gViewerWindow->getWindowHeightRaw());
+		}
+
 		if (width == 0 || height == 0)
 		{
 			// take resolution from current window size
@@ -817,14 +812,12 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL
 		checkAspectRatio(view, width) ;
 
 		previewp->getSize(width, height);
-	
-		if (gSavedSettings.getBOOL("RenderUIInSnapshot") || gSavedSettings.getBOOL("RenderHUDInSnapshot"))
-		{ //clamp snapshot resolution to window size when showing UI or HUD in snapshot
-			width = llmin(width, gViewerWindow->getWindowWidthRaw());
-			height = llmin(height, gViewerWindow->getWindowHeightRaw());
-		}
 
-		updateSpinners(view, previewp, width, height, TRUE); // may change width and height
+		// We use the height spinner here because we come here via the aspect ratio
+		// checkbox as well and we want height always changing to width by default.
+		// If we use the width spinner we would change width according to height by
+		// default, that is not what we want.
+		updateSpinners(view, previewp, width, height, !getHeightSpinner(view)->isDirty()); // may change width and height
 		
 		if(getWidthSpinner(view)->getValue().asInteger() != width || getHeightSpinner(view)->getValue().asInteger() != height)
 		{
@@ -839,12 +832,11 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL
 			// hide old preview as the aspect ratio could be wrong
 			checkAutoSnapshot(previewp, FALSE);
 			LL_DEBUGS() << "updating thumbnail" << LL_ENDL;
-			getPreviewView(view)->updateSnapshot(FALSE, TRUE);
+			getPreviewView(view)->updateSnapshot(TRUE);
 			if(do_update)
 			{
 				LL_DEBUGS() << "Will update controls" << LL_ENDL;
 				updateControls(view);
-				setNeedRefresh(view, true);
 			}
 		}
 	}
@@ -887,7 +879,6 @@ void LLFloaterSnapshot::Impl::onImageFormatChange(LLFloaterSnapshot* view)
 		LL_DEBUGS() << "image format changed, updating snapshot" << LL_ENDL;
 		getPreviewView(view)->updateSnapshot(TRUE);
 		updateControls(view);
-		setNeedRefresh(view, false); // we're refreshing
 	}
 }
 
@@ -956,6 +947,8 @@ void LLFloaterSnapshot::Impl::setImageSizeSpinnersValues(LLFloaterSnapshot *view
 // static
 void LLFloaterSnapshot::Impl::updateSpinners(LLFloaterSnapshot* view, LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL is_width_changed)
 {
+	getWidthSpinner(view)->resetDirty();
+	getHeightSpinner(view)->resetDirty();
 	if (checkImageSize(previewp, width, height, is_width_changed, previewp->getMaxImageSize()))
 	{
 		setImageSizeSpinnersValues(view, width, height);
@@ -965,8 +958,6 @@ void LLFloaterSnapshot::Impl::updateSpinners(LLFloaterSnapshot* view, LLSnapshot
 // static
 void LLFloaterSnapshot::Impl::applyCustomResolution(LLFloaterSnapshot* view, S32 w, S32 h)
 {
-	bool need_refresh = false;
-
 	LL_DEBUGS() << "applyCustomResolution(" << w << ", " << h << ")" << LL_ENDL;
 	if (!view) return;
 
@@ -981,25 +972,16 @@ void LLFloaterSnapshot::Impl::applyCustomResolution(LLFloaterSnapshot* view, S32
 			//if to upload a snapshot, process spinner input in a special way.
 			previewp->setMaxImageSize((S32) getWidthSpinner(view)->getMaxValue()) ;
 
-			updateSpinners(view, previewp, w, h, w != curw); // may change w and h
-
 			previewp->setSize(w,h);
 			checkAutoSnapshot(previewp, FALSE);
-			LL_DEBUGS() << "applied custom resolution, updating thumbnail" << LL_ENDL;
-			previewp->updateSnapshot(FALSE, TRUE);
 			comboSetCustom(view, "profile_size_combo");
 			comboSetCustom(view, "postcard_size_combo");
 			comboSetCustom(view, "texture_size_combo");
 			comboSetCustom(view, "local_size_combo");
-			need_refresh = true;
+			LL_DEBUGS() << "applied custom resolution, updating thumbnail" << LL_ENDL;
+			previewp->updateSnapshot(TRUE);
 		}
 	}
-
-	updateControls(view);
-	if (need_refresh)
-	{
-		setNeedRefresh(view, true); // need to do this after updateControls()
-	}
 }
 
 // static
@@ -1055,8 +1037,6 @@ BOOL LLFloaterSnapshot::postBuild()
 	mSucceessLblPanel = getChild<LLUICtrl>("succeeded_panel");
 	mFailureLblPanel = getChild<LLUICtrl>("failed_panel");
 
-	childSetAction("advanced_options_btn", Impl::onClickMore, this);
-
 	childSetCommitCallback("ui_check", Impl::onClickUICheck, this);
 	getChild<LLUICtrl>("ui_check")->setValue(gSavedSettings.getBOOL("RenderUIInSnapshot"));
 
@@ -1075,24 +1055,15 @@ BOOL LLFloaterSnapshot::postBuild()
 	getChild<LLUICtrl>("auto_snapshot_check")->setValue(gSavedSettings.getBOOL("AutoSnapshot"));
 	childSetCommitCallback("auto_snapshot_check", Impl::onClickAutoSnap, this);
     
+
 	// Filters
 	LLComboBox* filterbox = getChild<LLComboBox>("filters_combobox");
-    if (gSavedSettings.getBOOL("SnapshotFiltersEnabled"))
-    {
-        // Update filter list if setting is on (experimental)
-        std::vector<std::string> filter_list = LLImageFiltersManager::getInstance()->getFiltersList();
-        for (U32 i = 0; i < filter_list.size(); i++)
-        {
-            filterbox->add(filter_list[i]);
-        }
-        childSetCommitCallback("filters_combobox", Impl::onClickFilter, this);
-    }
-    else
+    std::vector<std::string> filter_list = LLImageFiltersManager::getInstance()->getFiltersList();
+    for (U32 i = 0; i < filter_list.size(); i++)
     {
-        // Hide Filter UI if setting is off (default)
-        getChild<LLUICtrl>("filter_list_label")->setVisible(FALSE);
-        filterbox->setVisible(FALSE);
+        filterbox->add(filter_list[i]);
     }
+    childSetCommitCallback("filters_combobox", Impl::onClickFilter, this);
     
 	LLWebProfile::setImageUploadResultCallback(boost::bind(&LLFloaterSnapshot::Impl::onSnapshotUploadFinished, _1));
 	LLPostCard::setPostResultCallback(boost::bind(&LLFloaterSnapshot::Impl::onSendingPostcardFinished, _1));
@@ -1119,7 +1090,7 @@ BOOL LLFloaterSnapshot::postBuild()
 	getChild<LLComboBox>("profile_size_combo")->selectNthItem(0);
 	getChild<LLComboBox>("postcard_size_combo")->selectNthItem(0);
 	getChild<LLComboBox>("texture_size_combo")->selectNthItem(0);
-	getChild<LLComboBox>("local_size_combo")->selectNthItem(0);
+	getChild<LLComboBox>("local_size_combo")->selectNthItem(8);
 	getChild<LLComboBox>("local_format_combo")->selectNthItem(0);
 
 	impl.mPreviewHandle = previewp->getHandle();
@@ -1145,7 +1116,7 @@ void LLFloaterSnapshot::draw()
 
 	LLFloater::draw();
 
-	if (previewp && !isMinimized())
+	if (previewp && !isMinimized() && sThumbnailPlaceholder->getVisible())
 	{		
 		if(previewp->getThumbnailImage())
 		{
@@ -1172,44 +1143,13 @@ void LLFloaterSnapshot::draw()
 
 			previewp->drawPreviewRect(offset_x, offset_y) ;
 
-			// Draw some controls on top of the preview thumbnail.
-			static const S32 PADDING = 5;
-			static const S32 REFRESH_LBL_BG_HEIGHT = 32;
-
-			// Reshape and position the posting result message panels at the top of the thumbnail.
-			// Do this regardless of current posting status (finished or not) to avoid flicker
-			// when the result message is displayed for the first time.
-			// if (impl.getStatus() == Impl::STATUS_FINISHED)
-			{
-				LLRect result_lbl_rect = mSucceessLblPanel->getRect();
-				const S32 result_lbl_h = result_lbl_rect.getHeight();
-				result_lbl_rect.setLeftTopAndSize(local_offset_x, local_offset_y + thumbnail_h, thumbnail_w - 1, result_lbl_h);
-				mSucceessLblPanel->reshape(result_lbl_rect.getWidth(), result_lbl_h);
-				mSucceessLblPanel->setRect(result_lbl_rect);
-				mFailureLblPanel->reshape(result_lbl_rect.getWidth(), result_lbl_h);
-				mFailureLblPanel->setRect(result_lbl_rect);
-			}
-
-			// Position the refresh button in the bottom left corner of the thumbnail.
-			mRefreshBtn->setOrigin(local_offset_x + PADDING, local_offset_y + PADDING);
-
-			if (impl.mNeedRefresh)
-			{
-				// Place the refresh hint text to the right of the refresh button.
-				const LLRect& refresh_btn_rect = mRefreshBtn->getRect();
-				mRefreshLabel->setOrigin(refresh_btn_rect.mLeft + refresh_btn_rect.getWidth() + PADDING, refresh_btn_rect.mBottom);
-
-				// Draw the refresh hint background.
-				LLRect refresh_label_bg_rect(offset_x, offset_y + REFRESH_LBL_BG_HEIGHT, offset_x + thumbnail_w - 1, offset_y);
-				gl_rect_2d(refresh_label_bg_rect, LLColor4::white % 0.9f, TRUE);
-			}
-
 			gGL.pushUIMatrix();
 			LLUI::translate((F32) thumbnail_rect.mLeft, (F32) thumbnail_rect.mBottom);
 			sThumbnailPlaceholder->draw();
 			gGL.popUIMatrix();
 		}
 	}
+	impl.updateLayout(this);
 }
 
 void LLFloaterSnapshot::onOpen(const LLSD& key)
@@ -1225,6 +1165,9 @@ void LLFloaterSnapshot::onOpen(const LLSD& key)
 	gSnapshotFloaterView->setVisible(TRUE);
 	gSnapshotFloaterView->adjustToFitScreen(this, FALSE);
 
+	impl.updateControls(this);
+	impl.updateLayout(this);
+
 	// Initialize default tab.
 	getChild<LLSideTrayPanelContainer>("panel_container")->getCurrentPanel()->onOpen(LLSD());
 }
@@ -1293,8 +1236,6 @@ S32 LLFloaterSnapshot::notify(const LLSD& info)
 	{
         // Disable the send/post/save buttons until snapshot is ready.
         impl.updateControls(this);
-        // Force hiding the "Refresh to save" hint because we know we've just started refresh.
-        impl.setNeedRefresh(this, false);
 		return 1;
 	}
 
diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp
index 7530c72dd24833e1b4229621c412e7431de7b5d4..d604b8619a19bc8a4b202133cb1e9dbffce990d2 100755
--- a/indra/newview/llfloatertopobjects.cpp
+++ b/indra/newview/llfloatertopobjects.cpp
@@ -50,6 +50,7 @@
 #include "llviewerregion.h"
 #include "lluictrlfactory.h"
 #include "llviewerwindow.h"
+#include "llfloaterregioninfo.h"
 
 //LLFloaterTopObjects* LLFloaterTopObjects::sInstance = NULL;
 
@@ -207,7 +208,7 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
 		columns[column_num++]["font"] = "SANSSERIF";
 
 		columns[column_num]["column"] = "location";
-		columns[column_num]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z);
+		columns[column_num]["value"] = llformat("<%0.f, %0.f, %0.f>", location_x, location_y, location_z);
 		columns[column_num++]["font"] = "SANSSERIF";
 
 		columns[column_num]["column"] = "parcel";
@@ -257,6 +258,8 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
 		format.setArg("[COUNT]", llformat("%d", total_count));
 		format.setArg("[TIME]", llformat("%0.3f", mtotalScore));
 		getChild<LLUICtrl>("title_text")->setValue(LLSD(format));
+		list->setColumnLabel("URLs", getString("URLs"));
+		list->setColumnLabel("memory", getString("memory"));
 	}
 	else
 	{
@@ -268,6 +271,13 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
 		format.setArg("[COUNT]", llformat("%d", total_count));
 		getChild<LLUICtrl>("title_text")->setValue(LLSD(format));
 	}
+
+	LLFloaterRegionInfo* region_info_floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info");
+	if(region_info_floater)
+	{
+		region_info_floater->enableTopButtons();
+	}
+	getChildView("refresh_btn")->setEnabled(true);
 }
 
 void LLFloaterTopObjects::onCommitObjectsList()
@@ -453,12 +463,24 @@ void LLFloaterTopObjects::onRefresh()
 	msg->addStringFast(_PREHASH_Filter, filter);
 	msg->addS32Fast(_PREHASH_ParcelLocalID, 0);
 
+	LLFloaterRegionInfo* region_info_floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info");
+	if(region_info_floater)
+	{
+		region_info_floater->disableTopButtons();
+	}
+	disableRefreshBtn();
+
 	msg->sendReliable(gAgent.getRegionHost());
 
 	mFilter.clear();
 	mFlags = 0;
 }
 
+void LLFloaterTopObjects::disableRefreshBtn()
+{
+	getChildView("refresh_btn")->setEnabled(false);
+}
+
 void LLFloaterTopObjects::onGetByObjectName()
 {
 	mFlags  = STAT_FILTER_BY_OBJECT;
diff --git a/indra/newview/llfloatertopobjects.h b/indra/newview/llfloatertopobjects.h
index 28d2aa58e2344f9ed1f10f4fbbbaaf99b204e932..dbbe9ac52125ac743bb0338c8e1a14f7b867ff23 100755
--- a/indra/newview/llfloatertopobjects.h
+++ b/indra/newview/llfloatertopobjects.h
@@ -66,6 +66,7 @@ class LLFloaterTopObjects : public LLFloater
 	void onRefresh();
 
 	static void setMode(U32 mode);
+	void disableRefreshBtn();
 
 private:
 	LLFloaterTopObjects(const LLSD& key);
diff --git a/indra/newview/llfloatertwitter.cpp b/indra/newview/llfloatertwitter.cpp
index 78e9259919cc27c205a66f3fae023f2a40bbcab5..868d623d5730e3b84b6f418202d67c5a91f7c4d4 100644
--- a/indra/newview/llfloatertwitter.cpp
+++ b/indra/newview/llfloatertwitter.cpp
@@ -64,7 +64,6 @@ const std::string DEFAULT_STATUS_TEXT = " #SecondLife";
 ///////////////////////////
 
 LLTwitterPhotoPanel::LLTwitterPhotoPanel() :
-mSnapshotPanel(NULL),
 mResolutionComboBox(NULL),
 mRefreshBtn(NULL),
 mBtnPreview(NULL),
@@ -94,7 +93,6 @@ BOOL LLTwitterPhotoPanel::postBuild()
 {
 	setVisibleCallback(boost::bind(&LLTwitterPhotoPanel::onVisibilityChange, this, _2));
 	
-	mSnapshotPanel = getChild<LLUICtrl>("snapshot_panel");
 	mResolutionComboBox = getChild<LLUICtrl>("resolution_combobox");
 	mResolutionComboBox->setValue("[i800,i600]"); // hardcoded defaults ftw!
 	mResolutionComboBox->setCommitCallback(boost::bind(&LLTwitterPhotoPanel::updateResolution, this, TRUE));
@@ -194,15 +192,8 @@ void LLTwitterPhotoPanel::draw()
 		// calc preview offset within the preview rect
 		const S32 local_offset_x = (thumbnail_rect.getWidth()  - thumbnail_w) / 2 ;
 		const S32 local_offset_y = (thumbnail_rect.getHeight() - thumbnail_h) / 2 ;
-
-		// calc preview offset within the floater rect
-        // Hack : To get the full offset, we need to take into account each and every offset of each widgets up to the floater.
-        // This is almost as arbitrary as using a fixed offset so that's what we do here for the sake of simplicity.
-        // *TODO : Get the offset looking through the hierarchy of widgets, should be done in postBuild() so to avoid traversing the hierarchy each time.
-		S32 offset_x = thumbnail_rect.mLeft + local_offset_x - 1;
-		S32 offset_y = thumbnail_rect.mBottom + local_offset_y - 39;
-        
-		mSnapshotPanel->localPointToOtherView(offset_x, offset_y, &offset_x, &offset_y, getParentByType<LLFloater>());
+		S32 offset_x = thumbnail_rect.mLeft + local_offset_x;
+		S32 offset_y = thumbnail_rect.mBottom + local_offset_y;
         
 		gGL.matrixMode(LLRender::MM_MODELVIEW);
 		// Apply floater transparency to the texture unless the floater is focused.
@@ -238,7 +229,7 @@ void LLTwitterPhotoPanel::onVisibilityChange(BOOL visible)
 			LLSnapshotLivePreview* preview = getPreviewView();
 			if(preview)
 			{
-				lldebugs << "opened, updating snapshot" << llendl;
+				LL_DEBUGS() << "opened, updating snapshot" << LL_ENDL;
 				preview->updateSnapshot(TRUE);
 			}
 		}
@@ -455,7 +446,7 @@ void LLTwitterPhotoPanel::updateControls()
 	BOOL got_snap = previewp && previewp->getSnapshotUpToDate();
     
 	// *TODO: Separate maximum size for Web images from postcards
-	lldebugs << "Is snapshot up-to-date? " << got_snap << llendl;
+	LL_DEBUGS() << "Is snapshot up-to-date? " << got_snap << LL_ENDL;
     
 	updateResolution(FALSE);
 }
@@ -485,13 +476,13 @@ void LLTwitterPhotoPanel::updateResolution(BOOL do_update)
 		if (width == 0 || height == 0)
 		{
 			// take resolution from current window size
-			lldebugs << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << llendl;
+			LL_DEBUGS() << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << LL_ENDL;
 			previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw());
 		}
 		else
 		{
 			// use the resolution from the selected pre-canned drop-down choice
-			lldebugs << "Setting preview res selected from combo: " << width << "x" << height << llendl;
+			LL_DEBUGS() << "Setting preview res selected from combo: " << width << "x" << height << LL_ENDL;
 			previewp->setSize(width, height);
 		}
 
@@ -755,7 +746,7 @@ void LLFloaterTwitter::showPhotoPanel()
 	LLTabContainer* parent = dynamic_cast<LLTabContainer*>(mTwitterPhotoPanel->getParent());
 	if (!parent)
 	{
-		llwarns << "Cannot find panel container" << llendl;
+		LL_WARNS() << "Cannot find panel container" << LL_ENDL;
 		return;
 	}
 
diff --git a/indra/newview/llfloatertwitter.h b/indra/newview/llfloatertwitter.h
index f07ec2ca2f0ba4dcdf7a97844794d9719a83ff9b..d586799d18a2294ffdd763081a35564ae9a3b548 100644
--- a/indra/newview/llfloatertwitter.h
+++ b/indra/newview/llfloatertwitter.h
@@ -70,7 +70,6 @@ class LLTwitterPhotoPanel : public LLPanel
 
 	LLHandle<LLView> mPreviewHandle;
 
-	LLUICtrl * mSnapshotPanel;
 	LLUICtrl * mResolutionComboBox;
 	LLUICtrl * mFilterComboBox;
 	LLUICtrl * mRefreshBtn;
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
index 000eee3317e5f735386045a0769cde13eeadeb5b..0bbb4aeeff334d845daff838aa1384df7476896d 100755
--- a/indra/newview/llinventoryfilter.cpp
+++ b/indra/newview/llinventoryfilter.cpp
@@ -37,6 +37,7 @@
 #include "llfolderview.h"
 #include "llinventorybridge.h"
 #include "llviewerfoldertype.h"
+#include "llradiogroup.h"
 
 // linden library includes
 #include "llclipboard.h"
@@ -51,6 +52,7 @@ LLInventoryFilter::FilterOps::FilterOps(const Params& p)
 	mMinDate(p.date_range.min_date),
 	mMaxDate(p.date_range.max_date),
 	mHoursAgo(p.hours_ago),
+	mDateSearchDirection(p.date_search_direction),
 	mShowFolderState(p.show_folder_state),
 	mPermissions(p.permissions),
 	mFilterTypes(p.types),
@@ -209,6 +211,7 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent
 	{
 		const U16 HOURS_TO_SECONDS = 3600;
 		time_t earliest = time_corrected() - mFilterOps.mHoursAgo * HOURS_TO_SECONDS;
+
 		if (mFilterOps.mMinDate > time_min() && mFilterOps.mMinDate < earliest)
 		{
 			earliest = mFilterOps.mMinDate;
@@ -217,9 +220,19 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent
 		{
 			earliest = 0;
 		}
-		if (listener->getCreationDate() < earliest ||
-			listener->getCreationDate() > mFilterOps.mMaxDate)
-			return FALSE;
+
+		if (FILTERDATEDIRECTION_NEWER == mFilterOps.mDateSearchDirection || isSinceLogoff())
+		{
+			if (listener->getCreationDate() < earliest ||
+				listener->getCreationDate() > mFilterOps.mMaxDate)
+				return FALSE;
+		}
+		else
+		{
+			if (listener->getCreationDate() > earliest ||
+				listener->getCreationDate() > mFilterOps.mMaxDate)
+				return FALSE;
+		}
 	}
 
 	////////////////////////////////////////////////////////////////////////////////
@@ -629,11 +642,22 @@ void LLInventoryFilter::setHoursAgo(U32 hours)
 		bool are_date_limits_valid = mFilterOps.mMinDate == time_min() && mFilterOps.mMaxDate == time_max();
 
 		bool is_increasing = hours > mFilterOps.mHoursAgo;
+		bool is_decreasing = hours < mFilterOps.mHoursAgo;
 		bool is_increasing_from_zero = is_increasing && !mFilterOps.mHoursAgo && !isSinceLogoff();
 
 		// *NOTE: need to cache last filter time, in case filter goes stale
-		BOOL less_restrictive = (are_date_limits_valid && ((is_increasing && mFilterOps.mHoursAgo)) || !hours);
-		BOOL more_restrictive = (are_date_limits_valid && (!is_increasing && hours) || is_increasing_from_zero);
+		BOOL less_restrictive;
+		BOOL more_restrictive;
+		if (FILTERDATEDIRECTION_NEWER == mFilterOps.mDateSearchDirection)
+		{
+			less_restrictive = (are_date_limits_valid && ((is_increasing && mFilterOps.mHoursAgo)) || !hours);
+			more_restrictive = (are_date_limits_valid && (!is_increasing && hours) || is_increasing_from_zero);
+		}
+		else
+		{
+			less_restrictive = (are_date_limits_valid && ((is_decreasing && mFilterOps.mHoursAgo)) || !hours);
+			more_restrictive = (are_date_limits_valid && (!is_decreasing && hours) || is_increasing_from_zero);
+		}
 
 		mFilterOps.mHoursAgo = hours;
 		mFilterOps.mMinDate = time_min();
@@ -662,6 +686,20 @@ void LLInventoryFilter::setHoursAgo(U32 hours)
 	}
 }
 
+void LLInventoryFilter::setDateSearchDirection(U32 direction)
+{
+	if (direction != mFilterOps.mDateSearchDirection)
+	{
+		mFilterOps.mDateSearchDirection = direction;
+		setModified(FILTER_RESTART);
+	}
+}
+
+U32 LLInventoryFilter::getDateSearchDirection() const
+{
+	return mFilterOps.mDateSearchDirection;
+}
+
 void LLInventoryFilter::setFilterLinks(U64 filter_links)
 {
 	if (mFilterOps.mFilterLinks != filter_links)
@@ -926,6 +964,7 @@ LLInventoryFilter& LLInventoryFilter::operator=( const  LLInventoryFilter&  othe
 	setFilterObjectTypes(other.getFilterObjectTypes());
 	setDateRange(other.getMinDate(), other.getMaxDate());
 	setHoursAgo(other.getHoursAgo());
+	setDateSearchDirection(other.getDateSearchDirection());
 	setShowFolderState(other.getShowFolderState());
 	setFilterPermissions(other.getFilterPermissions());
 	setFilterSubString(other.getFilterSubString());
@@ -945,6 +984,7 @@ void LLInventoryFilter::toParams(Params& params) const
 	params.filter_ops.date_range.min_date = getMinDate();
 	params.filter_ops.date_range.max_date = getMaxDate();
 	params.filter_ops.hours_ago = getHoursAgo();
+	params.filter_ops.date_search_direction = getDateSearchDirection();
 	params.filter_ops.show_folder_state = getShowFolderState();
 	params.filter_ops.permissions = getFilterPermissions();
 	params.substring = getFilterSubString();
@@ -966,6 +1006,7 @@ void LLInventoryFilter::fromParams(const Params& params)
 	}
 	setDateRange(params.filter_ops.date_range.min_date,   params.filter_ops.date_range.max_date);
 	setHoursAgo(params.filter_ops.hours_ago);
+	setDateSearchDirection(params.filter_ops.date_search_direction);
 	setShowFolderState(params.filter_ops.show_folder_state);
 	setFilterPermissions(params.filter_ops.permissions);
 	setFilterSubString(params.substring);
diff --git a/indra/newview/llinventoryfilter.h b/indra/newview/llinventoryfilter.h
index ce516af0b93584d82e674042bda95b6cb8ae13be..0d3d3889cba4b907a962e7a3021a042d5ba9db74 100755
--- a/indra/newview/llinventoryfilter.h
+++ b/indra/newview/llinventoryfilter.h
@@ -55,6 +55,12 @@ class LLInventoryFilter : public LLFolderViewFilter
 		FILTERTYPE_EMPTYFOLDERS = 0x1 << 5		// pass if folder is not a system   folder to be hidden if
 	};
 
+	enum EFilterDateDirection
+	{
+		FILTERDATEDIRECTION_NEWER,
+		FILTERDATEDIRECTION_OLDER
+	};
+
 	enum EFilterLink
 	{
 		FILTERLINK_INCLUDE_LINKS,	// show links too
@@ -94,7 +100,8 @@ class LLInventoryFilter : public LLFolderViewFilter
 			Optional<EFilterLink>		links;
 			Optional<LLUUID>			uuid;
 			Optional<DateRange>			date_range;
-			Optional<S32>				hours_ago;
+			Optional<U32>				hours_ago;
+			Optional<U32>				date_search_direction;
 			Optional<EFolderShow>		show_folder_state;
 			Optional<PermissionMask>	permissions;
 
@@ -107,6 +114,7 @@ class LLInventoryFilter : public LLFolderViewFilter
 				uuid("uuid"),
 				date_range("date_range"),
 				hours_ago("hours_ago", 0),
+				date_search_direction("date_search_direction", FILTERDATEDIRECTION_NEWER),
 				show_folder_state("show_folder_state", SHOW_NON_EMPTY_FOLDERS),
 				permissions("permissions", PERM_NONE)
 			{}
@@ -124,6 +132,7 @@ class LLInventoryFilter : public LLFolderViewFilter
 		time_t			mMinDate,
 						mMaxDate;
 		U32				mHoursAgo;
+		U32				mDateSearchDirection;
 
 		EFolderShow		mShowFolderState;
 		PermissionMask	mPermissions;
@@ -177,6 +186,8 @@ class LLInventoryFilter : public LLFolderViewFilter
 
 	void 				setHoursAgo(U32 hours);
 	U32 				getHoursAgo() const;
+	void				setDateSearchDirection(U32 direction);
+	U32					getDateSearchDirection() const;
 
 	void 				setFilterLinks(U64 filter_link);
 	U64					getFilterLinks() const;
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index a4a85e2e8da2f2af2917b3cc48ca975b1fe0ecb7..db5be2cef5de357856121c3250bf0187c72f3cbe 100755
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -400,6 +400,11 @@ void LLInventoryPanel::setHoursAgo(U32 hours)
 	getFilter().setHoursAgo(hours);
 }
 
+void LLInventoryPanel::setDateSearchDirection(U32 direction)
+{
+	getFilter().setDateSearchDirection(direction);
+}
+
 void LLInventoryPanel::setFilterLinks(U64 filter_links)
 {
 	getFilter().setFilterLinks(filter_links);
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index 91c3efd8f0db25163f7d3fb22e78ebc63a2229f7..a490dfce5d985f64ee2240dd2f7860a17d3babcd 100755
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -173,6 +173,7 @@ class LLInventoryPanel : public LLPanel
 	const std::string getFilterSubString();
 	void setSinceLogoff(BOOL sl);
 	void setHoursAgo(U32 hours);
+	void setDateSearchDirection(U32 direction);
 	BOOL getSinceLogoff();
 	void setFilterLinks(U64 filter_links);
 
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index b02298090ad9f35b1b5a5bd21fb237fe18abd73d..6c8765c62df31b8b17af546180b8c8b04a1cff3d 100755
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -55,6 +55,7 @@
 #include "llviewertexturelist.h"
 #include "llsidepanelinventory.h"
 #include "llfolderview.h"
+#include "llradiogroup.h"
 
 const std::string FILTERS_FILENAME("filters.xml");
 
@@ -82,6 +83,7 @@ class LLFloaterInventoryFinder : public LLFloater
 	void updateElementsFromFilter();
 	BOOL getCheckShowEmpty();
 	BOOL getCheckSinceLogoff();
+	U32 getDateSearchDirection();
 
 	static void onTimeAgo(LLUICtrl*, void *);
 	static void onCloseBtn(void* user_data);
@@ -700,6 +702,30 @@ void LLFloaterInventoryFinder::onTimeAgo(LLUICtrl *ctrl, void *user_data)
 	if ( self->mSpinSinceDays->get() ||  self->mSpinSinceHours->get() )
 	{
 		self->getChild<LLUICtrl>("check_since_logoff")->setValue(false);
+
+		U32 days = (U32)self->mSpinSinceDays->get();
+		U32 hours = (U32)self->mSpinSinceHours->get();
+		if (hours >= 24)
+		{
+			// Try to handle both cases of spinner clicking and text input in a sensible fashion as best as possible.
+			// There is no way to tell if someone has clicked the spinner to get to 24 or input 24 manually, so in
+			// this case add to days.  Any value > 24 means they have input the hours manually, so do not add to the
+			// current day value.
+			if (24 == hours)  // Got to 24 via spinner clicking or text input of 24
+			{
+				days = days + hours / 24;
+			}
+			else	// Text input, so do not add to days
+			{ 
+				days = hours / 24;
+			}
+			hours = (U32)hours % 24;
+			self->mSpinSinceHours->setFocus(false);
+			self->mSpinSinceDays->setFocus(false);
+			self->mSpinSinceDays->set((F32)days);
+			self->mSpinSinceHours->set((F32)hours);
+			self->mSpinSinceHours->setFocus(true);
+		}
 	}
 }
 
@@ -719,6 +745,7 @@ void LLFloaterInventoryFinder::updateElementsFromFilter()
 	std::string filter_string = mFilter->getFilterSubString();
 	LLInventoryFilter::EFolderShow show_folders = mFilter->getShowFolderState();
 	U32 hours = mFilter->getHoursAgo();
+	U32 date_search_direction = mFilter->getDateSearchDirection();
 
 	// update the ui elements
 	setTitle(mFilter->getName());
@@ -740,6 +767,7 @@ void LLFloaterInventoryFinder::updateElementsFromFilter()
 	getChild<LLUICtrl>("check_since_logoff")->setValue(mFilter->isSinceLogoff());
 	mSpinSinceHours->set((F32)(hours % 24));
 	mSpinSinceDays->set((F32)(hours / 24));
+	getChild<LLRadioGroup>("date_search_direction")->setSelectedIndex(date_search_direction);
 }
 
 void LLFloaterInventoryFinder::draw()
@@ -840,17 +868,23 @@ void LLFloaterInventoryFinder::draw()
 	}
 	U32 days = (U32)mSpinSinceDays->get();
 	U32 hours = (U32)mSpinSinceHours->get();
-	if (hours > 24)
+	if (hours >= 24)
 	{
-		days += hours / 24;
+		days = hours / 24;
 		hours = (U32)hours % 24;
+		// A UI element that has focus will not display a new value set to it
+		mSpinSinceHours->setFocus(false);
+		mSpinSinceDays->setFocus(false);
 		mSpinSinceDays->set((F32)days);
 		mSpinSinceHours->set((F32)hours);
+		mSpinSinceHours->setFocus(true);
 	}
 	hours += days * 24;
+
 	mPanelMainInventory->getPanel()->setHoursAgo(hours);
 	mPanelMainInventory->getPanel()->setSinceLogoff(getCheckSinceLogoff());
 	mPanelMainInventory->setFilterTextFromFilter();
+	mPanelMainInventory->getPanel()->setDateSearchDirection(getDateSearchDirection());
 
 	LLPanel::draw();
 }
@@ -865,6 +899,11 @@ BOOL LLFloaterInventoryFinder::getCheckSinceLogoff()
 	return getChild<LLUICtrl>("check_since_logoff")->getValue();
 }
 
+U32 LLFloaterInventoryFinder::getDateSearchDirection()
+{
+	return 	getChild<LLRadioGroup>("date_search_direction")->getSelectedIndex();
+}
+
 void LLFloaterInventoryFinder::onCloseBtn(void* user_data)
 {
 	LLFloaterInventoryFinder* finderp = (LLFloaterInventoryFinder*)user_data;
diff --git a/indra/newview/llpanelsnapshot.cpp b/indra/newview/llpanelsnapshot.cpp
index 5924448671c6cb1b008e24c39e1e3280133474f1..56569e320770484d79eebf320c77eb62d9103eb3 100755
--- a/indra/newview/llpanelsnapshot.cpp
+++ b/indra/newview/llpanelsnapshot.cpp
@@ -65,8 +65,6 @@ void LLPanelSnapshot::onOpen(const LLSD& key)
 	{
 		LLFloaterSnapshot::getInstance()->notify(LLSD().with("image-format-change", true));
 	}
-
-	updateCustomResControls();
 }
 
 LLFloaterSnapshot::ESnapshotFormat LLPanelSnapshot::getImageFormat() const
@@ -77,11 +75,6 @@ LLFloaterSnapshot::ESnapshotFormat LLPanelSnapshot::getImageFormat() const
 void LLPanelSnapshot::enableControls(BOOL enable)
 {
 	setCtrlsEnabled(enable);
-	if (enable)
-	{
-		// Make sure only relevant controls are enabled/shown.
-		updateCustomResControls();
-	}
 }
 
 LLSpinCtrl* LLPanelSnapshot::getWidthSpinner()
@@ -121,16 +114,6 @@ LLSideTrayPanelContainer* LLPanelSnapshot::getParentContainer()
 	return parent;
 }
 
-// virtual
-void LLPanelSnapshot::updateCustomResControls()
-{
-	// Only show width/height spinners and the aspect ratio checkbox
-	// when a custom resolution is chosen.
-	LLComboBox* combo = getChild<LLComboBox>(getImageSizeComboName());
-	const bool show = combo->getFirstSelectedIndex() == (combo->getItemCount() - 1);
-	getChild<LLUICtrl>(getImageSizePanelName())->setVisible(show);
-}
-
 void LLPanelSnapshot::updateImageQualityLevel()
 {
 	LLSliderCtrl* quality_slider = getChild<LLSliderCtrl>("image_quality_slider");
@@ -188,8 +171,6 @@ void LLPanelSnapshot::onCustomResolutionCommit()
 
 void LLPanelSnapshot::onResolutionComboCommit(LLUICtrl* ctrl)
 {
-	updateCustomResControls();
-
 	LLSD info;
 	info["combo-res-change"]["control-name"] = ctrl->getName();
 	LLFloaterSnapshot::getInstance()->notify(info);
diff --git a/indra/newview/llpanelsnapshot.h b/indra/newview/llpanelsnapshot.h
index f3274cf5940988672b29067d44dc58ebf5f219cc..42ad798d60fdbe6f1a91c07c1a9a4d79a92651a6 100755
--- a/indra/newview/llpanelsnapshot.h
+++ b/indra/newview/llpanelsnapshot.h
@@ -57,7 +57,6 @@ class LLPanelSnapshot: public LLPanel
 
 protected:
 	LLSideTrayPanelContainer* getParentContainer();
-	virtual void updateCustomResControls();
 	void updateImageQualityLevel();
 	void goBack(); ///< Switch to the default (Snapshot Options) panel
 	void cancel();
diff --git a/indra/newview/llpanelsnapshotinventory.cpp b/indra/newview/llpanelsnapshotinventory.cpp
index 47e46a968f84b94ddd07e797d7986687571fb3c9..c8a201a5c85e5bc833b1432057b5fdbaef2f2cd3 100755
--- a/indra/newview/llpanelsnapshotinventory.cpp
+++ b/indra/newview/llpanelsnapshotinventory.cpp
@@ -49,7 +49,6 @@ class LLPanelSnapshotInventory
 	/*virtual*/ void onOpen(const LLSD& key);
 
 private:
-	/*virtual*/ void updateCustomResControls(); ///< Show/hide custom resolution controls (spinners and checkbox)
 	/*virtual*/ std::string getWidthSpinnerName() const		{ return "inventory_snapshot_width"; }
 	/*virtual*/ std::string getHeightSpinnerName() const	{ return "inventory_snapshot_height"; }
 	/*virtual*/ std::string getAspectRatioCBName() const	{ return "inventory_keep_aspect_check"; }
@@ -73,7 +72,6 @@ BOOL LLPanelSnapshotInventory::postBuild()
 {
 	getChild<LLSpinCtrl>(getWidthSpinnerName())->setAllowEdit(FALSE);
 	getChild<LLSpinCtrl>(getHeightSpinnerName())->setAllowEdit(FALSE);
-	getChild<LLUICtrl>(getAspectRatioCBName())->setVisible(FALSE); // we don't keep aspect ratio for inventory textures
 	return LLPanelSnapshot::postBuild();
 }
 
@@ -84,17 +82,6 @@ void LLPanelSnapshotInventory::onOpen(const LLSD& key)
 	LLPanelSnapshot::onOpen(key);
 }
 
-// virtual
-void LLPanelSnapshotInventory::updateCustomResControls()
-{
-	LLComboBox* combo = getChild<LLComboBox>(getImageSizeComboName());
-	S32 selected_idx = combo->getFirstSelectedIndex();
-	const bool show = selected_idx == (combo->getItemCount() - 1); // Custom selected
-
-	getChild<LLUICtrl>(getWidthSpinnerName())->setVisible(show);
-	getChild<LLUICtrl>(getHeightSpinnerName())->setVisible(show);
-}
-
 // virtual
 void LLPanelSnapshotInventory::updateControls(const LLSD& info)
 {
diff --git a/indra/newview/llpanelsnapshotoptions.cpp b/indra/newview/llpanelsnapshotoptions.cpp
index 743ef3e32913b32949f58ac79decf331a02a7f4a..0fc9ceec8318fc59c02e99998bb5edef0ece2de2 100755
--- a/indra/newview/llpanelsnapshotoptions.cpp
+++ b/indra/newview/llpanelsnapshotoptions.cpp
@@ -72,7 +72,9 @@ LLPanelSnapshotOptions::LLPanelSnapshotOptions()
 	mCommitCallbackRegistrar.add("Snapshot.SaveToEmail",		boost::bind(&LLPanelSnapshotOptions::onSaveToEmail,		this));
 	mCommitCallbackRegistrar.add("Snapshot.SaveToInventory",	boost::bind(&LLPanelSnapshotOptions::onSaveToInventory,	this));
 	mCommitCallbackRegistrar.add("Snapshot.SaveToComputer",		boost::bind(&LLPanelSnapshotOptions::onSaveToComputer,	this));
-
+	mCommitCallbackRegistrar.add("Snapshot.SendToFacebook",		boost::bind(&LLPanelSnapshotOptions::onSendToFacebook, this));
+	mCommitCallbackRegistrar.add("Snapshot.SendToTwitter",		boost::bind(&LLPanelSnapshotOptions::onSendToTwitter, this));
+	mCommitCallbackRegistrar.add("Snapshot.SendToFlickr",		boost::bind(&LLPanelSnapshotOptions::onSendToFlickr, this));
 	LLGlobalEconomy::Singleton::getInstance()->addObserver(this);
 }
 
@@ -84,13 +86,6 @@ LLPanelSnapshotOptions::~LLPanelSnapshotOptions()
 // virtual
 BOOL LLPanelSnapshotOptions::postBuild()
 {
-    LLTextBox* sendToFacebookTextBox = getChild<LLTextBox>("send_to_facebook_textbox");
-    sendToFacebookTextBox->setURLClickedCallback(boost::bind(&LLPanelSnapshotOptions::onSendToFacebook, this));
-    LLTextBox* sendToTwitterTextBox = getChild<LLTextBox>("send_to_twitter_textbox");
-    sendToTwitterTextBox->setURLClickedCallback(boost::bind(&LLPanelSnapshotOptions::onSendToTwitter, this));
-    LLTextBox* sendToFlickrTextBox = getChild<LLTextBox>("send_to_flickr_textbox");
-    sendToFlickrTextBox->setURLClickedCallback(boost::bind(&LLPanelSnapshotOptions::onSendToFlickr, this));
-
 	return LLPanel::postBuild();
 }
 
diff --git a/indra/newview/llpanelsnapshotpostcard.cpp b/indra/newview/llpanelsnapshotpostcard.cpp
index 95c443b82697daa7b0be2fe22a2b7a8ec0b4d4d1..8e37b1418c14ffbfe44f76de9257a2cfc0f4154f 100755
--- a/indra/newview/llpanelsnapshotpostcard.cpp
+++ b/indra/newview/llpanelsnapshotpostcard.cpp
@@ -72,7 +72,6 @@ class LLPanelSnapshotPostcard
 	void onMsgFormFocusRecieved();
 	void onFormatComboCommit(LLUICtrl* ctrl);
 	void onQualitySliderCommit(LLUICtrl* ctrl);
-	void onTabButtonPress(S32 btn_idx);
 	void onSend();
 
 	bool mHasFirstMsgFocus;
@@ -86,8 +85,6 @@ LLPanelSnapshotPostcard::LLPanelSnapshotPostcard()
 {
 	mCommitCallbackRegistrar.add("Postcard.Send",		boost::bind(&LLPanelSnapshotPostcard::onSend,	this));
 	mCommitCallbackRegistrar.add("Postcard.Cancel",		boost::bind(&LLPanelSnapshotPostcard::cancel,	this));
-	mCommitCallbackRegistrar.add("Postcard.Message",	boost::bind(&LLPanelSnapshotPostcard::onTabButtonPress,	this, 0));
-	mCommitCallbackRegistrar.add("Postcard.Settings",	boost::bind(&LLPanelSnapshotPostcard::onTabButtonPress,	this, 1));
 
 }
 
@@ -108,8 +105,6 @@ BOOL LLPanelSnapshotPostcard::postBuild()
 
 	getChild<LLUICtrl>("image_quality_slider")->setCommitCallback(boost::bind(&LLPanelSnapshotPostcard::onQualitySliderCommit, this, _1));
 
-	getChild<LLButton>("message_btn")->setToggleState(TRUE);
-
 	return LLPanelSnapshot::postBuild();
 }
 
@@ -218,27 +213,6 @@ void LLPanelSnapshotPostcard::onQualitySliderCommit(LLUICtrl* ctrl)
 	LLFloaterSnapshot::getInstance()->notify(info); // updates the "SnapshotQuality" setting
 }
 
-void LLPanelSnapshotPostcard::onTabButtonPress(S32 btn_idx)
-{
-	LLButton* buttons[2] = {
-			getChild<LLButton>("message_btn"),
-			getChild<LLButton>("settings_btn"),
-	};
-
-	// Switch between Message and Settings tabs.
-	LLButton* clicked_btn = buttons[btn_idx];
-	LLButton* other_btn = buttons[!btn_idx];
-	LLSideTrayPanelContainer* container =
-		getChild<LLSideTrayPanelContainer>("postcard_panel_container");
-
-	container->selectTab(clicked_btn->getToggleState() ? btn_idx : !btn_idx);
-	//clicked_btn->setEnabled(FALSE);
-	other_btn->toggleState();
-	//other_btn->setEnabled(TRUE);
-
-	LL_DEBUGS() << "Button #" << btn_idx << " (" << clicked_btn->getName() << ") clicked" << LL_ENDL;
-}
-
 void LLPanelSnapshotPostcard::onSend()
 {
 	// Validate input.
diff --git a/indra/newview/llsnapshotlivepreview.cpp b/indra/newview/llsnapshotlivepreview.cpp
index f61db7716983a816dad2f80e5d78b8582d58a44a..1aa704117560e45de6f911a6bc5a310d0af51608 100644
--- a/indra/newview/llsnapshotlivepreview.cpp
+++ b/indra/newview/llsnapshotlivepreview.cpp
@@ -151,7 +151,7 @@ F32 LLSnapshotLivePreview::getImageAspect()
 
 void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail, F32 delay)
 {
-	lldebugs << "updateSnapshot: mSnapshotUpToDate = " << getSnapshotUpToDate() << llendl;
+	LL_DEBUGS() << "updateSnapshot: mSnapshotUpToDate = " << getSnapshotUpToDate() << LL_ENDL;
 
 	// Update snapshot if requested.
 	if (new_snapshot)
@@ -195,6 +195,8 @@ void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail
 		mSnapshotDelayTimer.start();
 		mSnapshotDelayTimer.setTimerExpirySec(delay);
         
+		mPosTakenGlobal = gAgentCamera.getCameraPositionGlobal();
+
         // Tell the floater container that the snapshot is in the process of updating itself
         if (mViewContainer)
         {
@@ -594,7 +596,7 @@ void LLSnapshotLivePreview::generateThumbnailImage(BOOL force_update)
             }
             else
             {
-                llwarns << "Couldn't find a path to the following filter : " << getFilter() << llendl;
+                LL_WARNS() << "Couldn't find a path to the following filter : " << getFilter() << LL_ENDL;
             }
         }
         // Scale to a power of 2 so it can be mapped to a texture
@@ -642,7 +644,7 @@ LLViewerTexture* LLSnapshotLivePreview::getBigThumbnailImage()
             }
             else
             {
-                llwarns << "Couldn't find a path to the following filter : " << getFilter() << llendl;
+                LL_WARNS() << "Couldn't find a path to the following filter : " << getFilter() << LL_ENDL;
             }
         }
         // Scale to a power of 2 so it can be mapped to a texture
@@ -695,7 +697,7 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )
 	// time to produce a snapshot
 	if(!previewp->getSnapshotUpToDate())
     {
-        lldebugs << "producing snapshot" << llendl;
+        LL_DEBUGS() << "producing snapshot" << LL_ENDL;
         if (!previewp->mPreviewImage)
         {
             previewp->mPreviewImage = new LLImageRaw;
@@ -760,7 +762,6 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )
                     curr_preview_image->setFilteringOption(previewp->getSnapshotType() == SNAPSHOT_TEXTURE ? LLTexUnit::TFO_ANISOTROPIC : LLTexUnit::TFO_POINT);
                     curr_preview_image->setAddressMode(LLTexUnit::TAM_CLAMP);
 
-                    previewp->mPosTakenGlobal = gAgentCamera.getCameraPositionGlobal();
                     previewp->mShineCountdown = 4; // wait a few frames to avoid animation glitch due to readback this frame
                 }
             }
@@ -775,7 +776,7 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )
         previewp->setVisible(gSavedSettings.getBOOL("UseFreezeFrame") && previewp->mAllowFullScreenPreview); // only show fullscreen preview when in freeze frame mode
         previewp->mSnapshotDelayTimer.stop();
         previewp->mSnapshotActive = FALSE;
-        lldebugs << "done creating snapshot" << llendl;
+        LL_DEBUGS() << "done creating snapshot" << LL_ENDL;
     }
     
     if (!previewp->getThumbnailUpToDate())
@@ -910,13 +911,13 @@ LLPointer<LLImageFormatted>	LLSnapshotLivePreview::getFormattedImage()
             }
             else
             {
-                llwarns << "Couldn't find a path to the following filter : " << getFilter() << llendl;
+                LL_WARNS() << "Couldn't find a path to the following filter : " << getFilter() << LL_ENDL;
             }
         }
         
         // Create the new formatted image of the appropriate format.
         LLFloaterSnapshot::ESnapshotFormat format = getSnapshotFormat();
-        lldebugs << "Encoding new image of format " << format << llendl;
+        LL_DEBUGS() << "Encoding new image of format " << format << LL_ENDL;
             
         switch (format)
         {
@@ -975,6 +976,21 @@ void LLSnapshotLivePreview::saveTexture()
 		mPreviewImage->getHeight(),
 		mPreviewImage->getComponents());
 
+	// Apply the filter to mPreviewImage
+	if (getFilter() != "")
+	{
+		std::string filter_path = LLImageFiltersManager::getInstance()->getFilterPath(getFilter());
+		if (filter_path != "")
+		{
+			LLImageFilter filter(filter_path);
+			filter.executeFilter(scaled);
+		}
+		else
+		{
+			LL_WARNS() << "Couldn't find a path to the following filter : " << getFilter() << LL_ENDL;
+		}
+	}
+
 	scaled->biasedScaleToPowerOfTwo(MAX_TEXTURE_SIZE);
 	LL_DEBUGS() << "scaled texture to " << scaled->getWidth() << "x" << scaled->getHeight() << LL_ENDL;
 
diff --git a/indra/newview/llsyntaxid.cpp b/indra/newview/llsyntaxid.cpp
index b1194dcd1ba282ebb483bdf56e925296863c1cde..a763d42a8df08bb4b873e11e3cfbac74fbc75cba 100644
--- a/indra/newview/llsyntaxid.cpp
+++ b/indra/newview/llsyntaxid.cpp
@@ -47,23 +47,22 @@ class fetchKeywordsFileResponder : public LLHTTPClient::Responder
 		LL_DEBUGS("SyntaxLSL") << "Instantiating with file saving to: '" << filespec << "'" << LL_ENDL;
 	}
 
-	virtual void errorWithContent(U32 status,
-								  const std::string& reason,
-								  const LLSD& content)
+	/* virtual */ void httpFailure()
 	{
-		LL_WARNS("SyntaxLSL") << "failed to fetch syntax file [status:" << status << "]: " << content << LL_ENDL;
+		LL_WARNS("SyntaxLSL") << "failed to fetch syntax file [status:" << getStatus() << "]: " << getContent() << LL_ENDL;
 	}
 
-	virtual void result(const LLSD& content_ref)
+	/* virtual */ void httpSuccess()
 	{
 		// Continue only if a valid LLSD object was returned.
-		if (content_ref.isMap())
+		const LLSD& content = getContent();
+		if (content.isMap())
 		{
-			if (LLSyntaxIdLSL::getInstance()->isSupportedVersion(content_ref))
+			if (LLSyntaxIdLSL::getInstance()->isSupportedVersion(content))
 			{
-				LLSyntaxIdLSL::getInstance()->setKeywordsXml(content_ref);
+				LLSyntaxIdLSL::getInstance()->setKeywordsXml(content);
 
-				cacheFile(content_ref);
+				cacheFile(content);
 				LLSyntaxIdLSL::getInstance()->handleFileFetched(mFileSpec);
 			}
 			else
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 9ea46cab68ebae968eab73d361cc00db35c9d2f4..d9a874be499b78a161d10a6036ff40d53ea06767 100755
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2000&license=viewerlgpl$
  * Second Life Viewer Source Code
- * Copyright (C) 2012-2013, Linden Research, Inc.
+ * Copyright (C) 2012-2014, Linden Research, Inc.
  * 
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -244,6 +244,13 @@ LLTrace::EventStatHandle<F64Milliseconds > LLTextureFetch::sCacheReadLatency("te
 static const S32 HTTP_REQUESTS_IN_QUEUE_HIGH_WATER = 40;		// Maximum requests to have active in HTTP
 static const S32 HTTP_REQUESTS_IN_QUEUE_LOW_WATER = 20;			// Active level at which to refill
 
+// BUG-3323/SH-4375
+// *NOTE:  This is a heuristic value.  Texture fetches have a habit of using a
+// value of 32MB to indicate 'get the rest of the image'.  Certain ISPs and
+// network equipment get confused when they see this in a Range: header.  So,
+// if the request end is beyond this value, we issue an open-ended Range:
+// request (e.g. 'Range: <start>-') which seems to fix the problem.
+static const S32 HTTP_REQUESTS_RANGE_END_MAX = 20000000;
 
 //////////////////////////////////////////////////////////////////////////////
 
@@ -266,6 +273,9 @@ static const char* e_state_name[] =
 	"DONE"
 };
 
+// Log scope
+static const char * const LOG_TXT = "Texture";
+
 class LLTextureFetchWorker : public LLWorkerClass, public LLCore::HttpHandler
 
 {
@@ -926,7 +936,7 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
 	
 	calcWorkPriority();
 	mType = host.isOk() ? LLImageBase::TYPE_AVATAR_BAKE : LLImageBase::TYPE_NORMAL;
-// 	LL_INFOS() << "Create: " << mID << " mHost:" << host << " Discard=" << discard << LL_ENDL;
+// 	LL_INFOS(LOG_TXT) << "Create: " << mID << " mHost:" << host << " Discard=" << discard << LL_ENDL;
 	if (!mFetcher->mDebugPause)
 	{
 		U32 work_priority = mWorkPriority | LLWorkerThread::PRIORITY_HIGH;
@@ -937,7 +947,7 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
 
 LLTextureFetchWorker::~LLTextureFetchWorker()
 {
-// 	LL_INFOS() << "Destroy: " << mID
+// 	LL_INFOS(LOG_TXT) << "Destroy: " << mID
 // 			<< " Decoded=" << mDecodedDiscard
 // 			<< " Requested=" << mRequestedDiscard
 // 			<< " Desired=" << mDesiredDiscard << LL_ENDL;
@@ -1001,7 +1011,7 @@ void LLTextureFetchWorker::setupPacketData()
 		mFirstPacket = (data_size - FIRST_PACKET_SIZE) / MAX_IMG_PACKET_SIZE + 1;
 		if (FIRST_PACKET_SIZE + (mFirstPacket-1) * MAX_IMG_PACKET_SIZE != data_size)
 		{
-			LL_WARNS() << "Bad CACHED TEXTURE size: " << data_size << " removing." << LL_ENDL;
+			LL_WARNS(LOG_TXT) << "Bad CACHED TEXTURE size: " << data_size << " removing." << LL_ENDL;
 			removeFromCache();
 			resetFormattedData();
 			clearPackets();
@@ -1124,14 +1134,14 @@ bool LLTextureFetchWorker::doWork(S32 param)
 	{
 		if (mState == INIT || mState == LOAD_FROM_NETWORK || mState == LOAD_FROM_SIMULATOR)
 		{
-			LL_DEBUGS("Texture") << mID << " abort: mImagePriority < F_ALMOST_ZERO" << LL_ENDL;
+			LL_DEBUGS(LOG_TXT) << mID << " abort: mImagePriority < F_ALMOST_ZERO" << LL_ENDL;
 			return true; // abort
 		}
 	}
 	if(mState > CACHE_POST && !mCanUseNET && !mCanUseHTTP)
 	{
 		//nowhere to get data, abort.
-		LL_WARNS("Texture") << mID << " abort, nowhere to get data" << LL_ENDL;
+		LL_WARNS(LOG_TXT) << mID << " abort, nowhere to get data" << LL_ENDL;
 		return true ;
 	}
 
@@ -1177,8 +1187,8 @@ bool LLTextureFetchWorker::doWork(S32 param)
 		setState(LOAD_FROM_TEXTURE_CACHE);
 		mInCache = FALSE;
 		mDesiredSize = llmax(mDesiredSize, TEXTURE_CACHE_ENTRY_SIZE); // min desired size is TEXTURE_CACHE_ENTRY_SIZE
-		LL_DEBUGS("Texture") << mID << ": Priority: " << llformat("%8.0f",mImagePriority)
-							 << " Desired Discard: " << mDesiredDiscard << " Desired Size: " << mDesiredSize << LL_ENDL;
+		LL_DEBUGS(LOG_TXT) << mID << ": Priority: " << llformat("%8.0f",mImagePriority)
+						   << " Desired Discard: " << mDesiredDiscard << " Desired Size: " << mDesiredSize << LL_ENDL;
 
 		// fall through
 	}
@@ -1246,7 +1256,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
 				//
 				//This should never happen
 				//
-				LL_DEBUGS("Texture") << mID << " this should never happen" << LL_ENDL;
+				LL_DEBUGS(LOG_TXT) << mID << " this should never happen" << LL_ENDL;
 				return false;
 			}
 		}
@@ -1267,15 +1277,15 @@ bool LLTextureFetchWorker::doWork(S32 param)
 			mLoadedDiscard = mDesiredDiscard;
 			if (mLoadedDiscard < 0)
 			{
-				LL_WARNS("Texture") << mID << " mLoadedDiscard is " << mLoadedDiscard
-									<< ", should be >=0" << LL_ENDL;
+				LL_WARNS(LOG_TXT) << mID << " mLoadedDiscard is " << mLoadedDiscard
+								  << ", should be >=0" << LL_ENDL;
 			}
 			setState(DECODE_IMAGE);
 			mInCache = TRUE;
 			mWriteToCacheState = NOT_WRITE ;
-			LL_DEBUGS("Texture") << mID << ": Cached. Bytes: " << mFormattedImage->getDataSize()
-								 << " Size: " << llformat("%dx%d",mFormattedImage->getWidth(),mFormattedImage->getHeight())
-								 << " Desired Discard: " << mDesiredDiscard << " Desired Size: " << mDesiredSize << LL_ENDL;
+			LL_DEBUGS(LOG_TXT) << mID << ": Cached. Bytes: " << mFormattedImage->getDataSize()
+							   << " Size: " << llformat("%dx%d",mFormattedImage->getWidth(),mFormattedImage->getHeight())
+							   << " Desired Discard: " << mDesiredDiscard << " Desired Size: " << mDesiredSize << LL_ENDL;
 			record(LLTextureFetch::sCacheHitRate, LLUnits::Ratio::fromValue(1));
 		}
 		else
@@ -1283,13 +1293,13 @@ bool LLTextureFetchWorker::doWork(S32 param)
 			if (mUrl.compare(0, 7, "file://") == 0)
 			{
 				// failed to load local file, we're done.
-				LL_WARNS("Texture") << mID << ": abort, failed to load local file " << mUrl << LL_ENDL;
+				LL_WARNS(LOG_TXT) << mID << ": abort, failed to load local file " << mUrl << LL_ENDL;
 				return true;
 			}
 			// need more data
 			else
 			{
-				LL_DEBUGS("Texture") << mID << ": Not in Cache" << LL_ENDL;
+				LL_DEBUGS(LOG_TXT) << mID << ": Not in Cache" << LL_ENDL;
 				setState(LOAD_FROM_NETWORK);
 			}
 			
@@ -1306,11 +1316,11 @@ bool LLTextureFetchWorker::doWork(S32 param)
 		{
 			if (wait_seconds <= 0.0)
 			{
-				LL_INFOS() << mID << " retrying now" << LL_ENDL;
+				LL_INFOS(LOG_TXT) << mID << " retrying now" << LL_ENDL;
 			}
 			else
 			{
-				//LL_INFOS() << mID << " waiting to retry for " << wait_seconds << " seconds" << LL_ENDL;
+				//LL_INFOS(LOG_TXT) << mID << " waiting to retry for " << wait_seconds << " seconds" << LL_ENDL;
 				return false;
 			}
 		}
@@ -1333,20 +1343,23 @@ bool LLTextureFetchWorker::doWork(S32 param)
 				{
 					if (mFTType != FTT_DEFAULT)
 					{
-						LL_WARNS() << "trying to seek a non-default texture on the sim. Bad!" << LL_ENDL;
+						LL_WARNS(LOG_TXT) << "trying to seek a non-default texture on the sim. Bad!" << LL_ENDL;
 					}
 					setUrl(http_url + "/?texture_id=" + mID.asString().c_str());
+					LL_DEBUGS("Texture") << "Texture URL " << mUrl << LL_ENDL;
 					mWriteToCacheState = CAN_WRITE ; //because this texture has a fixed texture id.
 				}
 				else
 				{
 					mCanUseHTTP = false ;
+					LL_DEBUGS("Texture") << "Texture not available via HTTP: no URL " << mUrl << LL_ENDL;
 				}
 			}
 			else
 			{
 				// This will happen if not logged in or if a region deoes not have HTTP Texture enabled
-				//LL_WARNS() << "Region not found for host: " << mHost << LL_ENDL;
+				//LL_WARNS(LOG_TXT) << "Region not found for host: " << mHost << LL_ENDL;
+				LL_DEBUGS("Texture") << "Texture not available via HTTP: no region " << mUrl << LL_ENDL;
 				mCanUseHTTP = false;
 			}
 		}
@@ -1400,20 +1413,20 @@ bool LLTextureFetchWorker::doWork(S32 param)
 		}
 		if (processSimulatorPackets())
 		{
-			LL_DEBUGS("Texture") << mID << ": Loaded from Sim. Bytes: " << mFormattedImage->getDataSize() << LL_ENDL;
+			LL_DEBUGS(LOG_TXT) << mID << ": Loaded from Sim. Bytes: " << mFormattedImage->getDataSize() << LL_ENDL;
 			mFetcher->removeFromNetworkQueue(this, false);
 			if (mFormattedImage.isNull() || !mFormattedImage->getDataSize())
 			{
 				// processSimulatorPackets() failed
-// 				LL_WARNS() << "processSimulatorPackets() failed to load buffer" << LL_ENDL;
-				LL_WARNS("Texture") << mID << " processSimulatorPackets() failed to load buffer" << LL_ENDL;
+// 				LL_WARNS(LOG_TXT) << "processSimulatorPackets() failed to load buffer" << LL_ENDL;
+				LL_WARNS(LOG_TXT) << mID << " processSimulatorPackets() failed to load buffer" << LL_ENDL;
 				return true; // failed
 			}
 			setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
 			if (mLoadedDiscard < 0)
 			{
-				LL_WARNS("Texture") << mID << " mLoadedDiscard is " << mLoadedDiscard
-									<< ", should be >=0" << LL_ENDL;
+				LL_WARNS(LOG_TXT) << mID << " mLoadedDiscard is " << mLoadedDiscard
+								  << ", should be >=0" << LL_ENDL;
 			}
 			setState(DECODE_IMAGE);
 			mWriteToCacheState = SHOULD_WRITE;
@@ -1463,7 +1476,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
 		if (! mCanUseHTTP)
 		{
 			releaseHttpSemaphore();
-			LL_WARNS("Texture") << mID << " abort: SEND_HTTP_REQ but !mCanUseHTTP" << LL_ENDL;
+			LL_WARNS(LOG_TXT) << mID << " abort: SEND_HTTP_REQ but !mCanUseHTTP" << LL_ENDL;
 			return true; // abort
 		}
 
@@ -1482,8 +1495,8 @@ bool LLTextureFetchWorker::doWork(S32 param)
 					setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
 					if (mLoadedDiscard < 0)
 					{
-						LL_WARNS("Texture") << mID << " mLoadedDiscard is " << mLoadedDiscard
-											<< ", should be >=0" << LL_ENDL;
+						LL_WARNS(LOG_TXT) << mID << " mLoadedDiscard is " << mLoadedDiscard
+										  << ", should be >=0" << LL_ENDL;
 					}
 					setState(DECODE_IMAGE);
 					releaseHttpSemaphore();
@@ -1492,7 +1505,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
 				else
 				{
 					releaseHttpSemaphore();
-					LL_WARNS("Texture") << mID << " SEND_HTTP_REQ abort: cur_size " << cur_size << " <=0" << LL_ENDL;
+					LL_WARNS(LOG_TXT) << mID << " SEND_HTTP_REQ abort: cur_size " << cur_size << " <=0" << LL_ENDL;
 					return true; // abort.
 				}
 			}
@@ -1523,10 +1536,10 @@ bool LLTextureFetchWorker::doWork(S32 param)
 			mLoaded = FALSE;
 			mGetStatus = LLCore::HttpStatus();
 			mGetReason.clear();
-			LL_DEBUGS("Texture") << "HTTP GET: " << mID << " Offset: " << mRequestedOffset
-								 << " Bytes: " << mRequestedSize
-								 << " Bandwidth(kbps): " << mFetcher->getTextureBandwidth() << "/" << mFetcher->mMaxBandwidth
-								 << LL_ENDL;
+			LL_DEBUGS(LOG_TXT) << "HTTP GET: " << mID << " Offset: " << mRequestedOffset
+							   << " Bytes: " << mRequestedSize
+							   << " Bandwidth(kbps): " << mFetcher->getTextureBandwidth() << "/" << mFetcher->mMaxBandwidth
+							   << LL_ENDL;
 
 			// Will call callbackHttpGet when curl request completes
 			// Only server bake images use the returned headers currently, for getting retry-after field.
@@ -1535,14 +1548,16 @@ bool LLTextureFetchWorker::doWork(S32 param)
 																	  mWorkPriority,
 																	  mUrl,
 																	  mRequestedOffset,
-																	  mRequestedSize,
+																	  (mRequestedOffset + mRequestedSize) > HTTP_REQUESTS_RANGE_END_MAX
+																	  ? 0
+																	  : mRequestedSize,
 																	  options,
 																	  mFetcher->mHttpHeaders,
 																	  this);
 		}
 		if (LLCORE_HTTP_HANDLE_INVALID == mHttpHandle)
 		{
-			LL_WARNS() << "HTTP GET request failed for " << mID << LL_ENDL;
+			LL_WARNS(LOG_TXT) << "HTTP GET request failed for " << mID << LL_ENDL;
 			resetFormattedData();
 			releaseHttpSemaphore();
 			return true; // failed
@@ -1570,7 +1585,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
 				{
 					if (mFTType != FTT_MAP_TILE)
 					{
-						LL_WARNS() << "Texture missing from server (404): " << mUrl << LL_ENDL;
+						LL_WARNS(LOG_TXT) << "Texture missing from server (404): " << mUrl << LL_ENDL;
 					}
 
 					if(mWriteToCacheState == NOT_WRITE) //map tiles or server bakes
@@ -1579,7 +1594,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
 						releaseHttpSemaphore();
 						if (mFTType != FTT_MAP_TILE)
 						{
-							LL_WARNS("Texture") << mID << " abort: WAIT_HTTP_REQ not found" << LL_ENDL;
+							LL_WARNS(LOG_TXT) << mID << " abort: WAIT_HTTP_REQ not found" << LL_ENDL;
 						}
 						return true; 
 					}
@@ -1597,11 +1612,11 @@ bool LLTextureFetchWorker::doWork(S32 param)
 				}
 				else if (http_service_unavail == mGetStatus)
 				{
-					LL_INFOS_ONCE("Texture") << "Texture server busy (503): " << mUrl << LL_ENDL;
-					LL_INFOS() << "503: HTTP GET failed for: " << mUrl
-							<< " Status: " << mGetStatus.toHex()
-							<< " Reason: '" << mGetReason << "'"
-							<< LL_ENDL;
+					LL_INFOS_ONCE(LOG_TXT) << "Texture server busy (503): " << mUrl << LL_ENDL;
+					LL_INFOS(LOG_TXT) << "503: HTTP GET failed for: " << mUrl
+									  << " Status: " << mGetStatus.toHex()
+									  << " Reason: '" << mGetReason << "'"
+									  << LL_ENDL;
 				}
 				else if (http_not_sat == mGetStatus)
 				{
@@ -1610,10 +1625,10 @@ bool LLTextureFetchWorker::doWork(S32 param)
 				}
 				else
 				{
-					LL_INFOS() << "HTTP GET failed for: " << mUrl
-							<< " Status: " << mGetStatus.toTerseString()
-							<< " Reason: '" << mGetReason << "'"
-							<< LL_ENDL;
+					LL_INFOS(LOG_TXT) << "HTTP GET failed for: " << mUrl
+									  << " Status: " << mGetStatus.toTerseString()
+									  << " Reason: '" << mGetReason << "'"
+									  << LL_ENDL;
 				}
 
 				if (mFTType != FTT_SERVER_BAKE)
@@ -1627,8 +1642,8 @@ bool LLTextureFetchWorker::doWork(S32 param)
 					setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
 					if (mLoadedDiscard < 0)
 					{
-						LL_WARNS("Texture") << mID << " mLoadedDiscard is " << mLoadedDiscard
-											<< ", should be >=0" << LL_ENDL;
+						LL_WARNS(LOG_TXT) << mID << " mLoadedDiscard is " << mLoadedDiscard
+										  << ", should be >=0" << LL_ENDL;
 					}
 					setState(DECODE_IMAGE);
 					releaseHttpSemaphore();
@@ -1639,7 +1654,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
 				resetFormattedData();
 				setState(DONE);
 				releaseHttpSemaphore();
-				LL_WARNS("Texture") << mID << " abort: fail harder" << LL_ENDL;
+				LL_WARNS(LOG_TXT) << mID << " abort: fail harder" << LL_ENDL;
 				return true; // failed
 			}
 			
@@ -1663,7 +1678,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
 
 				// abort.
 				setState(DONE);
-				LL_WARNS("Texture") << mID << " abort: no data received" << LL_ENDL;
+				LL_WARNS(LOG_TXT) << mID << " abort: no data received" << LL_ENDL;
 				releaseHttpSemaphore();
 				return true;
 			}
@@ -1679,8 +1694,8 @@ bool LLTextureFetchWorker::doWork(S32 param)
 				// Get back into alignment.
 				if (mHttpReplyOffset > cur_size)
 				{
-					LL_WARNS("Texture") << "Partial HTTP response produces break in image data for texture "
-										<< mID << ".  Aborting load."  << LL_ENDL;
+					LL_WARNS(LOG_TXT) << "Partial HTTP response produces break in image data for texture "
+									  << mID << ".  Aborting load."  << LL_ENDL;
 					setState(DONE);
 					releaseHttpSemaphore();
 					return true;
@@ -1731,8 +1746,8 @@ bool LLTextureFetchWorker::doWork(S32 param)
 			mLoadedDiscard = mRequestedDiscard;
 			if (mLoadedDiscard < 0)
 			{
-				LL_WARNS("Texture") << mID << " mLoadedDiscard is " << mLoadedDiscard
-									<< ", should be >=0" << LL_ENDL;
+				LL_WARNS(LOG_TXT) << mID << " mLoadedDiscard is " << mLoadedDiscard
+								  << ", should be >=0" << LL_ENDL;
 			}
 			setState(DECODE_IMAGE);
 			if (mWriteToCacheState != NOT_WRITE)
@@ -1773,26 +1788,26 @@ bool LLTextureFetchWorker::doWork(S32 param)
 		{
 			// We aborted, don't decode
 			setState(DONE);
-			LL_DEBUGS("Texture") << mID << " DECODE_IMAGE abort: desired discard " << mDesiredDiscard << "<0" << LL_ENDL;
+			LL_DEBUGS(LOG_TXT) << mID << " DECODE_IMAGE abort: desired discard " << mDesiredDiscard << "<0" << LL_ENDL;
 			return true;
 		}
 		
 		if (mFormattedImage->getDataSize() <= 0)
 		{
-			LL_WARNS() << "Decode entered with invalid mFormattedImage. ID = " << mID << LL_ENDL;
+			LL_WARNS(LOG_TXT) << "Decode entered with invalid mFormattedImage. ID = " << mID << LL_ENDL;
 			
 			//abort, don't decode
 			setState(DONE);
-			LL_DEBUGS("Texture") << mID << " DECODE_IMAGE abort: (mFormattedImage->getDataSize() <= 0)" << LL_ENDL;
+			LL_DEBUGS(LOG_TXT) << mID << " DECODE_IMAGE abort: (mFormattedImage->getDataSize() <= 0)" << LL_ENDL;
 			return true;
 		}
 		if (mLoadedDiscard < 0)
 		{
-			LL_WARNS() << "Decode entered with invalid mLoadedDiscard. ID = " << mID << LL_ENDL;
+			LL_WARNS(LOG_TXT) << "Decode entered with invalid mLoadedDiscard. ID = " << mID << LL_ENDL;
 
 			//abort, don't decode
 			setState(DONE);
-			LL_DEBUGS("Texture") << mID << " DECODE_IMAGE abort: mLoadedDiscard < 0" << LL_ENDL;
+			LL_DEBUGS(LOG_TXT) << mID << " DECODE_IMAGE abort: mLoadedDiscard < 0" << LL_ENDL;
 			return true;
 		}
 
@@ -1803,8 +1818,8 @@ bool LLTextureFetchWorker::doWork(S32 param)
 		U32 image_priority = LLWorkerThread::PRIORITY_NORMAL | mWorkPriority;
 		mDecoded  = FALSE;
 		setState(DECODE_IMAGE_UPDATE);
-		LL_DEBUGS("Texture") << mID << ": Decoding. Bytes: " << mFormattedImage->getDataSize() << " Discard: " << discard
-				<< " All Data: " << mHaveAllData << LL_ENDL;
+		LL_DEBUGS(LOG_TXT) << mID << ": Decoding. Bytes: " << mFormattedImage->getDataSize() << " Discard: " << discard
+						   << " All Data: " << mHaveAllData << LL_ENDL;
 		mDecodeHandle = mFetcher->mImageDecodeThread->decodeImage(mFormattedImage, image_priority, discard, mNeedsAux,
 																  new DecodeResponder(mFetcher, mID, this));
 		// fall though
@@ -1821,11 +1836,11 @@ bool LLTextureFetchWorker::doWork(S32 param)
 
 			if (mDecodedDiscard < 0)
 			{
-				LL_DEBUGS("Texture") << mID << ": Failed to Decode." << LL_ENDL;
+				LL_DEBUGS(LOG_TXT) << mID << ": Failed to Decode." << LL_ENDL;
 				if (mCachedSize > 0 && !mInLocalCache && mRetryAttempt == 0)
 				{
 					// Cache file should be deleted, try again
- 					LL_WARNS() << mID << ": Decode of cached file failed (removed), retrying" << LL_ENDL;
+ 					LL_WARNS(LOG_TXT) << mID << ": Decode of cached file failed (removed), retrying" << LL_ENDL;
 					llassert_always(mDecodeHandle == 0);
 					mFormattedImage = NULL;
 					++mRetryAttempt;
@@ -1835,15 +1850,15 @@ bool LLTextureFetchWorker::doWork(S32 param)
 				}
 				else
 				{
-// 					LL_WARNS() << "UNABLE TO LOAD TEXTURE: " << mID << " RETRIES: " << mRetryAttempt << LL_ENDL;
+// 					LL_WARNS(LOG_TXT) << "UNABLE TO LOAD TEXTURE: " << mID << " RETRIES: " << mRetryAttempt << LL_ENDL;
 					setState(DONE); // failed
 				}
 			}
 			else
 			{
 				llassert_always(mRawImage.notNull());
-				LL_DEBUGS("Texture") << mID << ": Decoded. Discard: " << mDecodedDiscard
-						<< " Raw Image: " << llformat("%dx%d",mRawImage->getWidth(),mRawImage->getHeight()) << LL_ENDL;
+				LL_DEBUGS(LOG_TXT) << mID << ": Decoded. Discard: " << mDecodedDiscard
+								   << " Raw Image: " << llformat("%dx%d",mRawImage->getWidth(),mRawImage->getHeight()) << LL_ENDL;
 				setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
 				setState(WRITE_TO_CACHE);
 			}
@@ -1915,9 +1930,9 @@ bool LLTextureFetchWorker::doWork(S32 param)
 		{
 			// More data was requested, return to INIT
 			setState(INIT);
-			LL_DEBUGS("Texture") << mID << " more data requested, returning to INIT: " 
-								 << " mDecodedDiscard " << mDecodedDiscard << ">= 0 && mDesiredDiscard " << mDesiredDiscard
-								 << "<" << " mDecodedDiscard " << mDecodedDiscard << LL_ENDL;
+			LL_DEBUGS(LOG_TXT) << mID << " more data requested, returning to INIT: " 
+							   << " mDecodedDiscard " << mDecodedDiscard << ">= 0 && mDesiredDiscard " << mDesiredDiscard
+							   << "<" << " mDecodedDiscard " << mDecodedDiscard << LL_ENDL;
 			setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
 			return false;
 		}
@@ -1957,8 +1972,8 @@ void LLTextureFetchWorker::onCompleted(LLCore::HttpHandle handle, LLCore::HttpRe
 	F32 rate = fake_failure_rate;
 	if (mFTType == FTT_SERVER_BAKE && (fake_failure_rate > 0.0) && (rand_val < fake_failure_rate))
 	{
-		LL_WARNS() << mID << " for debugging, setting fake failure status for texture " << mID
-				<< " (rand was " << rand_val << "/" << rate << ")" << LL_ENDL;
+		LL_WARNS(LOG_TXT) << mID << " for debugging, setting fake failure status for texture " << mID
+						  << " (rand was " << rand_val << "/" << rate << ")" << LL_ENDL;
 		response->setStatus(LLCore::HttpStatus(503));
 	}
 	bool success = true;
@@ -1966,12 +1981,12 @@ void LLTextureFetchWorker::onCompleted(LLCore::HttpHandle handle, LLCore::HttpRe
 	LLCore::HttpStatus status(response->getStatus());
 	if (!status && (mFTType == FTT_SERVER_BAKE))
 	{
-		LL_INFOS() << mID << " state " << e_state_name[mState] << LL_ENDL;
+		LL_INFOS(LOG_TXT) << mID << " state " << e_state_name[mState] << LL_ENDL;
 		mFetchRetryPolicy.onFailure(response);
 		F32 retry_after;
 		if (mFetchRetryPolicy.shouldRetry(retry_after))
 		{
-			LL_INFOS() << mID << " will retry after " << retry_after << " seconds, resetting state to LOAD_FROM_NETWORK" << LL_ENDL;
+			LL_INFOS(LOG_TXT) << mID << " will retry after " << retry_after << " seconds, resetting state to LOAD_FROM_NETWORK" << LL_ENDL;
 			mFetcher->removeFromHTTPQueue(mID, S32Bytes(0));
 			std::string reason(status.toString());
 			setGetStatus(status, reason);
@@ -1981,7 +1996,7 @@ void LLTextureFetchWorker::onCompleted(LLCore::HttpHandle handle, LLCore::HttpRe
 		}
 		else
 		{
-			LL_INFOS() << mID << " will not retry" << LL_ENDL;
+			LL_INFOS(LOG_TXT) << mID << " will not retry" << LL_ENDL;
 		}
 	}
 	else
@@ -1989,30 +2004,20 @@ void LLTextureFetchWorker::onCompleted(LLCore::HttpHandle handle, LLCore::HttpRe
 		mFetchRetryPolicy.onSuccess();
 	}
 	
-	LL_DEBUGS("Texture") << "HTTP COMPLETE: " << mID
-						 << " status: " << status.toTerseString()
-						 << " '" << status.toString() << "'"
-						 << LL_ENDL;
-
-//	unsigned int offset(0), length(0), full_length(0);
-//	response->getRange(&offset, &length, &full_length);
-// 	LL_WARNS() << "HTTP COMPLETE: " << mID << " handle: " << handle
-// 			<< " status: " << status.toULong() << " '" << status.toString() << "'"
-// 			<< " req offset: " << mRequestedOffset << " req length: " << mRequestedSize
-// 			<< " offset: " << offset << " length: " << length
-// 			<< LL_ENDL;
-
 	std::string reason(status.toString());
 	setGetStatus(status, reason);
+	LL_DEBUGS(LOG_TXT) << "HTTP COMPLETE: " << mID
+					   << " status: " << status.toTerseString()
+					   << " '" << reason << "'"
+					   << LL_ENDL;
+
 	if (! status)
 	{
 		success = false;
 		if (mFTType != FTT_MAP_TILE) // missing map tiles are normal, don't complain about them.
 		{
-			std::string reason(status.toString());
-			setGetStatus(status, reason);
-			LL_WARNS() << "CURL GET FAILED, status: " << status.toTerseString()
-					<< " reason: " << reason << LL_ENDL;
+			LL_WARNS(LOG_TXT) << "CURL GET FAILED, status: " << status.toTerseString()
+							  << " reason: " << reason << LL_ENDL;
 		}
 	}
 	else
@@ -2223,13 +2228,13 @@ S32 LLTextureFetchWorker::callbackHttpGet(LLCore::HttpResponse * response,
 
 	if (mState != WAIT_HTTP_REQ)
 	{
-		LL_WARNS() << "callbackHttpGet for unrequested fetch worker: " << mID
-				<< " req=" << mSentRequest << " state= " << mState << LL_ENDL;
+		LL_WARNS(LOG_TXT) << "callbackHttpGet for unrequested fetch worker: " << mID
+						  << " req=" << mSentRequest << " state= " << mState << LL_ENDL;
 		return data_size;
 	}
 	if (mLoaded)
 	{
-		LL_WARNS() << "Duplicate callback for " << mID.asString() << LL_ENDL;
+		LL_WARNS(LOG_TXT) << "Duplicate callback for " << mID.asString() << LL_ENDL;
 		return data_size ; // ignore duplicate callback
 	}
 	if (success)
@@ -2238,7 +2243,7 @@ S32 LLTextureFetchWorker::callbackHttpGet(LLCore::HttpResponse * response,
 		LLCore::BufferArray * body(response->getBody());
 		data_size = body ? body->size() : 0;
 
-		LL_DEBUGS("Texture") << "HTTP RECEIVED: " << mID.asString() << " Bytes: " << data_size << LL_ENDL;
+		LL_DEBUGS(LOG_TXT) << "HTTP RECEIVED: " << mID.asString() << " Bytes: " << data_size << LL_ENDL;
 		if (data_size > 0)
 		{
 			LLViewerStatsRecorder::instance().textureFetch(data_size);
@@ -2278,10 +2283,10 @@ S32 LLTextureFetchWorker::callbackHttpGet(LLCore::HttpResponse * response,
 				// response body becomes the entire dataset.
 				if (data_size <= mRequestedOffset)
 				{
-					LL_WARNS("Texture") << "Fetched entire texture " << mID
-										<< " when it was expected to be marked complete.  mImageSize:  "
-										<< mFileSize << " datasize:  " << mFormattedImage->getDataSize()
-										<< LL_ENDL;
+					LL_WARNS(LOG_TXT) << "Fetched entire texture " << mID
+									  << " when it was expected to be marked complete.  mImageSize:  "
+									  << mFileSize << " datasize:  " << mFormattedImage->getDataSize()
+									  << LL_ENDL;
 				}
 				mHaveAllData = TRUE;
 				llassert_always(mDecodeHandle == 0);
@@ -2294,7 +2299,7 @@ S32 LLTextureFetchWorker::callbackHttpGet(LLCore::HttpResponse * response,
 			else if (data_size > mRequestedSize)
 			{
 				// *TODO: This shouldn't be happening any more  (REALLY don't expect this anymore)
-				LL_WARNS() << "data_size = " << data_size << " > requested: " << mRequestedSize << LL_ENDL;
+				LL_WARNS(LOG_TXT) << "data_size = " << data_size << " > requested: " << mRequestedSize << LL_ENDL;
 				mHaveAllData = TRUE;
 				llassert_always(mDecodeHandle == 0);
 				mFormattedImage = NULL; // discard any previous data we had
@@ -2329,7 +2334,7 @@ void LLTextureFetchWorker::callbackCacheRead(bool success, LLImageFormatted* ima
 	LLMutexLock lock(&mWorkMutex);										// +Mw
 	if (mState != LOAD_FROM_TEXTURE_CACHE)
 	{
-// 		LL_WARNS() << "Read callback for " << mID << " with state = " << mState << LL_ENDL;
+// 		LL_WARNS(LOG_TXT) << "Read callback for " << mID << " with state = " << mState << LL_ENDL;
 		return;
 	}
 	if (success)
@@ -2354,7 +2359,7 @@ void LLTextureFetchWorker::callbackCacheWrite(bool success)
 	LLMutexLock lock(&mWorkMutex);										// +Mw
 	if (mState != WAIT_ON_WRITE)
 	{
-// 		LL_WARNS() << "Write callback for " << mID << " with state = " << mState << LL_ENDL;
+// 		LL_WARNS(LOG_TXT) << "Write callback for " << mID << " with state = " << mState << LL_ENDL;
 		return;
 	}
 	mWritten = TRUE;
@@ -2373,7 +2378,7 @@ void LLTextureFetchWorker::callbackDecoded(bool success, LLImageRaw* raw, LLImag
 	}
 	if (mState != DECODE_IMAGE_UPDATE)
 	{
-// 		LL_WARNS() << "Decode callback for " << mID << " with state = " << mState << LL_ENDL;
+// 		LL_WARNS(LOG_TXT) << "Decode callback for " << mID << " with state = " << mState << LL_ENDL;
 		mDecodeHandle = 0;
 		return;
 	}
@@ -2386,17 +2391,17 @@ void LLTextureFetchWorker::callbackDecoded(bool success, LLImageRaw* raw, LLImag
 		mRawImage = raw;
 		mAuxImage = aux;
 		mDecodedDiscard = mFormattedImage->getDiscardLevel();
- 		LL_DEBUGS("Texture") << mID << ": Decode Finished. Discard: " << mDecodedDiscard
-							 << " Raw Image: " << llformat("%dx%d",mRawImage->getWidth(),mRawImage->getHeight()) << LL_ENDL;
+ 		LL_DEBUGS(LOG_TXT) << mID << ": Decode Finished. Discard: " << mDecodedDiscard
+						   << " Raw Image: " << llformat("%dx%d",mRawImage->getWidth(),mRawImage->getHeight()) << LL_ENDL;
 	}
 	else
 	{
-		LL_WARNS() << "DECODE FAILED: " << mID << " Discard: " << (S32)mFormattedImage->getDiscardLevel() << LL_ENDL;
+		LL_WARNS(LOG_TXT) << "DECODE FAILED: " << mID << " Discard: " << (S32)mFormattedImage->getDiscardLevel() << LL_ENDL;
 		removeFromCache();
 		mDecodedDiscard = -1; // Redundant, here for clarity and paranoia
 	}
 	mDecoded = TRUE;
-// 	LL_INFOS() << mID << " : DECODE COMPLETE " << LL_ENDL;
+// 	LL_INFOS(LOG_TXT) << mID << " : DECODE COMPLETE " << LL_ENDL;
 	setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
 	mCacheReadTime = mCacheReadTimer.getElapsedTimeF32();
 }																		// -Mw
@@ -2583,8 +2588,8 @@ bool LLTextureFetch::createRequest(FTType f_type, const std::string& url, const
 	{
 		if (worker->mHost != host)
 		{
-			LL_WARNS() << "LLTextureFetch::createRequest " << id << " called with multiple hosts: "
-					<< host << " != " << worker->mHost << LL_ENDL;
+			LL_WARNS(LOG_TXT) << "LLTextureFetch::createRequest " << id << " called with multiple hosts: "
+							  << host << " != " << worker->mHost << LL_ENDL;
 			removeRequest(worker, true);
 			worker = NULL;
 			return false;
@@ -2601,13 +2606,13 @@ bool LLTextureFetch::createRequest(FTType f_type, const std::string& url, const
 		llassert(!url.empty() && (!exten.empty() && LLImageBase::getCodecFromExtension(exten) != IMG_CODEC_J2C));
 
 		// Do full requests for baked textures to reduce interim blurring.
-		LL_DEBUGS("Texture") << "full request for " << id << " texture is FTT_SERVER_BAKE" << LL_ENDL;
+		LL_DEBUGS(LOG_TXT) << "full request for " << id << " texture is FTT_SERVER_BAKE" << LL_ENDL;
 		desired_size = MAX_IMAGE_DATA_SIZE;
 		desired_discard = 0;
 	}
 	else if (!url.empty() && (!exten.empty() && LLImageBase::getCodecFromExtension(exten) != IMG_CODEC_J2C))
 	{
-		LL_DEBUGS("Texture") << "full request for " << id << " exten is not J2C: " << exten << LL_ENDL;
+		LL_DEBUGS(LOG_TXT) << "full request for " << id << " exten is not J2C: " << exten << LL_ENDL;
 		// Only do partial requests for J2C at the moment
 		desired_size = MAX_IMAGE_DATA_SIZE;
 		desired_discard = 0;
@@ -2648,7 +2653,9 @@ bool LLTextureFetch::createRequest(FTType f_type, const std::string& url, const
 		worker->setImagePriority(priority);
 		worker->setDesiredDiscard(desired_discard, desired_size);
 		worker->setCanUseHTTP(can_use_http);
-		worker->setUrl(url);
+
+		//MAINT-4184 url is always empty.  Do not set with it.
+
 		if (!worker->haveWork())
 		{
 			worker->setState(LLTextureFetchWorker::INIT);
@@ -2675,8 +2682,8 @@ bool LLTextureFetch::createRequest(FTType f_type, const std::string& url, const
 		worker->unlockWorkMutex();										// -Mw
 	}
 	
- 	LL_DEBUGS("Texture") << "REQUESTED: " << id << " f_type " << fttype_to_string(f_type)
-						 << " Discard: " << desired_discard << " size " << desired_size << LL_ENDL;
+ 	LL_DEBUGS(LOG_TXT) << "REQUESTED: " << id << " f_type " << fttype_to_string(f_type)
+					   << " Discard: " << desired_discard << " size " << desired_size << LL_ENDL;
 	return true;
 }
 
@@ -2871,7 +2878,7 @@ bool LLTextureFetch::getRequestFinished(const LLUUID& id, S32& discard_level,
 			// Should only happen if we set mDebugPause...
 			if (!mDebugPause)
 			{
-// 				LL_WARNS() << "Adding work for inactive worker: " << id << LL_ENDL;
+// 				LL_WARNS(LOG_TXT) << "Adding work for inactive worker: " << id << LL_ENDL;
 				worker->addWork(0, LLWorkerThread::PRIORITY_HIGH | worker->mWorkPriority);
 			}
 		}
@@ -2888,7 +2895,7 @@ bool LLTextureFetch::getRequestFinished(const LLUUID& id, S32& discard_level,
 				record(sCacheReadLatency, cache_read_time);
 			}
 			res = true;
-			LL_DEBUGS("Texture") << id << ": Request Finished. State: " << worker->mState << " Discard: " << discard_level << LL_ENDL;
+			LL_DEBUGS(LOG_TXT) << id << ": Request Finished. State: " << worker->mState << " Discard: " << discard_level << LL_ENDL;
 			worker->unlockWorkMutex();									// -Mw
 		}
 		else
@@ -2993,9 +3000,9 @@ void LLTextureFetch::commonUpdate()
 	LLCore::HttpStatus status = mHttpRequest->update(0);
 	if (! status)
 	{
-		LL_INFOS_ONCE("Texture") << "Problem during HTTP servicing.  Reason:  "
-								 << status.toString()
-								 << LL_ENDL;
+		LL_INFOS_ONCE(LOG_TXT) << "Problem during HTTP servicing.  Reason:  "
+							   << status.toString()
+							   << LL_ENDL;
 	}
 }
 
@@ -3075,11 +3082,11 @@ void LLTextureFetch::startThread()
 // Threads:  Ttf
 void LLTextureFetch::endThread()
 {
-	LL_INFOS("Texture") << "CacheReads:  " << mTotalCacheReadCount
-						<< ", CacheWrites:  " << mTotalCacheWriteCount
-						<< ", ResWaits:  " << mTotalResourceWaitCount
-						<< ", TotalHTTPReq:  " << getTotalNumHTTPRequests()
-						<< LL_ENDL;
+	LL_INFOS(LOG_TXT) << "CacheReads:  " << mTotalCacheReadCount
+					  << ", CacheWrites:  " << mTotalCacheWriteCount
+					  << ", ResWaits:  " << mTotalResourceWaitCount
+					  << ", TotalHTTPReq:  " << getTotalNumHTTPRequests()
+					  << LL_ENDL;
 }
 
 // Threads:  Ttf
@@ -3108,7 +3115,7 @@ void LLTextureFetch::threadedUpdate()
 		S32 q = mCurlGetRequest->getQueued();
 		if (q > 0)
 		{
-			LL_INFOS() << "Queued gets: " << q << LL_ENDL;
+			LL_INFOS(LOG_TXT) << "Queued gets: " << q << LL_ENDL;
 			info_timer.reset();
 		}
 	}
@@ -3157,7 +3164,7 @@ void LLTextureFetch::sendRequestListToSimulators()
 				(req->mState != LLTextureFetchWorker::LOAD_FROM_SIMULATOR))
 			{
 				// We already received our URL, remove from the queue
-				LL_WARNS() << "Worker: " << req->mID << " in mNetworkQueue but in wrong state: " << req->mState << LL_ENDL;
+				LL_WARNS(LOG_TXT) << "Worker: " << req->mID << " in mNetworkQueue but in wrong state: " << req->mState << LL_ENDL;
 				mNetworkQueue.erase(curiter);
 				continue;
 			}
@@ -3225,7 +3232,7 @@ void LLTextureFetch::sendRequestListToSimulators()
 				gMessageSystem->addF32Fast(_PREHASH_DownloadPriority, req->mImagePriority);
 				gMessageSystem->addU32Fast(_PREHASH_Packet, packet);
 				gMessageSystem->addU8Fast(_PREHASH_Type, req->mType);
-// 				LL_INFOS() << "IMAGE REQUEST: " << req->mID << " Discard: " << req->mDesiredDiscard
+// 				LL_INFOS(LOG_TXT) << "IMAGE REQUEST: " << req->mID << " Discard: " << req->mDesiredDiscard
 // 						<< " Packet: " << packet << " Priority: " << req->mImagePriority << LL_ENDL;
 
 				static LLCachedControl<bool> log_to_viewer_log(gSavedSettings,"LogTextureDownloadsToViewerLog", false);
@@ -3247,7 +3254,7 @@ void LLTextureFetch::sendRequestListToSimulators()
 				sim_request_count++;
 				if (sim_request_count >= IMAGES_PER_REQUEST)
 				{
-// 					LL_INFOS() << "REQUESTING " << sim_request_count << " IMAGES FROM HOST: " << host.getIPString() << LL_ENDL;
+// 					LL_INFOS(LOG_TXT) << "REQUESTING " << sim_request_count << " IMAGES FROM HOST: " << host.getIPString() << LL_ENDL;
 
 					gMessageSystem->sendSemiReliable(host, NULL, NULL);
 					sim_request_count = 0;
@@ -3256,7 +3263,7 @@ void LLTextureFetch::sendRequestListToSimulators()
 		}
 		if (gMessageSystem && sim_request_count > 0 && sim_request_count < IMAGES_PER_REQUEST)
 		{
-// 			LL_INFOS() << "REQUESTING " << sim_request_count << " IMAGES FROM HOST: " << host.getIPString() << LL_ENDL;
+// 			LL_INFOS(LOG_TXT) << "REQUESTING " << sim_request_count << " IMAGES FROM HOST: " << host.getIPString() << LL_ENDL;
 			gMessageSystem->sendSemiReliable(host, NULL, NULL);
 			sim_request_count = 0;
 		}
@@ -3292,7 +3299,7 @@ void LLTextureFetch::sendRequestListToSimulators()
 					gMessageSystem->addF32Fast(_PREHASH_DownloadPriority, 0);
 					gMessageSystem->addU32Fast(_PREHASH_Packet, 0);
 					gMessageSystem->addU8Fast(_PREHASH_Type, 0);
-// 				LL_INFOS() << "CANCELING IMAGE REQUEST: " << (*iter2) << LL_ENDL;
+// 				LL_INFOS(LOG_TXT) << "CANCELING IMAGE REQUEST: " << (*iter2) << LL_ENDL;
 
 					request_count++;
 					if (request_count >= IMAGES_PER_REQUEST)
@@ -3320,12 +3327,12 @@ bool LLTextureFetchWorker::insertPacket(S32 index, U8* data, S32 size)
 	mRequestedTimer.reset();
 	if (index >= mTotalPackets)
 	{
-// 		LL_WARNS() << "Received Image Packet " << index << " > max: " << mTotalPackets << " for image: " << mID << LL_ENDL;
+// 		LL_WARNS(LOG_TXT) << "Received Image Packet " << index << " > max: " << mTotalPackets << " for image: " << mID << LL_ENDL;
 		return false;
 	}
 	if (index > 0 && index < mTotalPackets-1 && size != MAX_IMG_PACKET_SIZE)
 	{
-// 		LL_WARNS() << "Received bad sized packet: " << index << ", " << size << " != " << MAX_IMG_PACKET_SIZE << " for image: " << mID << LL_ENDL;
+// 		LL_WARNS(LOG_TXT) << "Received bad sized packet: " << index << ", " << size << " != " << MAX_IMG_PACKET_SIZE << " for image: " << mID << LL_ENDL;
 		return false;
 	}
 	
@@ -3335,7 +3342,7 @@ bool LLTextureFetchWorker::insertPacket(S32 index, U8* data, S32 size)
 	}
 	else if (mPackets[index] != NULL)
 	{
-// 		LL_WARNS() << "Received duplicate packet: " << index << " for image: " << mID << LL_ENDL;
+// 		LL_WARNS(LOG_TXT) << "Received duplicate packet: " << index << " for image: " << mID << LL_ENDL;
 		return false;
 	}
 
@@ -3355,7 +3362,7 @@ void LLTextureFetchWorker::setState(e_state new_state)
 	// blurry images fairly frequently. Presumably this is an
 	// indication of some subtle timing or locking issue.
 
-//		LL_INFOS("Texture") << "id: " << mID << " FTType: " << mFTType << " disc: " << mDesiredDiscard << " sz: " << mDesiredSize << " state: " << e_state_name[mState] << " => " << e_state_name[new_state] << LL_ENDL;
+//		LL_INFOS(LOG_TXT) << "id: " << mID << " FTType: " << mFTType << " disc: " << mDesiredDiscard << " sz: " << mDesiredSize << " state: " << e_state_name[mState] << " => " << e_state_name[new_state] << LL_ENDL;
 	}
 	mState = new_state;
 }
@@ -3371,13 +3378,13 @@ bool LLTextureFetch::receiveImageHeader(const LLHost& host, const LLUUID& id, U8
 	
 	if (!worker)
 	{
-// 		LL_WARNS() << "Received header for non active worker: " << id << LL_ENDL;
+// 		LL_WARNS(LOG_TXT) << "Received header for non active worker: " << id << LL_ENDL;
 		res = false;
 	}
 	else if (worker->mState != LLTextureFetchWorker::LOAD_FROM_NETWORK ||
 			 worker->mSentRequest != LLTextureFetchWorker::SENT_SIM)
 	{
-// 		LL_WARNS() << "receiveImageHeader for worker: " << id
+// 		LL_WARNS(LOG_TXT) << "receiveImageHeader for worker: " << id
 // 				<< " in state: " << LLTextureFetchWorker::sStateDescs[worker->mState]
 // 				<< " sent: " << worker->mSentRequest << LL_ENDL;
 		res = false;
@@ -3385,12 +3392,12 @@ bool LLTextureFetch::receiveImageHeader(const LLHost& host, const LLUUID& id, U8
 	else if (worker->mLastPacket != -1)
 	{
 		// check to see if we've gotten this packet before
-// 		LL_WARNS() << "Received duplicate header for: " << id << LL_ENDL;
+// 		LL_WARNS(LOG_TXT) << "Received duplicate header for: " << id << LL_ENDL;
 		res = false;
 	}
 	else if (!data_size)
 	{
-// 		LL_WARNS() << "Img: " << id << ":" << " Empty Image Header" << LL_ENDL;
+// 		LL_WARNS(LOG_TXT) << "Img: " << id << ":" << " Empty Image Header" << LL_ENDL;
 		res = false;
 	}
 	if (!res)
@@ -3432,17 +3439,17 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1
 	
 	if (!worker)
 	{
-// 		LL_WARNS() << "Received packet " << packet_num << " for non active worker: " << id << LL_ENDL;
+// 		LL_WARNS(LOG_TXT) << "Received packet " << packet_num << " for non active worker: " << id << LL_ENDL;
 		res = false;
 	}
 	else if (worker->mLastPacket == -1)
 	{
-// 		LL_WARNS() << "Received packet " << packet_num << " before header for: " << id << LL_ENDL;
+// 		LL_WARNS(LOG_TXT) << "Received packet " << packet_num << " before header for: " << id << LL_ENDL;
 		res = false;
 	}
 	else if (!data_size)
 	{
-// 		LL_WARNS() << "Img: " << id << ":" << " Empty Image Header" << LL_ENDL;
+// 		LL_WARNS(LOG_TXT) << "Img: " << id << ":" << " Empty Image Header" << LL_ENDL;
 		res = false;
 	}
 	if (!res)
@@ -3470,7 +3477,7 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1
 	}
 	else
 	{
-// 		LL_WARNS() << "receiveImagePacket " << packet_num << "/" << worker->mLastPacket << " for worker: " << id
+// 		LL_WARNS(LOG_TXT) << "receiveImagePacket " << packet_num << "/" << worker->mLastPacket << " for worker: " << id
 // 				<< " in state: " << LLTextureFetchWorker::sStateDescs[worker->mState] << LL_ENDL;
 		removeFromNetworkQueue(worker, true); // failsafe
 	}
@@ -3563,33 +3570,33 @@ S32 LLTextureFetch::getFetchState(const LLUUID& id, F32& data_progress_p, F32& r
 
 void LLTextureFetch::dump()
 {
-	LL_INFOS() << "LLTextureFetch REQUESTS:" << LL_ENDL;
+	LL_INFOS(LOG_TXT) << "LLTextureFetch REQUESTS:" << LL_ENDL;
 	for (request_queue_t::iterator iter = mRequestQueue.begin();
 		 iter != mRequestQueue.end(); ++iter)
 	{
 		LLQueuedThread::QueuedRequest* qreq = *iter;
 		LLWorkerThread::WorkRequest* wreq = (LLWorkerThread::WorkRequest*)qreq;
 		LLTextureFetchWorker* worker = (LLTextureFetchWorker*)wreq->getWorkerClass();
-		LL_INFOS() << " ID: " << worker->mID
-				<< " PRI: " << llformat("0x%08x",wreq->getPriority())
-				<< " STATE: " << worker->sStateDescs[worker->mState]
-				<< LL_ENDL;
+		LL_INFOS(LOG_TXT) << " ID: " << worker->mID
+						  << " PRI: " << llformat("0x%08x",wreq->getPriority())
+						  << " STATE: " << worker->sStateDescs[worker->mState]
+						  << LL_ENDL;
 	}
 
-	LL_INFOS() << "LLTextureFetch ACTIVE_HTTP:" << LL_ENDL;
+	LL_INFOS(LOG_TXT) << "LLTextureFetch ACTIVE_HTTP:" << LL_ENDL;
 	for (queue_t::const_iterator iter(mHTTPTextureQueue.begin());
 		 mHTTPTextureQueue.end() != iter;
 		 ++iter)
 	{
-		LL_INFOS() << " ID: " << (*iter) << LL_ENDL;
+		LL_INFOS(LOG_TXT) << " ID: " << (*iter) << LL_ENDL;
 	}
 
-	LL_INFOS() << "LLTextureFetch WAIT_HTTP_RESOURCE:" << LL_ENDL;
+	LL_INFOS(LOG_TXT) << "LLTextureFetch WAIT_HTTP_RESOURCE:" << LL_ENDL;
 	for (wait_http_res_queue_t::const_iterator iter(mHttpWaitResource.begin());
 		 mHttpWaitResource.end() != iter;
 		 ++iter)
 	{
-		LL_INFOS() << " ID: " << (*iter) << LL_ENDL;
+		LL_INFOS(LOG_TXT) << " ID: " << (*iter) << LL_ENDL;
 	}
 }
 
@@ -3714,10 +3721,10 @@ void LLTextureFetch::releaseHttpWaiters()
 		{
 			// Not in expected state, remove it, try the next one
 			worker->unlockWorkMutex();									// -Mw
-			LL_WARNS("Texture") << "Resource-waited texture " << worker->mID
-								<< " in unexpected state:  " << worker->mState
-								<< ".  Removing from wait list."
-								<< LL_ENDL;
+			LL_WARNS(LOG_TXT) << "Resource-waited texture " << worker->mID
+							  << " in unexpected state:  " << worker->mState
+							  << ".  Removing from wait list."
+							  << LL_ENDL;
 			removeHttpWaiter(worker->mID);
 			continue;
 		}
@@ -3884,14 +3891,14 @@ class AssetReportHandler : public LLCore::HttpHandler
 
 		if (status)
 		{
-			LL_DEBUGS("Texture") << "Successfully delivered asset metrics to grid."
-								 << LL_ENDL;
+			LL_DEBUGS(LOG_TXT) << "Successfully delivered asset metrics to grid."
+							   << LL_ENDL;
 		}
 		else
 		{
-			LL_WARNS("Texture") << "Error delivering asset metrics to grid.  Status:  "
-								<< status.toTerseString()
-								<< ", Reason:  " << status.toString() << LL_ENDL;
+			LL_WARNS(LOG_TXT) << "Error delivering asset metrics to grid.  Status:  "
+							  << status.toTerseString()
+							  << ", Reason:  " << status.toString() << LL_ENDL;
 		}
 	}
 }; // end class AssetReportHandler
@@ -4502,14 +4509,14 @@ void LLTextureFetchDebugger::debugHTTP()
 	LLViewerRegion* region = gAgent.getRegion();
 	if (!region)
 	{
-		LL_INFOS() << "Fetch Debugger : Current region undefined. Cannot fetch textures through HTTP." << LL_ENDL;
+		LL_INFOS(LOG_TXT) << "Fetch Debugger : Current region undefined. Cannot fetch textures through HTTP." << LL_ENDL;
 		return;
 	}
 	
 	mHTTPUrl = region->getHttpUrl();
 	if (mHTTPUrl.empty())
 	{
-		LL_INFOS() << "Fetch Debugger : Current region URL undefined. Cannot fetch textures through HTTP." << LL_ENDL;
+		LL_INFOS(LOG_TXT) << "Fetch Debugger : Current region URL undefined. Cannot fetch textures through HTTP." << LL_ENDL;
 		return;
 	}
 	
@@ -4580,15 +4587,15 @@ S32 LLTextureFetchDebugger::fillCurlQueue()
 			// Failed to queue request, log it and mark it done.
 			LLCore::HttpStatus status(mFetcher->getHttpRequest().getStatus());
 
-			LL_WARNS("Texture") << "Couldn't issue HTTP request in debugger for texture "
-								<< mFetchingHistory[i].mID
-								<< ", status: " << status.toTerseString()
-								<< " reason:  " << status.toString()
-								<< LL_ENDL;
+			LL_WARNS(LOG_TXT) << "Couldn't issue HTTP request in debugger for texture "
+							  << mFetchingHistory[i].mID
+							  << ", status: " << status.toTerseString()
+							  << " reason:  " << status.toString()
+							  << LL_ENDL;
 			mFetchingHistory[i].mCurlState = FetchEntry::CURL_DONE;
 		}
 	}
-	//LL_INFOS() << "Fetch Debugger : Having " << mNbCurlRequests << " requests through the curl thread." << LL_ENDL;
+	//LL_INFOS(LOG_TXT) << "Fetch Debugger : Having " << mNbCurlRequests << " requests through the curl thread." << LL_ENDL;
 	return mNbCurlRequests;
 }
 
@@ -4890,7 +4897,7 @@ void LLTextureFetchDebugger::onCompleted(LLCore::HttpHandle handle, LLCore::Http
 	handle_fetch_map_t::iterator iter(mHandleToFetchIndex.find(handle));
 	if (mHandleToFetchIndex.end() == iter)
 	{
-		LL_INFOS() << "Fetch Debugger : Couldn't find handle " << handle << " in fetch list." << LL_ENDL;
+		LL_INFOS(LOG_TXT) << "Fetch Debugger : Couldn't find handle " << handle << " in fetch list." << LL_ENDL;
 		return;
 	}
 	
@@ -4898,7 +4905,7 @@ void LLTextureFetchDebugger::onCompleted(LLCore::HttpHandle handle, LLCore::Http
 	mHandleToFetchIndex.erase(iter);
 	if (fetch_ind >= mFetchingHistory.size() || mFetchingHistory[fetch_ind].mHttpHandle != handle)
 	{
-		LL_INFOS() << "Fetch Debugger : Handle and fetch object in disagreement.  Punting." << LL_ENDL;
+		LL_INFOS(LOG_TXT) << "Fetch Debugger : Handle and fetch object in disagreement.  Punting." << LL_ENDL;
 	}
 	else
 	{
@@ -4948,7 +4955,7 @@ void LLTextureFetchDebugger::callbackHTTP(FetchEntry & fetch, LLCore::HttpRespon
 		
 		S32 data_size = ba ? ba->size() : 0;
 		fetch.mCurlReceivedSize += data_size;
-		//LL_INFOS() << "Fetch Debugger : got results for " << fetch.mID << ", data_size = " << data_size << ", received = " << fetch.mCurlReceivedSize << ", requested = " << fetch.mRequestedSize << ", partial = " << partial << LL_ENDL;
+		//LL_INFOS(LOG_TXT) << "Fetch Debugger : got results for " << fetch.mID << ", data_size = " << data_size << ", received = " << fetch.mCurlReceivedSize << ", requested = " << fetch.mRequestedSize << ", partial = " << partial << LL_ENDL;
 		if ((fetch.mCurlReceivedSize >= fetch.mRequestedSize) || !partial || (fetch.mRequestedSize == 600))
 		{
 			U8* d_buffer = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), data_size);
@@ -4974,9 +4981,9 @@ void LLTextureFetchDebugger::callbackHTTP(FetchEntry & fetch, LLCore::HttpRespon
 	}
 	else //failed
 	{
-		LL_INFOS() << "Fetch Debugger : CURL GET FAILED,  ID = " << fetch.mID
-				<< ", status: " << status.toTerseString()
-				<< " reason:  " << status.toString() << LL_ENDL;
+		LL_INFOS(LOG_TXT) << "Fetch Debugger : CURL GET FAILED,  ID = " << fetch.mID
+						  << ", status: " << status.toTerseString()
+						  << " reason:  " << status.toString() << LL_ENDL;
 	}
 }
 
diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp
index aa1f680a1e9bbcb47f12d07e07fdaaf8f5faa3db..4f0413a2e4e3579a771d7c246751a0dfc2491876 100755
--- a/indra/newview/lltextureview.cpp
+++ b/indra/newview/lltextureview.cpp
@@ -563,7 +563,7 @@ void LLGLTexMemBar::draw()
 
 	//----------------------------------------------------------------------------
 
-	text = llformat("Textures: %d Fetch: %d(%d) Pkts:%d(%d) Cache R/W: %d/%d LFS:%d RAW:%d HTP:%d DEC:%d CRE:%d",
+	text = llformat("Textures: %d Fetch: %d(%d) Pkts:%d(%d) Cache R/W: %d/%d LFS:%d RAW:%d HTP:%d DEC:%d CRE:%d ",
 					gTextureList.getNumImages(),
 					LLAppViewer::getTextureFetch()->getNumRequests(), LLAppViewer::getTextureFetch()->getNumDeletes(),
 					LLAppViewer::getTextureFetch()->mPacketCount, LLAppViewer::getTextureFetch()->mBadPacketCount, 
@@ -585,7 +585,7 @@ void LLGLTexMemBar::draw()
 	color = bandwidth > max_bandwidth ? LLColor4::red : bandwidth > max_bandwidth*.75f ? LLColor4::yellow : text_color;
 	color[VALPHA] = text_color[VALPHA];
 	text = llformat("BW:%.0f/%.0f",bandwidth.value(), max_bandwidth.value());
-	LLFontGL::getFontMonospace()->renderUTF8(text, 0, x_right, v_offset + line_height*2,
+	LLFontGL::getFontMonospace()->renderUTF8(text, 0, x_right, v_offset + line_height*3,
 											 color, LLFontGL::LEFT, LLFontGL::TOP);
 	
 	// Mesh status line
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 9d5c3c4d4a0ad0d3c3eef2d86bc3882d1218a2b8..332d04a1f4549a6caff9312588998faa09522367 100755
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -5747,83 +5747,101 @@ bool handle_special_notification(std::string notificationID, LLSD& llsdBlock)
 }
 
 // some of the server notifications need special handling. This is where we do that.
-bool handle_teleport_access_blocked(LLSD& llsdBlock)
+bool handle_teleport_access_blocked(LLSD& llsdBlock, const std::string & notificationID, const std::string & defaultMessage)
 {
-	std::string notificationID("TeleportEntryAccessBlocked");
 	U8 regionAccess = static_cast<U8>(llsdBlock["_region_access"].asInteger());
 	std::string regionMaturity = LLViewerRegion::accessToString(regionAccess);
 	LLStringUtil::toLower(regionMaturity);
 	llsdBlock["REGIONMATURITY"] = regionMaturity;
 	
 	bool returnValue = false;
-	LLNotificationPtr maturityLevelNotification;
-	std::string notifySuffix = "_Notify";
-	if (regionAccess == SIM_ACCESS_MATURE)
-	{
-		if (gAgent.isTeen())
-		{
-			gAgent.clearTeleportRequest();
-			maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock);
-			returnValue = true;
+	LLNotificationPtr tp_failure_notification;
+	std::string notifySuffix;
 
-			notifySuffix = "_NotifyAdultsOnly";
-		}
-		else if (gAgent.prefersPG())
+	if (notificationID == std::string("TeleportEntryAccessBlocked"))
+	{
+		notifySuffix = "_Notify";
+		if (regionAccess == SIM_ACCESS_MATURE)
 		{
-			if (gAgent.hasRestartableFailedTeleportRequest())
+			if (gAgent.isTeen())
 			{
-				maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback);
+				gAgent.clearTeleportRequest();
+				tp_failure_notification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock);
 				returnValue = true;
+
+				notifySuffix = "_NotifyAdultsOnly";
+			}
+			else if (gAgent.prefersPG())
+			{
+				if (gAgent.hasRestartableFailedTeleportRequest())
+				{
+					tp_failure_notification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback);
+					returnValue = true;
+				}
+				else
+				{
+					gAgent.clearTeleportRequest();
+					tp_failure_notification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
+					returnValue = true;
+				}
 			}
 			else
 			{
 				gAgent.clearTeleportRequest();
-				maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
+				tp_failure_notification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
 				returnValue = true;
 			}
 		}
-		else
-		{
-			gAgent.clearTeleportRequest();
-			maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
-			returnValue = true;
-		}
-	}
-	else if (regionAccess == SIM_ACCESS_ADULT)
-	{
-		if (!gAgent.isAdult())
-		{
-			gAgent.clearTeleportRequest();
-			maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock);
-			returnValue = true;
-
-			notifySuffix = "_NotifyAdultsOnly";
-		}
-		else if (gAgent.prefersPG() || gAgent.prefersMature())
+		else if (regionAccess == SIM_ACCESS_ADULT)
 		{
-			if (gAgent.hasRestartableFailedTeleportRequest())
+			if (!gAgent.isAdult())
 			{
-				maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback);
+				gAgent.clearTeleportRequest();
+				tp_failure_notification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock);
 				returnValue = true;
+
+				notifySuffix = "_NotifyAdultsOnly";
+			}
+			else if (gAgent.prefersPG() || gAgent.prefersMature())
+			{
+				if (gAgent.hasRestartableFailedTeleportRequest())
+				{
+					tp_failure_notification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback);
+					returnValue = true;
+				}
+				else
+				{
+					gAgent.clearTeleportRequest();
+					tp_failure_notification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
+					returnValue = true;
+				}
 			}
 			else
 			{
 				gAgent.clearTeleportRequest();
-				maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
+				tp_failure_notification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
 				returnValue = true;
 			}
 		}
-		else
+	}		// End of special handling for "TeleportEntryAccessBlocked"
+	else
+	{	// Normal case, no message munging
+		gAgent.clearTeleportRequest();
+		if (LLNotifications::getInstance()->templateExists(notificationID))
 		{
-			gAgent.clearTeleportRequest();
-			maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
-			returnValue = true;
+			tp_failure_notification = LLNotificationsUtil::add(notificationID, llsdBlock, llsdBlock);
 		}
+		else
+		{
+			llsdBlock["MESSAGE"] = defaultMessage;
+			tp_failure_notification = LLNotificationsUtil::add("GenericAlertOK", llsdBlock);
 		}
+		returnValue = true;
+	}
 
-	if ((maturityLevelNotification == NULL) || maturityLevelNotification->isIgnored())
+	if ((tp_failure_notification == NULL) || tp_failure_notification->isIgnored())
 	{
-		// Given a simple notification if no maturityLevelNotification is set or it is ignore
+		// Given a simple notification if no tp_failure_notification is set or it is ignore
 		LLNotificationsUtil::add(notificationID + notifySuffix, llsdBlock);
 	}
 
@@ -6039,8 +6057,8 @@ void process_alert_core(const std::string& message, BOOL modal)
 		std::string alert_name(message.substr(ALERT_PREFIX.length()));
 		if (!handle_special_alerts(alert_name))
 		{
-		LLNotificationsUtil::add(alert_name);
-	}
+			LLNotificationsUtil::add(alert_name);
+		}
 	}
 	else if (message.find(NOTIFY_PREFIX) == 0)
 	{
@@ -6062,10 +6080,10 @@ void process_alert_core(const std::string& message, BOOL modal)
 			LLFloaterRegionRestarting::close();
 		}
 
-			std::string new_msg =LLNotifications::instance().getGlobalString(text);
-			args["MESSAGE"] = new_msg;
-			LLNotificationsUtil::add("SystemMessage", args);
-		}
+		std::string new_msg =LLNotifications::instance().getGlobalString(text);
+		args["MESSAGE"] = new_msg;
+		LLNotificationsUtil::add("SystemMessage", args);
+	}
 	else if (modal)
 	{
 		LLSD args;
@@ -6648,8 +6666,8 @@ std::string formatted_time(const time_t& the_time)
 
 void process_teleport_failed(LLMessageSystem *msg, void**)
 {
-	std::string reason;
-	std::string big_reason;
+	std::string message_id;		// Tag from server, like "RegionEntryAccessBlocked"
+	std::string big_reason;		// Actual message to display
 	LLSD args;
 
 	// Let the interested parties know that teleport failed.
@@ -6659,16 +6677,16 @@ void process_teleport_failed(LLMessageSystem *msg, void**)
 	if (msg->has(_PREHASH_AlertInfo) && msg->getSizeFast(_PREHASH_AlertInfo, _PREHASH_Message) > 0)
 	{
 		// Get the message ID
-		msg->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, reason);
-		big_reason = LLAgent::sTeleportErrorMessages[reason];
+		msg->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, message_id);
+		big_reason = LLAgent::sTeleportErrorMessages[message_id];
 		if ( big_reason.size() > 0 )
 		{	// Substitute verbose reason from the local map
 			args["REASON"] = big_reason;
 		}
 		else
 		{	// Nothing found in the map - use what the server returned in the original message block
-			msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, reason);
-			args["REASON"] = reason;
+			msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, big_reason);
+			args["REASON"] = big_reason;
 		}
 
 		LLSD llsd_block;
@@ -6684,7 +6702,7 @@ void process_teleport_failed(LLMessageSystem *msg, void**)
 			else
 			{
 				// change notification name in this special case
-				if (handle_teleport_access_blocked(llsd_block))
+				if (handle_teleport_access_blocked(llsd_block, message_id, args["REASON"]))
 				{
 					if( gAgent.getTeleportState() != LLAgent::TELEPORT_NONE )
 					{
@@ -6697,17 +6715,17 @@ void process_teleport_failed(LLMessageSystem *msg, void**)
 
 	}
 	else
-	{
-		msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, reason);
+	{	// Extra message payload not found - use what the simulator sent
+		msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, message_id);
 
-		big_reason = LLAgent::sTeleportErrorMessages[reason];
+		big_reason = LLAgent::sTeleportErrorMessages[message_id];
 		if ( big_reason.size() > 0 )
 		{	// Substitute verbose reason from the local map
 			args["REASON"] = big_reason;
 		}
 		else
 		{	// Nothing found in the map - use what the server returned
-			args["REASON"] = reason;
+			args["REASON"] = message_id;
 		}
 	}
 
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index cd5f64b9caca893fe18c5787b73ee322d97d07f4..11cbf3fc243cb26c42b6374fcc5d627609864370 100755
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -285,8 +285,8 @@ class BaseCapabilitiesComplete : public LLHTTPClient::Responder
 		{
 			regionp->setCapability(iter->first, iter->second);
 
-			LL_DEBUGS("AppInit", "Capabilities") << "got capability for " 
-				<< iter->first << LL_ENDL;
+			LL_DEBUGS("AppInit", "Capabilities")
+				<< "Capability '" << iter->first << "' is '" << iter->second << "'" << LL_ENDL;
 
 			/* HACK we're waiting for the ServerReleaseNotes */
 			if (iter->first == "ServerReleaseNotes" && regionp->getReleaseNotesRequested())
diff --git a/indra/newview/skins/default/textures/bottomtray/ChatBarHandle.png b/indra/newview/skins/default/textures/bottomtray/ChatBarHandle.png
index 8b58db0cba8c3230b38fd551f5487c1cf444afd5..50239c8af8e867be69c06b617f7cc83e846ecee2 100755
Binary files a/indra/newview/skins/default/textures/bottomtray/ChatBarHandle.png and b/indra/newview/skins/default/textures/bottomtray/ChatBarHandle.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png b/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png
index 9e7291d6fbf131ec27337bd13434c37ba4af2128..fade065ce7fc155b25f1e2486aaa2c52bab4f9d6 100755
Binary files a/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png and b/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png
index 0ac5b72b8f70e67faef73d07f1ffcd483690c4c1..eb2f3dbaa42dea9b85beae2f1273b5bacd53972a 100755
Binary files a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png and b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png b/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png
index d7ec04237b53b2b2634210381b1a423a401375d6..4ab4bbe4afd287156197b64efdc950e679d19615 100755
Binary files a/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png and b/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png differ
diff --git a/indra/newview/skins/default/textures/down_arrow.png b/indra/newview/skins/default/textures/down_arrow.png
index 155f80c97ea48f32e00656749055a2fec8ec30f6..21a0fc5ec00a6d4365fd8d6c97430d7b24124179 100755
Binary files a/indra/newview/skins/default/textures/down_arrow.png and b/indra/newview/skins/default/textures/down_arrow.png differ
diff --git a/indra/newview/skins/default/textures/icons/Edit_Wrench.png b/indra/newview/skins/default/textures/icons/Edit_Wrench.png
index edb40b9c96fa888fa4cadbbebc2556e8efac6fb4..42f846696965257df9061068bfa02ce8cb48c0ff 100755
Binary files a/indra/newview/skins/default/textures/icons/Edit_Wrench.png and b/indra/newview/skins/default/textures/icons/Edit_Wrench.png differ
diff --git a/indra/newview/skins/default/textures/icons/Generic_Group_Large.png b/indra/newview/skins/default/textures/icons/Generic_Group_Large.png
index 75833eccf3eb694728e4ca3b56b88025220235dd..46ee6dfe2c156e7afb0dd7675b40d624470da448 100755
Binary files a/indra/newview/skins/default/textures/icons/Generic_Group_Large.png and b/indra/newview/skins/default/textures/icons/Generic_Group_Large.png differ
diff --git a/indra/newview/skins/default/textures/icons/Generic_Person.png b/indra/newview/skins/default/textures/icons/Generic_Person.png
index 45b491ab5968c3eab8b194df4b61889b98bdf952..e1411354afd941891366301bb7b04e0fbbd45d26 100755
Binary files a/indra/newview/skins/default/textures/icons/Generic_Person.png and b/indra/newview/skins/default/textures/icons/Generic_Person.png differ
diff --git a/indra/newview/skins/default/textures/icons/Hierarchy_View_On.png b/indra/newview/skins/default/textures/icons/Hierarchy_View_On.png
index 296311e7979c7f38b20dd77f1f78288b6ae243fc..ae8c8b4c1ac10928cc0db90b113e3a284446e697 100755
Binary files a/indra/newview/skins/default/textures/icons/Hierarchy_View_On.png and b/indra/newview/skins/default/textures/icons/Hierarchy_View_On.png differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_Link.png b/indra/newview/skins/default/textures/icons/Inv_Link.png
index c1543dacb5d3a379da66dab11a073c5ccbd07e8d..26bf4086fbfd16e442f2038f82781fe5d3349f7f 100755
Binary files a/indra/newview/skins/default/textures/icons/Inv_Link.png and b/indra/newview/skins/default/textures/icons/Inv_Link.png differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_LostClosed.png b/indra/newview/skins/default/textures/icons/Inv_LostClosed.png
index a800217e0df8a77f66f3936589fe0bbf95046dd4..42b5c88fdd6a060f991f1fff60e81b145f85bdb5 100755
Binary files a/indra/newview/skins/default/textures/icons/Inv_LostClosed.png and b/indra/newview/skins/default/textures/icons/Inv_LostClosed.png differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_LostOpen.png b/indra/newview/skins/default/textures/icons/Inv_LostOpen.png
index 8c4a1a9ac02db6ae85761a0cb08acfd53e996881..a52168d6c7580975e1cfb0d272f8a5ee619388ed 100755
Binary files a/indra/newview/skins/default/textures/icons/Inv_LostOpen.png and b/indra/newview/skins/default/textures/icons/Inv_LostOpen.png differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_Mesh.png b/indra/newview/skins/default/textures/icons/Inv_Mesh.png
index f1f21f7941e59cbcf229ae0900424ad1b1a757df..77e52264c3df5999376bffe72629c87904c00662 100755
Binary files a/indra/newview/skins/default/textures/icons/Inv_Mesh.png and b/indra/newview/skins/default/textures/icons/Inv_Mesh.png differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_SysClosed.png b/indra/newview/skins/default/textures/icons/Inv_SysClosed.png
index dcf998449fef8d01bb4724de440770624602130d..57eafc4047374d342563d862aead2e987fc7fe09 100755
Binary files a/indra/newview/skins/default/textures/icons/Inv_SysClosed.png and b/indra/newview/skins/default/textures/icons/Inv_SysClosed.png differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_SysOpen.png b/indra/newview/skins/default/textures/icons/Inv_SysOpen.png
index 0efd403c954b2ca5dede5096e99742f84282205a..b080688e5545204f058550bc75082f1031752836 100755
Binary files a/indra/newview/skins/default/textures/icons/Inv_SysOpen.png and b/indra/newview/skins/default/textures/icons/Inv_SysOpen.png differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_TrashClosed.png b/indra/newview/skins/default/textures/icons/Inv_TrashClosed.png
index c5201e6f9a2c2421fedb5241696daaf9012a2e07..7a958c1ec000e090cd28ff79136117c80147dbfe 100755
Binary files a/indra/newview/skins/default/textures/icons/Inv_TrashClosed.png and b/indra/newview/skins/default/textures/icons/Inv_TrashClosed.png differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_TrashOpen.png b/indra/newview/skins/default/textures/icons/Inv_TrashOpen.png
index 4a886a3f37ea0e17a1f82938f7a4559a7475c15e..11e6bf33bcd020310f6ef61df92d4e74cb65c4f8 100755
Binary files a/indra/newview/skins/default/textures/icons/Inv_TrashOpen.png and b/indra/newview/skins/default/textures/icons/Inv_TrashOpen.png differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png
index e0b18b2451ed930f309c1f14019e2b8d70a09291..af65873cb65b1d281f25a012f1060bba1c9bbad3 100755
Binary files a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png and b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png
index 101aaa42b1edfcb79bbc766e7db3b22696d0c218..6ceb9d3d8fe9084333445f1c9cc83604a11c32bb 100755
Binary files a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png and b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png
index c27f18e3c745b985d3024548b5c7073b9fca28bb..7084e2f591e9d69f97da19a5782e1fd8d61e2b70 100755
Binary files a/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png and b/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Dark.png
index 956e02b14dd546a696e3257621176ca8b32e5be5..60d056b573ecc5c780233109baab61338ee66a63 100755
Binary files a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Dark.png and b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Dark.png differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Light.png b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Light.png
index 434caeda8b629bb840ebb0758a482ba8dcbb196b..d004b0f750edeee111e9a6434d18300be05a4362 100755
Binary files a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Light.png and b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Light.png differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Dark.png
index 064687ed0f650d44a4e06df5400cd5e51f77f501..eed28765f79ac24b5538b2abacb1eef6b0ed85ad 100755
Binary files a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Dark.png and b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Dark.png differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Light.png b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Light.png
index 5465650d0c0a48e122cb2eca63ff1b47e1bad75e..e35de3c2faa47677dbf3226e4532644cd7ad5318 100755
Binary files a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Light.png and b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Light.png differ
diff --git a/indra/newview/skins/default/textures/icons/Person_Check.png b/indra/newview/skins/default/textures/icons/Person_Check.png
index f8638540d4eb8ecf17d3f19c3c943db35924b50e..d40eafe793f4156c4416669cee9aebf781b36149 100755
Binary files a/indra/newview/skins/default/textures/icons/Person_Check.png and b/indra/newview/skins/default/textures/icons/Person_Check.png differ
diff --git a/indra/newview/skins/default/textures/icons/Person_Star.png b/indra/newview/skins/default/textures/icons/Person_Star.png
index ad10580ac45e7b6f4a9b92841feb21956b28a0e8..e02935672fdc69f9378ec8e7d31e07bd4032f14c 100755
Binary files a/indra/newview/skins/default/textures/icons/Person_Star.png and b/indra/newview/skins/default/textures/icons/Person_Star.png differ
diff --git a/indra/newview/skins/default/textures/icons/SL_Logo.png b/indra/newview/skins/default/textures/icons/SL_Logo.png
index 8342d7cfee55aeb3558946099eff623cb577d48d..5e376c72f976253c8d54c0186667552d45bea937 100755
Binary files a/indra/newview/skins/default/textures/icons/SL_Logo.png and b/indra/newview/skins/default/textures/icons/SL_Logo.png differ
diff --git a/indra/newview/skins/default/textures/icons/Shop.png b/indra/newview/skins/default/textures/icons/Shop.png
index 81c13eeabd3af1c751e4b80ad7c626bf91ed1c2c..8977c49195aa2e3d260bfd8e5de09b47123de088 100755
Binary files a/indra/newview/skins/default/textures/icons/Shop.png and b/indra/newview/skins/default/textures/icons/Shop.png differ
diff --git a/indra/newview/skins/default/textures/icons/Web_Profile_Off.png b/indra/newview/skins/default/textures/icons/Web_Profile_Off.png
index f5fb774a6faac1d6f675fc2f566b2709c7b7d8ef..5716dd6d22edcb352bed0436798900138d15ee07 100755
Binary files a/indra/newview/skins/default/textures/icons/Web_Profile_Off.png and b/indra/newview/skins/default/textures/icons/Web_Profile_Off.png differ
diff --git a/indra/newview/skins/default/textures/icons/back_arrow_off.png b/indra/newview/skins/default/textures/icons/back_arrow_off.png
index 422f67cf8391ea69ce15d2fcc51e873c138d428e..e7cea49d731408682cbf8b3a35b120401139e9bd 100755
Binary files a/indra/newview/skins/default/textures/icons/back_arrow_off.png and b/indra/newview/skins/default/textures/icons/back_arrow_off.png differ
diff --git a/indra/newview/skins/default/textures/icons/back_arrow_over.png b/indra/newview/skins/default/textures/icons/back_arrow_over.png
index b4cc170f37984455e4b7001fa535d26a4c5c8fcf..4e5a93a25fad3ba0f098574f2eb47a1a1aaa1c94 100755
Binary files a/indra/newview/skins/default/textures/icons/back_arrow_over.png and b/indra/newview/skins/default/textures/icons/back_arrow_over.png differ
diff --git a/indra/newview/skins/default/textures/icons/back_arrow_press.png b/indra/newview/skins/default/textures/icons/back_arrow_press.png
index a9e2f326a7335161131b099e075b1e5fe42ca8fc..289b8c20e645a8743fbbf65de11687c15999ed7c 100755
Binary files a/indra/newview/skins/default/textures/icons/back_arrow_press.png and b/indra/newview/skins/default/textures/icons/back_arrow_press.png differ
diff --git a/indra/newview/skins/default/textures/icons/check_mark.png b/indra/newview/skins/default/textures/icons/check_mark.png
index 2c05297f4f5a15954b5b3fb81742814576bdd662..4d927cb29e75645f6eec5199802835e2b4205757 100755
Binary files a/indra/newview/skins/default/textures/icons/check_mark.png and b/indra/newview/skins/default/textures/icons/check_mark.png differ
diff --git a/indra/newview/skins/default/textures/icons/pop_up_caution.png b/indra/newview/skins/default/textures/icons/pop_up_caution.png
index 78b681cb3365a4e25faaafe8c0e9ab6d2aa17802..8364bcc3285fd7a92da57886dd322bf05490038a 100755
Binary files a/indra/newview/skins/default/textures/icons/pop_up_caution.png and b/indra/newview/skins/default/textures/icons/pop_up_caution.png differ
diff --git a/indra/newview/skins/default/textures/menu_separator.png b/indra/newview/skins/default/textures/menu_separator.png
index 89dcdcdff5f3169619732dca5ca11fa0268c3504..7bb27c499d7a1050e8efbb6171a2496ec027e41f 100755
Binary files a/indra/newview/skins/default/textures/menu_separator.png and b/indra/newview/skins/default/textures/menu_separator.png differ
diff --git a/indra/newview/skins/default/textures/model_wizard/progress_bar_bg.png b/indra/newview/skins/default/textures/model_wizard/progress_bar_bg.png
index d0b213cdc5abfed5d9708437c8a32293cac9d66a..7c6920205f5d1a1790e2274d301050c097e6109b 100755
Binary files a/indra/newview/skins/default/textures/model_wizard/progress_bar_bg.png and b/indra/newview/skins/default/textures/model_wizard/progress_bar_bg.png differ
diff --git a/indra/newview/skins/default/textures/model_wizard/progress_light.png b/indra/newview/skins/default/textures/model_wizard/progress_light.png
index 019344f812fb6cce7f20bb565c0a008abf6963c8..c8ab151c44d4cb07703b20faf2160b149d06f171 100755
Binary files a/indra/newview/skins/default/textures/model_wizard/progress_light.png and b/indra/newview/skins/default/textures/model_wizard/progress_light.png differ
diff --git a/indra/newview/skins/default/textures/navbar/Search.png b/indra/newview/skins/default/textures/navbar/Search.png
index 0d0e330bc7c8baf01fe6444fd5dfda7b9b73b6c3..4c29e57f7bac290303fbb2138310930ae1b87f30 100755
Binary files a/indra/newview/skins/default/textures/navbar/Search.png and b/indra/newview/skins/default/textures/navbar/Search.png differ
diff --git a/indra/newview/skins/default/textures/navbar/separator.png b/indra/newview/skins/default/textures/navbar/separator.png
index b93e5791a7eab8ba17fae0cd8991daf7d38ef992..c1d74e5a64434c954bc7d71229cc9fe4a9d99aa2 100755
Binary files a/indra/newview/skins/default/textures/navbar/separator.png and b/indra/newview/skins/default/textures/navbar/separator.png differ
diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Foreground.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Foreground.png
index 50c01062a5d21b5f62426370d0f3582a66ab5597..4e59042e334993856313f91bc52baaf9201c4b7d 100755
Binary files a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Foreground.png and b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Foreground.png differ
diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Press.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Press.png
index bf2065cd3712ede099d7b3f7f2a4ddd5ea9960a8..be7b298bb875f518835cdb0307f6acbb79408652 100755
Binary files a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Press.png and b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Press.png differ
diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Foreground.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Foreground.png
index 8b48258142c86e9a56b9632b7a5f44e71798b153..1e234ff09b84f4aabd1ca30d759d7fdd2add0897 100755
Binary files a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Foreground.png and b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Foreground.png differ
diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Press.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Press.png
index 09efe779fe166093083edbbc94d416d6d1c80536..48c78b453d9cc408acc64e6785586119d4e8bfbb 100755
Binary files a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Press.png and b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Press.png differ
diff --git a/indra/newview/skins/default/textures/toolbar_icons/facebook.png b/indra/newview/skins/default/textures/toolbar_icons/facebook.png
index b960b834dcaa4b3dcbf8538b2b070c1430e088ae..ae524b643ff1ad8e7fce0dc8c3bc0e38d4590f88 100644
Binary files a/indra/newview/skins/default/textures/toolbar_icons/facebook.png and b/indra/newview/skins/default/textures/toolbar_icons/facebook.png differ
diff --git a/indra/newview/skins/default/textures/toolbar_icons/mini_cart.png b/indra/newview/skins/default/textures/toolbar_icons/mini_cart.png
index 9fcf46794d1374c08e3b0407515867289a6c3f90..9eeb1d4e09b54b39b373ecb8dc115a047c11d6db 100755
Binary files a/indra/newview/skins/default/textures/toolbar_icons/mini_cart.png and b/indra/newview/skins/default/textures/toolbar_icons/mini_cart.png differ
diff --git a/indra/newview/skins/default/textures/up_arrow.png b/indra/newview/skins/default/textures/up_arrow.png
index fe68ad49dca3248c10391e5cbad8512aa52c2722..76f839510ea9169f7afe2f5ca1e71bccf9e6b130 100755
Binary files a/indra/newview/skins/default/textures/up_arrow.png and b/indra/newview/skins/default/textures/up_arrow.png differ
diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Down.png b/indra/newview/skins/default/textures/widgets/Arrow_Down.png
index e10f6472eb05cc1723b3c4bf8483a082c99bb674..cb4eea953c9c6c0516782d14aea6d9f9dcddacac 100755
Binary files a/indra/newview/skins/default/textures/widgets/Arrow_Down.png and b/indra/newview/skins/default/textures/widgets/Arrow_Down.png differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Disabled.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Disabled.png
index c7c0eaa96bf5f78bbc26e6a913ec6395c55690c6..3897e16801668949df1f7333a91dc168eedc3d33 100755
Binary files a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Disabled.png and b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Disabled.png differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Off.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Off.png
index 4a73c254fc7dc9aca149802b2058e4c6c43dcf5f..95a4a36c9da9380e08788ca73c941ff90073d03b 100755
Binary files a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Off.png and b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Off.png differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Over.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Over.png
index 6fb5c432dec5872117c04cb971968d711309f539..20d1ebf53d41409202afbc23a67a94de8fc1724a 100755
Binary files a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Over.png and b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Over.png differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Press.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Press.png
index fa18517933e9e2800c20f556ab859809f4f7e9c3..63f4b503e22c8f5fc1e508772f58ee6bd051dc2b 100755
Binary files a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Press.png and b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Press.png differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Disabled.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Disabled.png
index bed1a701bdedc5f5b65d47e6ee3e1a5c53b8e0d5..d570f77f6d0d67e7a8f8f4bfbf7eeff806e2887e 100755
Binary files a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Disabled.png and b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Disabled.png differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Off.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Off.png
index 57ce9af574f33fda31bdd84a324e3639e90f0705..28a002b118750b07af188113ab55f634aebada19 100755
Binary files a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Off.png and b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Off.png differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Over.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Over.png
index 2c43022f0eaff2d391084842041520e9080727e4..a195e80b0e2b954f8adc58c298525d88682f28b2 100755
Binary files a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Over.png and b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Over.png differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Press.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Press.png
index 6b8c1baca4c904bb017ce460ee8af6b66c7b99f5..9863ee32cbbeff7e5f57fa186011f47f0a6ce6be 100755
Binary files a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Press.png and b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Press.png differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Disabled.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Disabled.png
index 51505e80c5b40444914494c19118573143456c50..2ffbc4a16f5cf76a53a90135ba31f00ff8ab4e85 100755
Binary files a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Disabled.png and b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Disabled.png differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Off.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Off.png
index 9f93efbd93b0d09b98097e62d7f8c92eac2f61af..ce47da169b74cd47ab8eb79aa11ea5ca7f897a11 100755
Binary files a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Off.png and b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Off.png differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Over.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Over.png
index 3a4ec1a315f7d2457fa20fa5cece730738634ced..22251509839b561fa3d546f20fb8025063aa332f 100755
Binary files a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Over.png and b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Over.png differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Press.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Press.png
index 1f1b4c2ed53268811c3865b56db21c6f8dd9e60f..2d541d0f70c975cfdcd79cf687a3be9bc05b0cac 100755
Binary files a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Press.png and b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Press.png differ
diff --git a/indra/newview/skins/default/textures/widgets/Tooltip.png b/indra/newview/skins/default/textures/widgets/Tooltip.png
index f989ac9083283cfeab4fdcfc93ebf9175152cf7b..3c4d6a965d7905e1c17c1f5309bfe311d14aae3c 100755
Binary files a/indra/newview/skins/default/textures/widgets/Tooltip.png and b/indra/newview/skins/default/textures/widgets/Tooltip.png differ
diff --git a/indra/newview/skins/default/textures/windows/Icon_Close_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Close_Foreground.png
index 2292b79eda6a0d3f428a24fc36f468bab7a02277..3534b716fdc95a57086b73c1c5115d86f68ea777 100755
Binary files a/indra/newview/skins/default/textures/windows/Icon_Close_Foreground.png and b/indra/newview/skins/default/textures/windows/Icon_Close_Foreground.png differ
diff --git a/indra/newview/skins/default/textures/windows/Icon_Help_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Help_Foreground.png
index 1a514742d3bf0de014ed58a3e691ebfc2e9659a1..177c0675bb4e72c7f515024893da7f97e4e81ea7 100755
Binary files a/indra/newview/skins/default/textures/windows/Icon_Help_Foreground.png and b/indra/newview/skins/default/textures/windows/Icon_Help_Foreground.png differ
diff --git a/indra/newview/skins/default/textures/windows/Icon_Help_Press.png b/indra/newview/skins/default/textures/windows/Icon_Help_Press.png
index 7478644b6a87bdd90bb58b395aeaafa74b329233..aa21a1c78986db0ac8a84737c17bdfd494efdb3b 100755
Binary files a/indra/newview/skins/default/textures/windows/Icon_Help_Press.png and b/indra/newview/skins/default/textures/windows/Icon_Help_Press.png differ
diff --git a/indra/newview/skins/default/textures/windows/Icon_Minimize_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Minimize_Foreground.png
index 9f72a5422b3b7bf25c1fd1fc118fc717a6a4425f..a98a3a98c2e79d528eb2f7b5f34a483fdb13b29d 100755
Binary files a/indra/newview/skins/default/textures/windows/Icon_Minimize_Foreground.png and b/indra/newview/skins/default/textures/windows/Icon_Minimize_Foreground.png differ
diff --git a/indra/newview/skins/default/textures/windows/Icon_Minimize_Press.png b/indra/newview/skins/default/textures/windows/Icon_Minimize_Press.png
index 07db8be1b08e34fb5c41145edaf7edde6103a00a..5df0e7691c2f12b2d7d0ac6c3f28e83348e9f332 100755
Binary files a/indra/newview/skins/default/textures/windows/Icon_Minimize_Press.png and b/indra/newview/skins/default/textures/windows/Icon_Minimize_Press.png differ
diff --git a/indra/newview/skins/default/textures/windows/Icon_Restore_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Restore_Foreground.png
index 1e753aaf1dd032b6d93001bbee2cf2f7b1977512..b4d4ef01fce5c62f235b9e63331cd09a0febe09d 100755
Binary files a/indra/newview/skins/default/textures/windows/Icon_Restore_Foreground.png and b/indra/newview/skins/default/textures/windows/Icon_Restore_Foreground.png differ
diff --git a/indra/newview/skins/default/textures/windows/Icon_Restore_Press.png b/indra/newview/skins/default/textures/windows/Icon_Restore_Press.png
index be66b0523075b124a524502d0f051395515e802b..0d0238dc32cfaa69b02be397cc6b8af5568e9998 100755
Binary files a/indra/newview/skins/default/textures/windows/Icon_Restore_Press.png and b/indra/newview/skins/default/textures/windows/Icon_Restore_Press.png differ
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_down.png b/indra/newview/skins/default/textures/windows/hint_arrow_down.png
index ddadef0978227caddb51147cef2acd510856179b..0cb5a819ec3af392dc2156c66cd5e5141cceab8d 100755
Binary files a/indra/newview/skins/default/textures/windows/hint_arrow_down.png and b/indra/newview/skins/default/textures/windows/hint_arrow_down.png differ
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_left.png b/indra/newview/skins/default/textures/windows/hint_arrow_left.png
index 2794b967e826769f649d20683dccbf5f60eca1a1..45204d913242fac66496503a1253071e4ad46a66 100755
Binary files a/indra/newview/skins/default/textures/windows/hint_arrow_left.png and b/indra/newview/skins/default/textures/windows/hint_arrow_left.png differ
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png b/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png
index 0dfc99898d41ef4a26360ec4361c9abd8a53dcf6..3e3ae9f42d6eda027b9a7171274ab9ec68f49e6a 100755
Binary files a/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png and b/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png differ
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_right.png b/indra/newview/skins/default/textures/windows/hint_arrow_right.png
index 7ac57f805b70d95cdfcc536deeb8067a5ef67bea..3fe7a773c39ba5148162070b8231736039400253 100755
Binary files a/indra/newview/skins/default/textures/windows/hint_arrow_right.png and b/indra/newview/skins/default/textures/windows/hint_arrow_right.png differ
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_up.png b/indra/newview/skins/default/textures/windows/hint_arrow_up.png
index bb3e1c07fa73a141bd215d071be1eb300b912fb9..44f003dc63538979dfba4abcb16f972ad827d805 100755
Binary files a/indra/newview/skins/default/textures/windows/hint_arrow_up.png and b/indra/newview/skins/default/textures/windows/hint_arrow_up.png differ
diff --git a/indra/newview/skins/default/textures/windows/hint_background.png b/indra/newview/skins/default/textures/windows/hint_background.png
index cfac5deacbab19226e9578c41da9a4dc6ceedaf2..e25f354347aa96921caafe9c28a72ac50dcddf79 100755
Binary files a/indra/newview/skins/default/textures/windows/hint_background.png and b/indra/newview/skins/default/textures/windows/hint_background.png differ
diff --git a/indra/newview/skins/default/textures/windows/yellow_gradient.png b/indra/newview/skins/default/textures/windows/yellow_gradient.png
index 5fd847aaeff58a6e5d7a5b3d11908bb169554d60..5bd21b42975d2eb64d9d264e60f76c931b4b99c0 100755
Binary files a/indra/newview/skins/default/textures/windows/yellow_gradient.png and b/indra/newview/skins/default/textures/windows/yellow_gradient.png differ
diff --git a/indra/newview/skins/default/textures/world/CameraDragDot.png b/indra/newview/skins/default/textures/world/CameraDragDot.png
index 57698e19560dc119f045667b0ae3d49e611d3b36..2ccf098e0ff73e8f00dbb43188fd070f909515d0 100755
Binary files a/indra/newview/skins/default/textures/world/CameraDragDot.png and b/indra/newview/skins/default/textures/world/CameraDragDot.png differ
diff --git a/indra/newview/skins/default/textures/world/NoEntryLines.png b/indra/newview/skins/default/textures/world/NoEntryLines.png
index 18e270bde57f42e54d6aacf047d1b09a0a17bfdd..d7496b8bd000ba4e0d655460daf2c3b9f9fc31e6 100755
Binary files a/indra/newview/skins/default/textures/world/NoEntryLines.png and b/indra/newview/skins/default/textures/world/NoEntryLines.png differ
diff --git a/indra/newview/skins/default/xui/de/floater_snapshot.xml b/indra/newview/skins/default/xui/de/floater_snapshot.xml
index 798461c00754925ab017ffd21d2734100e7124a5..b98ee7868510521a9f4c9ad039289ed6018d93af 100755
--- a/indra/newview/skins/default/xui/de/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/de/floater_snapshot.xml
@@ -41,23 +41,24 @@
 	</string>
 	<button name="advanced_options_btn" tool_tip="Erweiterte Optionen"/>
 	<text name="image_res_text">
-		[WIDTH] x [HEIGHT] px
+		[WIDTH]px (Breite) x [HEIGHT]px (Höhe)
 	</text>
 	<text name="file_size_label">
 		[SIZE] KB
 	</text>
+	<button name="advanced_options" label="AUFNAHME OPTIONEN"/>
 	<panel name="advanced_options_panel">
-		<text name="advanced_options_label">
-			ERWEITERTE OPTIONEN
-		</text>
 		<text name="layer_type_label">
-			Aufnahme:
+			Aufnehmen:
 		</text>
 		<combo_box label="Bildebenen" name="layer_types">
 			<combo_box.item label="Farben" name="Colors"/>
 			<combo_box.item label="Tiefe" name="Depth"/>
 		</combo_box>
-		<check_box label="Schnittstelle" name="ui_check"/>
+		<combo_box label="Filter" name="filters_combobox">
+			<combo_box.item label="Kein Filter" name="NoFilter"/>
+		</combo_box>
+		<check_box label="Benutzeroberfläche" name="ui_check"/>
 		<check_box label="HUDs" name="hud_check"/>
 		<check_box label="Standbild (Vollbild)" name="freeze_frame_check"/>
 		<check_box label="Automatisch aktualisieren" name="auto_snapshot_check"/>
diff --git a/indra/newview/skins/default/xui/de/panel_postcard_message.xml b/indra/newview/skins/default/xui/de/panel_postcard_message.xml
index 6eeef8af712c00ae806419edea09887fa94d7f6d..b34dc776de504c4d285bbeaab18f7a02b3579dec 100755
--- a/indra/newview/skins/default/xui/de/panel_postcard_message.xml
+++ b/indra/newview/skins/default/xui/de/panel_postcard_message.xml
@@ -9,13 +9,11 @@
 	<text name="subject_label">
 		Betreff:
 	</text>
-	<line_editor label="Betreff hier eingeben." name="subject_form"/>
+	<line_editor label="Betreff hier rein." name="subject_form"/>
 	<text name="msg_label">
 		Nachricht:
 	</text>
 	<text_editor name="msg_form">
 		Nachricht hier eingeben.
 	</text_editor>
-	<button label="Abbrechen" name="cancel_btn"/>
-	<button label="Senden" name="send_btn"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_postcard_settings.xml b/indra/newview/skins/default/xui/de/panel_postcard_settings.xml
index c1a1c0cc463792231ce34709e766608af2e5c88e..e6d3b7de66222f86bcb200fea20e2677fedaab77 100755
--- a/indra/newview/skins/default/xui/de/panel_postcard_settings.xml
+++ b/indra/newview/skins/default/xui/de/panel_postcard_settings.xml
@@ -7,17 +7,10 @@
 		<combo_box.item label="1024x768" name="1024x768"/>
 		<combo_box.item label="Benutzerdefiniert" name="Custom"/>
 	</combo_box>
-	<layout_stack name="postcard_image_params_ls">
-		<layout_panel name="postcard_image_size_lp">
-			<spinner label="Breite" name="postcard_snapshot_width"/>
-			<spinner label="Höhe" name="postcard_snapshot_height"/>
-			<check_box label="Seitenverhältnis beibehalten" name="postcard_keep_aspect_check"/>
-		</layout_panel>
-		<layout_panel name="postcard_image_format_quality_lp">
-			<slider label="Bildqualität" name="image_quality_slider"/>
-			<text name="image_quality_level">
-				([QLVL])
-			</text>
-		</layout_panel>
-	</layout_stack>
+	<spinner label="Breite x Höhe" name="postcard_snapshot_width"/>
+	<check_box label="Seitenverhältnis beibehalten" name="postcard_keep_aspect_check"/>
+	<slider label="Qualität" name="image_quality_slider"/>
+	<text name="image_quality_level">
+		([QLVL])
+	</text>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml
index 10827ce6f201baf60f65b55bb501295b9890bef4..d13f56ed3d5386aeb8a9e3762e8896e39beef717 100755
--- a/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml
+++ b/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="panel_snapshot_inventory">
 	<text name="title">
-		In meinem Inventar speichern
+		Inventar
 	</text>
 	<text name="hint_lbl">
 		Das Speichern eines Bilds in Ihrem Inventar kostet [UPLOAD_COST] L$. Um das Bild als Textur zu speichern, wählen Sie eines der quadratischen Formate aus.
@@ -13,8 +13,7 @@
 		<combo_box.item label="Groß (512x512)" name="Large(512x512)"/>
 		<combo_box.item label="Benutzerdefiniert" name="Custom"/>
 	</combo_box>
-	<spinner label="Breite" name="inventory_snapshot_width"/>
-	<spinner label="Höhe" name="inventory_snapshot_height"/>
+	<spinner label="Breite x Höhe" name="inventory_snapshot_width"/>
 	<check_box label="Seitenverhältnis beibehalten" name="inventory_keep_aspect_check"/>
 	<button label="Abbrechen" name="cancel_btn"/>
 	<button label="Speichern" name="save_btn"/>
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_local.xml b/indra/newview/skins/default/xui/de/panel_snapshot_local.xml
index 3aeae8038824a7ce76049931c7fbfe100e996a6b..53e78ba2900f8c98fcf468e466116a53e81c1192 100755
--- a/indra/newview/skins/default/xui/de/panel_snapshot_local.xml
+++ b/indra/newview/skins/default/xui/de/panel_snapshot_local.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="panel_snapshot_local">
 	<text name="title">
-		Auf meinem Computer speichern
+		Festplatte
 	</text>
 	<combo_box label="Auflösung" name="local_size_combo">
 		<combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/>
@@ -13,24 +13,17 @@
 		<combo_box.item label="1600x1200" name="1600x1200"/>
 		<combo_box.item label="Benutzerdefiniert" name="Custom"/>
 	</combo_box>
-	<layout_stack name="local_image_params_ls">
-		<layout_panel name="local_image_size_lp">
-			<spinner label="Breite" name="local_snapshot_width"/>
-			<spinner label="Höhe" name="local_snapshot_height"/>
-			<check_box label="Seitenverhältnis beibehalten" name="local_keep_aspect_check"/>
-		</layout_panel>
-		<layout_panel name="local_image_format_quality_lp">
-			<combo_box label="Format" name="local_format_combo">
-				<combo_box.item label="PNG (verlustfrei)" name="PNG"/>
-				<combo_box.item label="JPEG" name="JPEG"/>
-				<combo_box.item label="BMP (verlustfrei)" name="BMP"/>
-			</combo_box>
-			<slider label="Bildqualität" name="image_quality_slider"/>
-			<text name="image_quality_level">
-				([QLVL])
-			</text>
-		</layout_panel>
-	</layout_stack>
+	<spinner label="Breite x Höhe" name="local_snapshot_width"/>
+	<check_box label="Seitenverhältnis beibehalten" name="local_keep_aspect_check"/>
+	<combo_box label="Format" name="local_format_combo">
+		<combo_box.item label="PNG (verlustfrei)" name="PNG"/>
+		<combo_box.item label="JPEG" name="JPEG"/>
+		<combo_box.item label="BMP (verlustfrei)" name="BMP"/>
+	</combo_box>
+	<slider label="Qualität" name="image_quality_slider"/>
+	<text name="image_quality_level">
+		([QLVL])
+	</text>
 	<button label="Abbrechen" name="cancel_btn"/>
 	<flyout_button label="Speichern" name="save_btn" tool_tip="Bild als Datei speichern">
 		<flyout_button.item label="Speichern" name="save_item"/>
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_options.xml b/indra/newview/skins/default/xui/de/panel_snapshot_options.xml
index e1d8a5dc6d48fb3a4f6fc54d9df1be4e5965524f..e2ba5bd4db99d497e4163e790f8b3420eabd7be7 100755
--- a/indra/newview/skins/default/xui/de/panel_snapshot_options.xml
+++ b/indra/newview/skins/default/xui/de/panel_snapshot_options.xml
@@ -1,7 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="panel_snapshot_options">
-	<button label="In meinem Profil posten" name="save_to_profile_btn"/>
-	<button label="E-Mail" name="save_to_email_btn"/>
-	<button label="In meinem Inventar speichern ([AMOUNT] L$)" name="save_to_inventory_btn"/>
-	<button label="Auf meinem Computer speichern" name="save_to_computer_btn"/>
+	<button label="Ins Profil hochladen" name="save_to_profile_btn"/>
+	<button label="Per E-Mail senden" name="save_to_email_btn"/>
+	<button label="Im Inventar speichern" name="save_to_inventory_btn"/>
+	<button label="Auf Festplatte speichern" name="save_to_computer_btn"/>
+	<button label="Zu Facebook hochladen" name="send_to_facebook_btn"/>
+	<button label="Zu Twitter hochladen" name="send_to_twitter_btn"/>
+	<button label="Zu Flickr hochladen" name="send_to_flickr_btn"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml
index c9afe86d7fe6f8ef6bb2da067fb360a99c9e229a..ead56f2885264221f3982659136e95402c787569 100755
--- a/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml
+++ b/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml
@@ -12,6 +12,10 @@
 	<text name="title">
 		E-Mail
 	</text>
-	<button label="Nachricht" name="message_btn"/>
-	<button label="Einstellungen" name="settings_btn"/>
+	<tab_container name="postcard_tabs">
+		<panel name="panel_postcard_message" label="Nachricht"/>
+		<panel name="panel_postcard_settings" label="Einstellungen"/>
+	</tab_container>
+	<button name="cancel_btn" label="Abbrechen"/>
+	<button name="send_btn" label="Absenden"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml
index 8d1c52dea820e5b8283c93c4472a60b08dbf1ab4..0f21edd1b69b7e7a8cbd25566e0d3537c93bc279 100755
--- a/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml
+++ b/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml
@@ -1,28 +1,21 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="panel_snapshot_profile">
 	<text name="title">
-		In meinem Profil posten
+		Profil
 	</text>
 	<combo_box label="Auflösung" name="profile_size_combo">
-		<combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/>
-		<combo_box.item label="640x480" name="640x480"/>
-		<combo_box.item label="800x600" name="800x600"/>
-		<combo_box.item label="1024x768" name="1024x768"/>
-		<combo_box.item label="Benutzerdefiniert" name="Custom"/>
+	<combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/>
+	<combo_box.item label="640x480" name="640x480"/>
+	<combo_box.item label="800x600" name="800x600"/>
+	<combo_box.item label="1024x768" name="1024x768"/>
+	<combo_box.item label="Benutzerdefiniert" name="Custom"/>
 	</combo_box>
-	<layout_stack name="profile_image_params_ls">
-		<layout_panel name="profile_image_size_lp">
-			<spinner label="Breite" name="profile_snapshot_width"/>
-			<spinner label="Höhe" name="profile_snapshot_height"/>
-			<check_box label="Seitenverhältnis beibehalten" name="profile_keep_aspect_check"/>
-		</layout_panel>
-		<layout_panel name="profile_image_metadata_lp">
-			<text name="caption_label">
-				Bildunterschrift:
-			</text>
-			<check_box initial_value="true" label="Ort einschließen" name="add_location_cb"/>
-		</layout_panel>
-	</layout_stack>
+	<spinner label="Breite x Höhe" name="profile_snapshot_width"/>
+	<check_box label="Seitenverhältnis beibehalten" name="profile_keep_aspect_check"/>
+	<text name="caption_label">
+		Bildunterschrift:
+	</text>
+	<check_box initial_value="true" label="Ort einschließen" name="add_location_cb"/>
 	<button label="Abbrechen" name="cancel_btn"/>
 	<button label="Posten" name="post_btn"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/floater_facebook.xml b/indra/newview/skins/default/xui/en/floater_facebook.xml
index 4535b9084e6f9aea909450c73c5eb483eed2b868..2ea34fb751e8d914d79ec2e154b37639294bc2e8 100644
--- a/indra/newview/skins/default/xui/en/floater_facebook.xml
+++ b/indra/newview/skins/default/xui/en/floater_facebook.xml
@@ -2,7 +2,6 @@
 <floater
   positioning="cascading"
   can_close="true"
-  can_resize="true"
   help_topic="floater_facebook"
   layout="topleft"
   name="floater_facebook"
@@ -10,23 +9,15 @@
   single_instance="true"
   reuse_instance="true"
   title="POST TO FACEBOOK"
-  min_height="501"
+  min_height="462"
   min_width="304"
-  height="482"
-  width="304">
-  <panel
-   height="482"
-   width="304"
-   visible="true"
-   name="background"
-   follows="all"
-   top="0"
-   left="0">
+  height="462"
+  width="272">
    <tab_container
      name="tabs"
      tab_group="1"
-     tab_min_width="70"
-     tab_height="30"
+     tab_min_width="64"
+     tab_height="21"
      tab_position="top"
      top="7"
      height="437"
@@ -57,23 +48,19 @@
        follows="all"
        label="FRIENDS"
        name="panel_facebook_friends"/>
-     <panel
+     <!--<panel
        filename="panel_facebook_account.xml"
        class="llfacebookaccountpanel"
        follows="all"
        label="ACCOUNT"
-       name="panel_facebook_account"/>
+       name="panel_facebook_account"/>-->
    </tab_container>
-    <panel
-     name="connection_status_panel"
-     follows="left|bottom|right"
-     height="24">
      <text
       name="connection_error_text"
       type="string"
       follows="left|bottom|right"
-      top="5"
-      left="9"
+      bottom="-5"
+      left="10"
       width="250"
       height="20"
       wrap="true"
@@ -88,14 +75,14 @@
       height="24"
       width="24"
       name="connection_loading_indicator"
-      top="2"
-      left="9"
+      top_delta="-2"
+      left="10"
       visible="true"/>
      <text
       name="connection_loading_text"
       type="string"
       follows="left|bottom|right"
-      top="5"
+      top_delta="2"
       left_pad="5"
       width="250"
       height="20"
@@ -106,6 +93,4 @@
       font="SansSerif">
       Loading...
     </text>
-  </panel>
- </panel>
 </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_flickr.xml b/indra/newview/skins/default/xui/en/floater_flickr.xml
index 1a9ffd0489b161f13145edb394b4dd4fbd50164d..24de3ddd8d5a1db41621948aa6b964bb71be9d1f 100644
--- a/indra/newview/skins/default/xui/en/floater_flickr.xml
+++ b/indra/newview/skins/default/xui/en/floater_flickr.xml
@@ -10,11 +10,11 @@
   single_instance="true"
   reuse_instance="true"
   title="UPLOAD TO FLICKR"
-  height="622"
-  width="304">
+  height="590"
+  width="272">
   <panel
-   height="622"
-   width="304"
+   height="590"
+   width="272"
    visible="true"
    name="background"
    follows="all"
@@ -24,10 +24,11 @@
      name="tabs"
      tab_group="1"
      tab_min_width="70"
-     tab_height="30"
+     tab_height="21"
      tab_position="top"
      top="7"
-     height="577"
+     height="555"
+     follows="all"
      halign="center"
      use_highlighting_on_hover="true">
      <panel
@@ -51,8 +52,8 @@
       name="connection_error_text"
       type="string"
       follows="left|bottom|right"
-      top="5"
-      left="9"
+      bottom="-5"
+      left="10"
       width="250"
       height="20"
       wrap="true"
@@ -67,14 +68,14 @@
       height="24"
       width="24"
       name="connection_loading_indicator"
-      top="2"
-      left="9"
+      top_delta="-2"
+      left="10"
       visible="true"/>
      <text
       name="connection_loading_text"
       type="string"
       follows="left|bottom|right"
-      top="5"
+      top_delta="2"
       left_pad="5"
       width="250"
       height="20"
diff --git a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml
index c86ed595a7b5ea7ff01673b5ea8b2cf6c2c3e07f..17bc818cc1bc1f6ea17520be0a0734cc75030a9a 100755
--- a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml
@@ -2,7 +2,7 @@
 <floater
  legacy_header_height="18"
  can_minimize="false"
- height="408"
+ height="440"
  layout="topleft"
  name="Inventory Finder"
  help_topic="inventory_finder"
@@ -95,36 +95,36 @@
      width="126" />
     <icon
      height="16"
-     image_name="Inv_Mesh"
+     image_name="Inv_Notecard"
      layout="topleft"
      left="8"
      mouse_opaque="true"
-     name="icon_mesh"
-     top="142"
+     name="icon_notecard"
+     top="122"
      width="16" />
     <check_box
      height="16"
-     label="Meshes"
+     label="Notecards"
      layout="topleft"
      left_pad="2"
-     name="check_mesh"
+     name="check_notecard"
      top_delta="0"
      width="126" />
     <icon
      height="16"
-     image_name="Inv_Notecard"
+     image_name="Inv_Mesh"
      layout="topleft"
      left="8"
      mouse_opaque="true"
-     name="icon_notecard"
-     top="122"
+     name="icon_mesh"
+     top="142"
      width="16" />
     <check_box
      height="16"
-     label="Notecards"
+     label="Meshes"
      layout="topleft"
      left_pad="2"
-     name="check_notecard"
+     name="check_mesh"
      top_delta="0"
      width="126" />
     <icon
@@ -223,25 +223,33 @@
      top="262"
      width="100" />
     <button
-     follows="left|top"
      height="20"
      label="None"
      label_selected="None"
-     layout="topleft"
      left_delta="0"
      name="None"
-     top_pad="4"
+     left_pad="10"
      width="100" />
     <check_box
      height="16"
      label="Always show folders"
      layout="topleft"
-     left_delta="0"
+     left="8"
      name="check_show_empty"
-     top_pad="4"
+     top_pad="6"
      width="144" />
+    <view_border
+     bevel_style="none"
+     follows="top|left"
+     height="0"
+     layout="topleft"
+     left="10"
+     name="horiz_separator"
+     top_pad="8"
+     width="260"/>
     <check_box
      height="16"
+     top="324"
      label="Since Logoff"
      layout="topleft"
      left_delta="0"
@@ -257,36 +265,74 @@
      layout="topleft"
      left_delta="0"
      name="- OR -"
-     top_delta="16"
+     top="342"
      width="144">
         - OR -
     </text>
+    <radio_group
+     height="16"
+     layout="topleft"
+     name="date_search_direction"
+     top="360"
+     left="8"
+     width="270">
+     <radio_item
+      label="Newer than"
+      layout="topleft"
+      name="newer"
+      top_pad="6"
+      left="0" />
+     <radio_item
+      label="Older than"
+      layout="topleft"
+      name="older"
+      top_delta="0"
+      left="120" />
+    </radio_group>
     <spinner
      follows="left|top"
      height="16"
      increment="1"
      initial_value="0"
-     label="Hours Ago"
-     label_width="64"
      layout="topleft"
      left_delta="0"
      max_val="240000"
      name="spin_hours_ago"
      top_pad="4"
-     width="144" />
+     width="64" />
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="16"
+     layout="topleft"
+     left_pad="3"
+     top_delta="4"
+     width="80">
+        Hours
+    </text>
     <spinner
      follows="left|top"
      height="16"
      increment="1"
      initial_value="0"
-     label="Days Ago"
-     label_width="64"
      layout="topleft"
-     left_delta="0"
      max_val="10000"
      name="spin_days_ago"
      top_pad="4"
-     width="144" />
+     left="8"
+     width="64" />
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="16"
+     layout="topleft"
+     left_pad="3"
+     top_delta="4"
+     width="80">
+        Days
+    </text>
     <button
      follows="top|right"
      height="20"
@@ -295,6 +341,6 @@
      layout="topleft"
      name="Close"
      right="-6"
-     top="382"
+     top="406"
      width="76" />
 </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml
index 771035b40da33c7314dc8d54676c03a2499685f4..f0a175902ba97d6cb146b6a224303f904b6832fa 100755
--- a/indra/newview/skins/default/xui/en/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml
@@ -3,15 +3,17 @@
  positioning="cascading"
  legacy_header_height="18"
  can_minimize="true"
+ can_resize="false"
  can_close="true"
- height="500"
+ height="455"
  layout="topleft"
  name="Snapshot"
  help_topic="snapshot"
  save_rect="true"
  save_visibility="false"
  title="SNAPSHOT"
- width="470">
+ width="624"
+ min_height="455">
     <floater.string
      name="unknown">
         unknown
@@ -57,11 +59,11 @@
  	    Saved to Computer!
  	</string>
  	<string
-        name="facebook_failed_str">
+     name="facebook_failed_str">
  	    Failed to upload image to your Facebook timeline.
  	</string>
  	<string
-        name="profile_failed_str">
+     name="profile_failed_str">
  	    Failed to upload image to your Profile Feed.
  	</string>
  	<string
@@ -78,35 +80,231 @@
  	</string>
     <button
      follows="left|top"
-     height="23"
-     image_overlay="TabIcon_Close_Off"
+     height="25"
+     image_overlay="Refresh_Off"
+	 image_hover_unselected="Toolbar_Middle_Over"
+     image_selected="Toolbar_Middle_Selected"
+     image_unselected="Toolbar_Middle_Off"
+     image_overlay_alignment="left"
+     imgoverlay_label_space="5"
+	 pad_bottom="0"
+	 halign="left"
      layout="topleft"
-     left="236"
-     name="advanced_options_btn"
-     tool_tip="Advanced options"
-     top="25"
-     width="23" />
-  <ui_ctrl 
-    height="160"
-    width="250"
-    layout="topleft"
-    name="thumbnail_placeholder"
-    top="50"
-    follows="left|top"
-    left="10">
+     left="10"
+	 label="REFRESH"
+     name="new_snapshot_btn"
+     top_pad="26"
+     width="167" />
+	<button
+       follows="left|top"
+	   control_name="AdvanceSnapshot"
+	   invisibility_control="AdvanceSnapshot"
+       height="25"
+	   is_toggle="true"
+       layout="topleft"
+	   image_hover_unselected="Toolbar_Middle_Over"
+	   image_selected="Toolbar_Middle_Off"
+	   image_unselected="Toolbar_Middle_Off"
+	   image_overlay="Conv_toolbar_expand"
+       name="retract_btn"
+       left_pad="1"
+	   top_delta="0"
+       width="31" />
+   <button
+       follows="left|top"
+	   control_name="AdvanceSnapshot"
+	   visibility_control="AdvanceSnapshot"
+       height="25"
+	   is_toggle="true"
+       layout="topleft"
+	   image_overlay="Conv_toolbar_collapse"
+	   image_hover_unselected="Toolbar_Middle_Over"
+	   image_selected="Toolbar_Middle_Off"
+	   image_unselected="Toolbar_Middle_Off"
+       name="extend_btn"
+       left_delta="0"
+	   top_delta="0"
+       width="31" />
+	<panel
+     height="154"
+     layout="topleft"
+	 follows="top|left"
+     left="0"
+     name="advanced_options_panel"
+     top_pad="-6"
+     width="210">
+        <view_border 
+         bevel_style="in"
+         follows="left|top|right" 
+         height="1"
+         left="10"
+         layout="topleft"
+         name="advanced_options_hr"
+         right="-1"
+         top_pad="5"
+         />
+        <text
+         type="string"
+         length="1"
+         follows="left|top"
+         height="13"
+         layout="topleft"
+         left="10"
+         name="layer_type_label"
+         top_pad="10"
+         width="100">
+            Capture:
+        </text>
+        <combo_box
+         follows="left|top|right"
+         height="23"
+         label="Image Layers"
+         layout="topleft"
+         left="30"
+         name="layer_types"
+         right="-2">
+            <combo_box.item
+             label="Colors"
+             name="Colors"
+             value="colors" />
+            <combo_box.item
+             label="Depth"
+             name="Depth"
+             value="depth" />
+        </combo_box>
+        <check_box
+         label="Interface"
+         layout="topleft"
+         left="30"
+		 height="16"
+         top_pad="8"
+         width="180"
+         name="ui_check" />
+        <check_box
+         label="HUDs"
+         layout="topleft"
+		 height="16"
+         left="30"
+         top_pad="1"
+         width="180"
+         name="hud_check" />
+        <check_box
+         label="Freeze frame (fullscreen)"
+         layout="topleft"
+		 height="16"
+         left="10"
+         top_pad="1"
+         width="180"
+         name="freeze_frame_check" />
+        <check_box
+         label="Auto-refresh"
+         layout="topleft"
+		 height="16"
+         left="10"
+         top_pad="1"
+         width="180"
+         name="auto_snapshot_check" />
+        <text
+         type="string"
+         length="1"
+         follows="left|top"
+         height="13"
+         layout="topleft"
+         left="10"
+         name="filter_list_label"
+         top_pad="10"
+         width="50">
+            Filter:
+        </text>
+        <combo_box
+            control_name="PhotoFilters"
+            follows="left|right|top"
+            name="filters_combobox"
+            tool_tip="Image filters"
+            top_delta="-3"
+            left="50"
+			right="-1"
+            height="21"
+            width="135">
+            <combo_box.item
+            label="No Filter"
+            name="NoFilter"
+            value="NoFilter" />
+        </combo_box>
+		 <view_border 
+         bevel_style="in"
+         follows="left|top|right" 
+         height="1"
+         left="10"
+         layout="topleft"
+         name="advanced_options_hr"
+         right="-1"
+         top_pad="7"
+         />
+    </panel>
+	<panel_container
+     follows="left|top"
+     height="230"
+     layout="topleft"
+     left="0"
+     name="panel_container"
+     default_panel_name="panel_snapshot_options"
+     top_pad="10"
+     width="215">
+      <panel
+       class="llpanelsnapshotoptions"
+       filename="panel_snapshot_options.xml"
+       follows="all"
+       layout="topleft"
+       left="0"
+       name="panel_snapshot_options"
+       top="0" />
       <panel
-       background_visible="true"
-       bg_alpha_color="0.9 1 0.9 1"
+       class="llpanelsnapshotprofile"
+       follows="all"
+       layout="topleft"
+       name="panel_snapshot_profile"
+       filename="panel_snapshot_profile.xml" />
+      <panel
+       class="llpanelsnapshotpostcard"
+       follows="all"
+       layout="topleft"
+       name="panel_snapshot_postcard"
+       filename="panel_snapshot_postcard.xml" />
+      <panel
+       class="llpanelsnapshotinventory"
+       follows="all"
+       layout="topleft"
+       name="panel_snapshot_inventory"
+       filename="panel_snapshot_inventory.xml" />
+      <panel
+       class="llpanelsnapshotlocal"
+       follows="all"
+       layout="topleft"
+       name="panel_snapshot_local"
+       filename="panel_snapshot_local.xml" />
+    </panel_container>
+	<view_border 
+         bevel_style="in"
+         follows="left|top" 
+         height="1"
+         left="10"
+         layout="topleft"
+         name="status_hr"
+         width="199"
+         top_pad="-16"/>
+	<panel
+       background_visible="false"
        follows="left|top"
        font="SansSerifLarge"
        halign="center"
        height="20"
        layout="topleft"
-       left="0"
+       left="10"
        length="1"
        name="succeeded_panel"
-       right="-1"
-       top="0"
+	   width="198"
+       top_pad="1"
        type="string"
        visible="false">
           <text
@@ -119,7 +317,7 @@
            length="1"
            name="succeeded_lbl"
            right="-1"
-           text_color="0.2 0.5 0.2 1"
+           text_color="0.2 0.85 0.2 1"
            top="4"
            translate="false"
            type="string">
@@ -127,18 +325,17 @@
           </text>
       </panel>
       <panel
-       background_visible="true"
-       bg_alpha_color="1 0.9 0.9 1"
+       background_visible="false"
        follows="left|top"
        font="SansSerifLarge"
        halign="center"
        height="20"
        layout="topleft"
-       left_delta="0"
+       left="10"
        length="1"
        name="failed_panel"
-       right="-1"
-       top="0"
+	   width="198"
+       top_delta="0"
        type="string"
        visible="false">
           <text
@@ -151,7 +348,7 @@
            length="1"
            name="failed_lbl"
            right="-1"
-           text_color="0.5 0.2 0.2 1"
+           text_color="0.95 0.4 0.4 1"
            top="4"
            translate="false"
            type="string">
@@ -160,51 +357,39 @@
       </panel>
       <loading_indicator
        follows="left|top"
-       height="48"
+       height="24"
        layout="topleft"
        name="working_indicator"
-       left="101"
-       top="46"
+       left="10"
+       top_delta="0"
        visible="false"
-       width="48" />
+       width="24" />
       <text
-       follows="left|top|right"
+       follows="left|top"
        font="SansSerifBold"
        height="14"
        layout="topleft"
-       left="5"
+       left_pad="3"
        length="1"
-       halign="center"
+       halign="left"
        name="working_lbl"
-       right="-5"
-       top="98"
+       top_delta="5"
        translate="false"
        type="string"
        visible="false"
-       width="130">
+       width="162">
           Working
       </text>
-      <button
-       follows="left|top"
-       height="22"
-       image_overlay="Refresh_Off"
-       layout="topleft"
-       left="20"
-       name="new_snapshot_btn"
-       bottom="-20"
-       visible="false"
-       width="22" />
       <text
        follows="left|top"
        font="SansSerifBold"
        halign="left"
        height="18"
        layout="topleft"
-       left_pad="10"
+       left="10"
        length="1"
        name="refresh_lbl"
-       right="-5"
-       text_color="red"
+       text_color="0.95 0.4 0.4 1"
        top_delta="0"
        translate="false"
        type="string"
@@ -212,37 +397,44 @@
        width="130">
           Refresh to save.
       </text>
-  </ui_ctrl>
+  <ui_ctrl 
+    layout="topleft"
+    name="thumbnail_placeholder"
+    top="23"
+	left="215"
+	width="400"
+	height="400"
+    follows="top|left"/>
   <view_border 
    bevel_style="in" 
    height="21"
-   width="250"
    layout="topleft"
    name="img_info_border"
-   top_pad="3"
-   follows="left|top"
-   left_delta="0"
-   />
+   top_pad="0"
+   right="-10"
+   follows="left|top|right"
+   left_delta="0"/>
    <text
     type="string"
     font="SansSerifSmall"
     length="1"
-    follows="left|top"
+    follows="left|top|right"
     height="14"
     layout="topleft"
-    left_delta="5"
+    left="220"
+	right="-20"
     halign="left"
     name="image_res_text"
     top_delta="5"
-    width="100">
-       [WIDTH] x [HEIGHT] px
+    width="200">
+       [WIDTH]px (width) x [HEIGHT]px (height)
    </text>
    <text
-    follows="left|top"
+    follows="right|top"
     font="SansSerifSmall"
     height="14"
     layout="topleft"
-    left="200"
+    left="-65"
     length="1"
     halign="right"
     name="file_size_label"
@@ -251,161 +443,4 @@
     width="50">
        [SIZE] KB
    </text>
-    <panel_container
-     follows="left|top"
-     height="260"
-     layout="topleft"
-     left="0"
-     name="panel_container"
-     default_panel_name="panel_snapshot_options"
-     top_pad="10"
-     width="270">
-      <panel
-       class="llpanelsnapshotoptions"
-       filename="panel_snapshot_options.xml"
-       follows="all"
-       layout="topleft"
-       left="0"
-       name="panel_snapshot_options"
-       top="0" />
-      <panel
-       class="llpanelsnapshotprofile"
-       follows="all"
-       layout="topleft"
-       name="panel_snapshot_profile"
-       filename="panel_snapshot_profile.xml" />
-      <panel
-       class="llpanelsnapshotpostcard"
-       follows="all"
-       layout="topleft"
-       name="panel_snapshot_postcard"
-       filename="panel_snapshot_postcard.xml" />
-      <panel
-       class="llpanelsnapshotinventory"
-       follows="all"
-       layout="topleft"
-       name="panel_snapshot_inventory"
-       filename="panel_snapshot_inventory.xml" />
-      <panel
-       class="llpanelsnapshotlocal"
-       follows="all"
-       layout="topleft"
-       name="panel_snapshot_local"
-       filename="panel_snapshot_local.xml" />
-    </panel_container>
-    <panel
-     height="295"
-     layout="topleft"
-     left="270"
-     name="advanced_options_panel"
-     top="20"
-     width="200">
-        <text
-         type="string"
-         font="SansSerifSmall"
-         length="1"
-         follows="left|top"
-         height="14"
-         layout="topleft"
-         left="10"
-         halign="left"
-         name="advanced_options_label"
-         right="-10"
-         top="10">
-            ADVANCED OPTIONS
-        </text>
-        <view_border 
-         bevel_style="in"
-         follows="left|top|right" 
-         height="1"
-         left="10"
-         layout="topleft"
-         name="advanced_options_hr"
-         right="-10"
-         top_pad="5"
-         />
-        <text
-         type="string"
-         length="1"
-         follows="left|top"
-         height="13"
-         layout="topleft"
-         left="10"
-         name="layer_type_label"
-         top_pad="10"
-         width="50">
-            Capture:
-        </text>
-        <combo_box
-         follows="left|top|right"
-         height="23"
-         label="Image Layers"
-         layout="topleft"
-         left="30"
-         name="layer_types"
-         right="-10">
-            <combo_box.item
-             label="Colors"
-             name="Colors"
-             value="colors" />
-            <combo_box.item
-             label="Depth"
-             name="Depth"
-             value="depth" />
-        </combo_box>
-        <check_box
-         label="Interface"
-         layout="topleft"
-         left="30"
-         top_pad="10"
-         width="180"
-         name="ui_check" />
-        <check_box
-         label="HUDs"
-         layout="topleft"
-         left="30"
-         top_pad="10"
-         width="180"
-         name="hud_check" />
-        <check_box
-         label="Freeze frame (fullscreen)"
-         layout="topleft"
-         left="10"
-         top_pad="8"
-         width="180"
-         name="freeze_frame_check" />
-        <check_box
-         label="Auto-refresh"
-         layout="topleft"
-         left="10"
-         top_pad="8"
-         width="180"
-         name="auto_snapshot_check" />
-        <text
-         type="string"
-         length="1"
-         follows="left|top"
-         height="13"
-         layout="topleft"
-         left="10"
-         name="filter_list_label"
-         top_pad="10"
-         width="50">
-            Filter:
-        </text>
-        <combo_box
-            control_name="PhotoFilters"
-            follows="left|right|top"
-            name="filters_combobox"
-            tool_tip="Image filters"
-            top_pad="8"
-            left="30"
-            height="21"
-            width="135">
-            <combo_box.item
-            label="No Filter"
-            name="NoFilter"
-            value="NoFilter" />
-        </combo_box>
-    </panel>
 </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_top_objects.xml b/indra/newview/skins/default/xui/en/floater_top_objects.xml
index 0b71177345375f2dab46f175ba78cd86597e7f59..36ceddd30501d4fa56d3b6fdc2b7d6e112eb6efc 100755
--- a/indra/newview/skins/default/xui/en/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/en/floater_top_objects.xml
@@ -38,6 +38,18 @@
      name="none_descriptor">
         None found.
     </floater.string>
+    <floater.string
+     name="URLs">
+        URLs
+    </floater.string>
+    <floater.string
+     name="memory">
+        Memory (KB)
+    </floater.string>
+
+
+
+
     <text
      type="string"
      length="1"
@@ -82,7 +94,7 @@
          name="parcel"
          width="120" />
         <scroll_list.columns
-         label="Time"
+         label="Date"
          name="time"
          width="130" />
           <scroll_list.columns
diff --git a/indra/newview/skins/default/xui/en/floater_twitter.xml b/indra/newview/skins/default/xui/en/floater_twitter.xml
index aa5bfce2e9775d81b22afc598c49319669b8f4bd..3e1a91e58dddfa68cda673b00fc03fe77c3d94bf 100644
--- a/indra/newview/skins/default/xui/en/floater_twitter.xml
+++ b/indra/newview/skins/default/xui/en/floater_twitter.xml
@@ -10,21 +10,13 @@
   single_instance="true"
   reuse_instance="true"
   title="TWITTER"
-  height="502"
-  width="304">
-  <panel
-   height="502"
-   width="304"
-   visible="true"
-   name="background"
-   follows="all"
-   top="0"
-   left="0">
+  height="462"
+  width="272">
    <tab_container
      name="tabs"
      tab_group="1"
      tab_min_width="70"
-     tab_height="30"
+     tab_height="21"
      tab_position="top"
      top="7"
      height="457"
@@ -43,17 +35,13 @@
        label="ACCOUNT"
        name="panel_twitter_account"/>     
     </tab_container>
-    <panel
-     name="connection_status_panel"
-     follows="left|bottom|right"
-     height="24">
      <text
       name="connection_error_text"
       type="string"
       follows="left|bottom|right"
-      top="5"
-      left="9"
-      width="250"
+      bottom="-5"
+      left="10"
+      width="252"
       height="20"
       wrap="true"
       halign="left"
@@ -67,16 +55,16 @@
       height="24"
       width="24"
       name="connection_loading_indicator"
-      top="2"
-      left="9"
+      top_delta="-2"
+      left="10"
       visible="true"/>
      <text
       name="connection_loading_text"
       type="string"
       follows="left|bottom|right"
-      top="5"
+      top_delta="2"
       left_pad="5"
-      width="250"
+      width="223"
       height="20"
       wrap="true"
       halign="left"
@@ -85,6 +73,4 @@
       font="SansSerif">
       Loading...
     </text>
-  </panel>
- </panel>
 </floater>
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
index d2519a5aa46dcdbac65c1f880b27be1631f20930..06d0b849a3e8ebc3cbc5f5a02242f70182c7a8f5 100755
--- a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
@@ -63,7 +63,7 @@
     <menu_item_separator
      layout="topleft" />
     <menu_item_call
-     label="Show Filters"
+     label="Show Filters..."
      layout="topleft"
      name="show_filters">
         <on_click
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 772d81c4489e64b3b2a37b1884a29fa398228e46..2c7dbc3c189c3fd5f28f1ee5a5c317bef02ad86c 100755
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -167,6 +167,16 @@ No tutorial is currently available.
      yestext="Yes"/>
   </notification>
 
+  <notification
+   icon="alertmodal.tga"
+   name="GenericAlertOK"
+   type="alertmodal">
+[MESSAGE]
+    <usetemplate
+     name="okbutton"
+     yestext="OK"/>
+  </notification>
+
   <notification
    icon="alertmodal.tga"
    name="BadInstallation"
@@ -4629,6 +4639,17 @@ The region you're trying to visit contains [REGIONMATURITY] content, but your cu
      yestext="OK"/>
   </notification>
 
+  <notification
+   icon="alertmodal.tga"
+   name="RegionTPSpecialUsageBlocked"
+   type="alertmodal">
+    <tag>fail</tag>
+    Unable to enter region. '[REGION_NAME]' is a Skill Gaming Region, and you must meet certain criteria in order to enter. For details, please review the [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life Skill Gaming FAQ].
+    <usetemplate
+     name="okbutton"
+     yestext="OK"/>
+  </notification>
+
   <notification
    icon="alertmodal.tga"
    name="PreferredMaturityChanged"
diff --git a/indra/newview/skins/default/xui/en/panel_facebook_account.xml b/indra/newview/skins/default/xui/en/panel_facebook_account.xml
deleted file mode 100644
index 122cbfb7170a75e9e0534090da9b1a4f0083f611..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_facebook_account.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<panel
-	 height="400"
-	 width="304"
-	 layout="topleft"
-    follows="all"
-   name="panel_facebook_account">
-  <string
-      name="facebook_connected"
-      value="You are connected to Facebook as:" />
-  <string
-      name="facebook_disconnected"
-      value="Not connected to Facebook" />
-  <text
-   layout="topleft"
-   length="1"
-   follows="top|left"
-   font="SansSerif"
-   height="16"
-   left="9"
-   name="account_caption_label"
-   top="21"
-   type="string">
-    Not connected to Facebook.
-  </text>
-  <text
-   layout="topleft"
-   top_pad="2"
-   length="1"
-   follows="top|left"
-   font="SansSerif"
-   height="16"
-   left="9"
-   name="account_name_label"
-   parse_urls="true"
-   type="string"/>
-  <panel
-    layout="topleft"
-    follows="left|top"
-    name="panel_buttons"
-    height="345"
-    left="9">
-    <button
-     layout="topleft"
-     follows="left|top"
-     top_pad="9"
-     visible="true"
-     height="23"
-     label="Connect..."
-     name="connect_btn"
-     width="210">
-      <commit_callback function="SocialSharing.Connect"/>
-    </button>
-
-    <button
-     layout="topleft"
-     follows="left|top"
-     top_delta="0"
-     height="23"
-     label="Disconnect"
-     name="disconnect_btn"
-     width="210"
-     visible="false">
-      <commit_callback function="SocialSharing.Disconnect"/>
-    </button>
-    <text
-      layout="topleft"
-      length="1"
-      follows="top|left"
-      height="16"
-      left="0"
-      name="account_learn_more_label"
-      top_pad="20"
-      type="string">
-      [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Learn about posting to Facebook]
-    </text>
-  </panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_facebook_friends.xml b/indra/newview/skins/default/xui/en/panel_facebook_friends.xml
index 9d21a3a29345ce6eb9a7cccc7058a94ee7556a8d..97994fb08b6c3d05141d2e823af0228f01d07a59 100644
--- a/indra/newview/skins/default/xui/en/panel_facebook_friends.xml
+++ b/indra/newview/skins/default/xui/en/panel_facebook_friends.xml
@@ -1,6 +1,6 @@
 <panel
 	 height="400"
-	 width="304"
+	 width="272"
 	 layout="topleft"
     follows="all"
    name="panel_facebook_friends">
@@ -9,17 +9,17 @@
    value="You currently do not have any Facebook friends who are also Second Life residents. Ask your Facebook friends to join Second Life today!" />
   <string
    name="facebook_friends_no_connected"
-   value="You're currently not connected to Facebook. Please go to the Account tab to connect and enable this feature." />
+   value="You're currently not connected to Facebook. Please go to the Status tab to connect and enable this feature." />
   <accordion
- background_visible="true"
+ background_visible="false"
  bg_alpha_color="DkGray2"
  bg_opaque_color="DkGray2"
    follows="all"
-   height="408"
+   height="383"
    layout="topleft"
-   left="3"
+   left="10"
    name="friends_accordion"
-   right="-2"
+   right="-10"
    top_pad="2">
     <accordion_tab
      layout="topleft"
@@ -36,7 +36,7 @@
        name="second_life_friends"
        show_permissions_granted="true"
        top="0"
-       width="307" />
+       width="272" />
     </accordion_tab>
     <accordion_tab
      layout="topleft"
@@ -53,19 +53,20 @@
        name="suggested_friends"
        show_permissions_granted="true"
        top="0"
-       width="307" />
+       width="272" />
     </accordion_tab>
   </accordion>
     <text
         layout="topleft"
         word_wrap="true"
         height="64"
-        width="290"
+        width="250"
         follows="top|left|right"
         font="SansSerif"
-        left="9"
+        left="10"
+		right="-10"
         name="facebook_friends_status"
-        top="21"
+        top="5"
         type="string">
         Not connected to Facebook.
     </text>
diff --git a/indra/newview/skins/default/xui/en/panel_facebook_photo.xml b/indra/newview/skins/default/xui/en/panel_facebook_photo.xml
index b5b6dee004a97ffcb10e6a0fad29fc03132b617c..22e6598352714a4b700c12bc4fa7e23e3beb05f1 100644
--- a/indra/newview/skins/default/xui/en/panel_facebook_photo.xml
+++ b/indra/newview/skins/default/xui/en/panel_facebook_photo.xml
@@ -1,29 +1,19 @@
     <panel
       height="400"
-      width="304"
+      width="272"
       layout="topleft"
       follows="all"
       name="panel_facebook_photo">
-      <layout_stack
-	   layout="topleft"
-       border_size="0"
-       height="392"
-       follows="all"
-       orientation="vertical"
-       name="stack_photo"
-       top="8">
-        <layout_panel	
-         name="snapshot_panel"
-         height="367">
             <combo_box
              control_name="FacebookPhotoResolution"
              follows="left|top"
-             top="6"
-             left="9"
+			 layout="topleft"
+             top="7"
+             left="10"
              name="resolution_combobox"
              tool_tip="Image resolution"
              height="21"
-             width="135">
+             width="124">
               <combo_box.item
                label="Current Window"
                name="CurrentWindow"
@@ -47,13 +37,14 @@
             </combo_box>
             <combo_box
                 control_name="FacebookPhotoFilters"
-                follows="right|top"
+                follows="left|top"
+				layout="topleft"
                 name="filters_combobox"
                 tool_tip="Image filters"
-                top="6"
-                left="165"
+                top="7"
+                left_pad="4"
                 height="21"
-                width="135">
+                width="124">
                 <combo_box.item
                 label="No Filter"
                 name="NoFilter"
@@ -61,48 +52,62 @@
             </combo_box>
             <panel
                 height="150"
-                width="250"
+                width="252"
                 visible="true"
+				layout="topleft"
                 name="thumbnail_placeholder"
-                top="33"
-                follows="left|top|right"
-                left="9">
+                top_pad="5"
+                follows="left|top|rith"
+				right="-10"
+                left="10">
             </panel>
-            <button
-             follows="left|top"
-             height="23"
-             label="Refresh"
-             left="9"
-             top_pad="5"
-             name="new_snapshot_btn"
-             tool_tip="Click to refresh"
-             visible="true"
-             width="100" >
-             <button.commit_callback
-               function="SocialSharing.RefreshPhoto" />
-            </button>
-            <text
+			<text
                 follows="left|top"
+				layout="topleft"
                 font="SansSerif"
                 text_color="EmphasisColor"
                 height="14"
-                top_pad="-19"
-                left_pad="-30"
+                top_pad="2"
+                left="10"
                 length="1"
                 halign="center"
                 name="working_lbl"
                 translate="false"
                 type="string"
                 visible="true"
-                width="150">
+                width="251">
                 Refreshing...
             </text>
+			<view_border 
+			 bevel_style="in"
+			 follows="left|top"
+			 layout="topleft"
+			 height="1"
+			 left="10"
+			 name="refresh_border"
+			 width="250"
+			 top_pad="0"/>
+            <button
+             follows="left|top"
+			 layout="topleft"
+             height="23"
+             label="Refresh"
+             left="10"
+             top_pad="5"
+             name="new_snapshot_btn"
+             tool_tip="Click to refresh"
+             visible="true"
+             width="100" >
+             <button.commit_callback
+               function="SocialSharing.RefreshPhoto" />
+            </button>
             <button
                 follows="right|top"
+				layout="topleft"
                 height="23"
                 label="Preview"
-                left="200"
-                top_pad="-19"
+                right="-10"
+                top_delta="0"
                 name="big_preview_btn"
                 tool_tip="Click to toggle preview"
                 is_toggle="true"
@@ -114,9 +119,10 @@
             <text
              length="1"
              follows="top|left|right"
+			 layout="topleft"
              font="SansSerif"
              height="16"
-             left="9"
+             left="10"
              name="caption_label"
              top_pad="20"
              type="string">
@@ -124,23 +130,22 @@
             </text>
             <text_editor
              follows="left|top|right|bottom"
+			 layout="topleft"
              height="87"
              width="250"
-             left="9"
+             left="10"
+			 right="-10"
              length="1"
              max_length="700"
              name="photo_caption"
              type="string"
              word_wrap="true">
             </text_editor>
-        </layout_panel>
-        <layout_panel
-          name="photo_button_panel"
-          height="25">
           <button
-           follows="left|bottom"
-           top="0"
-           left="9"
+           follows="left|top"
+		   layout="topleft"
+           top_pad="22"
+           left="10"
            height="23"
            label="Post"
            name="post_photo_btn"
@@ -149,16 +154,15 @@
              function="SocialSharing.SendPhoto" />
           </button>
           <button
-               follows="left|bottom"
+               follows="right|top"
+			   layout="topleft"
                height="23"
                label="Cancel"
                name="cancel_photo_btn"
-               left_pad="15"
+               right="-10"
                top_delta="0"
                width="100">
             <button.commit_callback
              function="SocialSharing.Cancel" />
-          </button>          
-        </layout_panel>        
-      </layout_stack>
+          </button>
     </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_facebook_place.xml b/indra/newview/skins/default/xui/en/panel_facebook_place.xml
index 84c87df5239b7416880b312c57b27523f537f546..f87b008c4ec53b7ef98655622d99fbf828c1baad 100644
--- a/indra/newview/skins/default/xui/en/panel_facebook_place.xml
+++ b/indra/newview/skins/default/xui/en/panel_facebook_place.xml
@@ -1,115 +1,96 @@
     <panel
       height="400"
-      width="304"
+      width="272"
 	  layout="topleft"
       follows="all"
       name="panel_facebook_place">
-      <layout_stack
-	    layout="topleft"
-        border_size="0"
-        height="392"
-        follows="all"
-        orientation="vertical"
-        name="stack_place"
-        top="8">
-        <layout_panel
-          name="place_detail_panel"
-          height="181">
           <text
             length="1"
             follows="top|left|right"
+			layout="topleft"
             font="SansSerif"
             height="16"
-            left="9"
+            left="10"
             name="place_caption_label"
-            top="13"
+            top="5"
             type="string">
             Say something about where you are:
           </text>
           <text_editor
             follows="top|left|right"
-            height="150"
+			layout="topleft"
+            height="70"
             width="250"
-            left="9"
+            left="10"
+			right="-10"
             length="1"
             max_length="700"
             name="place_caption"
             type="string"
             word_wrap="true">
            </text_editor>
-          </layout_panel>
-          <layout_panel
-            name="place_map_panel"
-            height="186">
+		  <check_box
+              follows="left|top"
+			  layout="topleft"
+              initial_value="false"
+			  height="16"
+              top_pad="8"
+              width="8"
+              label="Include overhead view of location"
+              name="add_place_view_cb"
+              left="10"/>
               <panel
                   follows="left|top"
-                  height="128"
-                  width="128"
+				  layout="topleft"
+                  height="243"
+                  width="250"
                   background_visible="true"
                   bg_opaque_color="Black"
                   bg_alpha_color="Black"
-                  top="20"
-                  left="9"
+                  top_pad="8"
+                  left="10"
+				  right="-12"
                   visible="true"
                   name="map_border">
               </panel>
-              <loading_indicator
-              follows="left|top"
-              height="24"
-              width="24"
-              name="map_loading_indicator"
-              top="77"
-              left="61"
-              visible="true"/>
               <icon
                 follows="left|top"
-                height="128"
-                width="128"
+				layout="topleft"
+                height="243"
+                width="250"
                 image_name="Map_Placeholder_Icon"
-                layout="topleft"
-                top="20"
-                left="9"
+                top_delta="0"
+				right="-12"
+                left="10"
                 visible="true"
                 name="map_placeholder">
               </icon>
               <icon
                   follows="left|top"
-                  height="128"
-                  width="128"
+				  layout="topleft"
+                  height="243"
+                  width="250"
                   image_name="Map_Placeholder_Icon"
-                  layout="topleft"
-                  top="20"
-                  left="9"
+                  top_delta="0"
+                  left="10"
+				  right="-12"
                   visible="true"
                   name="map_default">
               </icon>
-            <check_box
+			  <loading_indicator
               follows="left|top"
-              initial_value="false"
-              top_delta="8"
-              width="8"
-              label=""
-              name="add_place_view_cb"
-              left_pad="5"/>
-            <text
-              follows="left|top"
-              font="SansSerif"
-              height="32"
-              width="130"
-              word_wrap="true"
-              left_pad="12"
-              top_delta="-8"
-              type="string">
-              Include overhead view of location
-            </text>
-          </layout_panel>
-          <layout_panel
-            name="place_button_panel"
-            height="25">
+			  layout="topleft"
+              height="24"
+              width="24"
+              name="map_loading_indicator"
+              top_delta="116"
+              left="126"
+              visible="false"/>
             <button
               follows="left|bottom"
-              top="0"
-              left="9"
+			  layout="topleft"
+              top_pad="95"
+              left="10"
               height="23"
               label="Post"
               name="post_place_btn"
@@ -118,16 +99,15 @@
                  function="SocialSharing.SendCheckin" />
             </button>
             <button
-              follows="left|bottom"
+              follows="right|bottom"
+			  layout="topleft"
               height="23"
               label="Cancel"
               name="cancel_place_btn"
-              left_pad="15"
+              right="-10"
               top_delta="0"
               width="100">
               <button.commit_callback
                   function="SocialSharing.Cancel" />
             </button>
-        </layout_panel>
-     </layout_stack>
     </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_facebook_status.xml b/indra/newview/skins/default/xui/en/panel_facebook_status.xml
index 480abec55873ac2353ad1abbf2d10bb52356879a..fe0f3c9279f75bf4a5d7fb29049bd4969f8ead8f 100644
--- a/indra/newview/skins/default/xui/en/panel_facebook_status.xml
+++ b/indra/newview/skins/default/xui/en/panel_facebook_status.xml
@@ -1,50 +1,113 @@
     <panel
 	 height="400"
-	 width="304"
+	 width="272"
      follows="all"
 	 layout="topleft"
      name="panel_facebook_status">
-     <layout_stack
+        <string
+      name="facebook_connected"
+      value="You are connected to Facebook as:" />
+  <string
+      name="facebook_disconnected"
+      value="Not connected to Facebook" />
+  <text
+   layout="topleft"
+   length="1"
+   follows="top|left"
+   font="SansSerif"
+   height="16"
+   left="10"
+   name="account_caption_label"
+   top="5"
+   type="string">
+    Not connected to Facebook.
+  </text>
+  <text
+   layout="topleft"
+   top_pad="2"
+   length="1"
+   follows="top|left"
+   font="SansSerif"
+   height="16"
+   left="10"
+   name="account_name_label"
+   parse_urls="true"
+   type="string"/>
+  <panel
+    layout="topleft"
+    follows="left|top"
+    name="panel_buttons"
+    height="60"
+    left="0">
+    <button
+     layout="topleft"
+     follows="left|top"
+     top_pad="9"
+     left="10"
+     visible="true"
+     height="23"
+     label="Connect..."
+     name="connect_btn"
+     width="251">
+      <commit_callback function="SocialSharing.Connect"/>
+    </button>
+
+    <button
+     layout="topleft"
+     follows="left|top|right"
+     top_delta="0"
+     left="10"
+     right="-10"
+     height="23"
+     label="Disconnect"
+     name="disconnect_btn"
+     width="210"
+     visible="false">
+      <commit_callback function="SocialSharing.Disconnect"/>
+    </button>
+    <text
       layout="topleft"
-      border_size="0"
-      height="392"
-      follows="all"
-      orientation="vertical"
-      name="stack_status"
-      top="8">
-      <layout_panel
-       name="status_detail_panel"
-       height="367">
+      length="1"
+      follows="top|left|right"
+      left="10"
+      right="-10"
+      height="16"
+      name="account_learn_more_label"
+      top_pad="5"
+      type="string">
+      [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Learn about posting to Facebook]
+    </text>
+  </panel>
+        
        <text
         length="1"
+        layout="topleft"
         follows="top|left|right"
         font="SansSerif"
         height="16"
-        left="9"
+        left="10"
         name="status_caption_label"
-        top="13"
+        top_pad="5"
         type="string">
         What's on your mind?
        </text>
        <text_editor
         follows="left|top|right"
+        layout="topleft"
         height="150"
-        width="250"
-        left="9"
+        width="252"
+        left="10"
         length="1"
         max_length="700"
         name="status_message"
         type="string"
         word_wrap="true">
        </text_editor>
-      </layout_panel>
-      <layout_panel
-       name="status_button_panel"
-       height="25">
        <button
-        follows="left|bottom"
-        top="0"
-        left="9"
+        follows="left|top"
+        layout="topleft"
+        top_pad="6"
+        left="10"
         height="23"
         label="Post"
         name="post_status_btn"
@@ -53,16 +116,15 @@
           function="SocialSharing.SendStatus" />
        </button>
        <button
-        follows="left|bottom"
+        follows="right|top"
+        layout="topleft"
         height="23"
         label="Cancel"
         name="cancel_status_btn"
-        left_pad="15"
+        right="-10"
         top_delta="0"
         width="100">
         <button.commit_callback
           function="SocialSharing.Cancel" />
        </button>
-      </layout_panel>
-     </layout_stack>
     </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_flickr_account.xml b/indra/newview/skins/default/xui/en/panel_flickr_account.xml
index 506d2e2f749701af6f5c578f4f687cc987a95347..5c2f33578004e5d81f7a6baf2062a017e6844063 100644
--- a/indra/newview/skins/default/xui/en/panel_flickr_account.xml
+++ b/indra/newview/skins/default/xui/en/panel_flickr_account.xml
@@ -1,6 +1,6 @@
 <panel
 	 height="540"
-	 width="304"
+	 width="272"
 	 layout="topleft"
    name="panel_flickr_account">
   <string
@@ -15,9 +15,9 @@
    follows="top|left"
    font="SansSerif"
    height="16"
-   left="9"
+   left="10"
    name="account_caption_label"
-   top="21"
+   top="5"
    type="string">
     Not connected to Flickr.
   </text>
@@ -28,7 +28,7 @@
    follows="top|left"
    font="SansSerif"
    height="16"
-   left="9"
+   left="10"
    name="account_name_label"
    parse_urls="true"
    type="string"/>
@@ -36,12 +36,14 @@
     layout="topleft"
     name="panel_buttons"
     height="345"
-    left="9">
+    left="0">
     <button
      layout="topleft"
-     follows="left|top"
+     follows="left|top|right"
      top_pad="9"
      visible="true"
+	 left="10"
+	 right="-10"
      height="23"
      label="Connect..."
      name="connect_btn"
@@ -51,8 +53,10 @@
 
     <button
      layout="topleft"
-     follows="left|top"
+     follows="left|top|right"
      top_delta="0"
+	 left="10"
+	 right="-10"
      height="23"
      label="Disconnect"
      name="disconnect_btn"
@@ -65,9 +69,9 @@
       length="1"
       follows="top|left"
       height="16"
-      left="0"
+      left="10"
       name="account_learn_more_label"
-      top_pad="20"
+      top_pad="5"
       type="string">
       [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Flickr/ta-p/2435609 Learn about posting to Flickr]
     </text>
diff --git a/indra/newview/skins/default/xui/en/panel_flickr_photo.xml b/indra/newview/skins/default/xui/en/panel_flickr_photo.xml
index 8d8ef45c0d48cb7554464b0b2263507f31a72396..e31695645d03abe387be40b01d4f54bfae356776 100644
--- a/indra/newview/skins/default/xui/en/panel_flickr_photo.xml
+++ b/indra/newview/skins/default/xui/en/panel_flickr_photo.xml
@@ -1,28 +1,19 @@
     <panel
       height="540"
-      width="304"
+      width="272"
+	  follows="all"
       layout="topleft"
       name="panel_flickr_photo">
-      <layout_stack
-	   layout="topleft"
-       border_size="0"
-       height="532"
-       follows="all"
-       orientation="vertical"
-       name="stack_photo"
-       top="8">
-        <layout_panel	
-         name="snapshot_panel"
-         height="507">
             <combo_box
              control_name="FlickrPhotoResolution"
              follows="left|top"
-             top="6"
-             left="9"
+			 layout="topleft"
+             top="7"
+             left="10"
              name="resolution_combobox"
              tool_tip="Image resolution"
              height="21"
-             width="135">
+             width="124">
               <combo_box.item
                label="Current Window"
                name="CurrentWindow"
@@ -42,13 +33,14 @@
             </combo_box>
             <combo_box
                control_name="FlickrPhotoFilters"
-               follows="right|top"
+               follows="left|top"
+			   layout="topleft"
                name="filters_combobox"
                tool_tip="Image filters"
-               top="6"
-               left="165"
+               top_delta="0"
+               left_pad="4"
                height="21"
-               width="135">
+               width="124">
                 <combo_box.item
                  label="No Filter"
                  name="NoFilter"
@@ -59,45 +51,59 @@
                 width="250"
                 visible="true"
                 name="thumbnail_placeholder"
-                top="33"
-                follows="left|top"
-                left="9">
+                top_pad="5"
+                follows="left|top|right"
+				layout="topleft"
+				right="-10"
+                left="10">
             </panel>
-            <button
-             follows="left|top"
-             height="23"
-             label="Refresh"
-             left="9"
-             top_pad="5"
-             name="new_snapshot_btn"
-             tool_tip="Click to refresh"
-             visible="true"
-             width="100" >
-             <button.commit_callback
-               function="SocialSharing.RefreshPhoto" />
-            </button>
-            <text
+			<text
                 follows="left|top"
+				layout="topleft"
                 font="SansSerif"
                 text_color="EmphasisColor"
                 height="14"
-                top_pad="-19"
-                left_pad="-30"
+                top_pad="2"
+                left="10"
                 length="1"
                 halign="center"
                 name="working_lbl"
                 translate="false"
                 type="string"
                 visible="true"
-                width="150">
+                width="251">
                 Refreshing...
             </text>
+			<view_border 
+			 bevel_style="in"
+			 follows="left|top"
+			 layout="topleft"
+			 height="1"
+			 left="10"
+			 name="refresh_border"
+			 width="250"
+			 top_pad="0"/>
+            <button
+             follows="left|top"
+			 layout="topleft"
+             height="23"
+             label="Refresh"
+             left="10"
+             top_pad="5"
+             name="new_snapshot_btn"
+             tool_tip="Click to refresh"
+             visible="true"
+             width="100" >
+             <button.commit_callback
+               function="SocialSharing.RefreshPhoto" />
+            </button>
             <button
                 follows="right|top"
+				layout="topleft"
                 height="23"
                 label="Preview"
-                left="200"
-                top_pad="-19"
+                right="-10"
+                top_delta="0"
                 name="big_preview_btn"
                 tool_tip="Click to toggle preview"
                 is_toggle="true"
@@ -109,19 +115,21 @@
             <text
              length="1"
              follows="top|left|right"
+			 layout="topleft"
              font="SansSerif"
              height="16"
-             left="9"
+             left="10"
              name="title_label"
-             top_pad="15"
+             top_pad="10"
              type="string">
               Title:
             </text>
             <line_editor
              follows="left|top"
+			 layout="topleft"
              height="20"
              width="250"
-             left="9"
+             left="10"
              length="1"
              max_length="256"
              name="photo_title"
@@ -130,19 +138,23 @@
             <text
              length="1"
              follows="top|left|right"
+			 layout="topleft"
              font="SansSerif"
              height="16"
-             left="9"
+             left="10"
+			 right="-10"
              name="description_label"
              top_pad="10"
+			 width="25"
              type="string">
               Description:
             </text>
             <text_editor
              follows="left|top"
+			 layout="topleft"
              height="50"
-             width="250"
-             left="9"
+             width="249"
+             left="10"
              length="1"
              max_length="700"
              name="photo_description"
@@ -151,6 +163,7 @@
             </text_editor>
             <check_box
              follows="left|top"
+			 layout="topleft"
              initial_value="true"
              label="Include SL location at end of description"
              name="add_location_cb"
@@ -159,23 +172,25 @@
              top_pad="8"/>
             <text
              length="1"
-             follows="top|left|right"
+             follows="top|left"
+			 layout="topleft"
              font="SansSerif"
              height="16"
-             left="9"
+             left="10"
              name="tags_label"
-             top_pad="10"
+             top_pad="6"
              type="string">
               Tags:
             </text>
             <text
               length="1"
               follows="top|left"
+			  layout="topleft"
               font="SansSerifSmall"
               text_color="White_50"
               height="30"
               name="tags_help_label"
-              left="50"
+              left="51"
               top_pad="-16"
               type="string">
 Separate tags with spaces
@@ -183,9 +198,10 @@ Use "" for multi-word tags
             </text>
             <text_editor
              follows="left|top"
+			 layout="topleft"
              height="50"
-             width="250"
-             left="9"
+             width="249"
+             left="10"
              length="1"
              max_length="700"
              name="photo_tags"
@@ -195,8 +211,9 @@ Use "" for multi-word tags
             <combo_box
              control_name="FlickrPhotoRating"
              follows="left|top"
-             top_pad="16"
-             left="9"
+			 layout="topleft"
+             top_pad="7"
+             left="10"
              name="rating_combobox"
              tool_tip="Flickr content rating"
              height="21"
@@ -214,14 +231,11 @@ Use "" for multi-word tags
                name="RestrictedRating"
                value="3" />
             </combo_box>
-        </layout_panel>
-        <layout_panel
-          name="photo_button_panel"
-          height="25">
           <button
            follows="left|top"
-           top="0"
-           left="9"
+		   layout="topleft"
+           top_pad="7"
+           left="10"
            height="23"
            label="Upload"
            name="post_photo_btn"
@@ -230,16 +244,15 @@ Use "" for multi-word tags
              function="SocialSharing.SendPhoto" />
           </button>
           <button
-               follows="left|top"
+               follows="right|top"
+			   layout="topleft"
                height="23"
                label="Cancel"
                name="cancel_photo_btn"
-               left_pad="15"
+               right="-10"
                top_delta="0"
                width="100">
             <button.commit_callback
              function="SocialSharing.Cancel" />
-          </button>          
-        </layout_panel>        
-      </layout_stack>
+          </button>
     </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_postcard_message.xml b/indra/newview/skins/default/xui/en/panel_postcard_message.xml
index ab2a42ea01bf1baa6be6c97a037f41d2c8da9a2d..331a08b4bbf5cf4f85364e5b197c6b5d78a1bf2d 100755
--- a/indra/newview/skins/default/xui/en/panel_postcard_message.xml
+++ b/indra/newview/skins/default/xui/en/panel_postcard_message.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
- height="380"
+ height="319"
  layout="topleft"
  name="panel_postcard_message"
  width="490">
@@ -12,7 +12,7 @@
      font="SansSerif"
      height="16"
      layout="topleft"
-     left="12"
+     left="5"
      name="to_label"
      top="10"
      width="60">
@@ -25,7 +25,7 @@
      layout="topleft"
      left_pad="10"
      name="to_form"
-     right="-10"
+     right="-3"
      top_delta="-4" />
     <text
      type="string"
@@ -35,7 +35,7 @@
      font="SansSerif"
      height="16"
      layout="topleft"
-     left="12"
+     left="5"
      name="name_label"
      width="60">
         From:
@@ -47,7 +47,7 @@
      left_pad="10"
      max_length_bytes="100"
      name="name_form"
-     right="-10"
+     right="-3"
      top_delta="-4" />
     <text
      type="string"
@@ -57,7 +57,7 @@
      font="SansSerif"
      height="16"
      layout="topleft"
-     left="12"
+     left="5"
      name="subject_label"
      width="60">
         Subject:
@@ -65,61 +65,24 @@
     <line_editor
      follows="left|top|right"
      height="20"
-     label="Type your subject here."
      layout="topleft"
      left_pad="10"
      max_length_bytes="100"
      name="subject_form"
-     right="-10"
+     right="-3"
      top_delta="-4" />
-    <text
-     type="string"
-     length="1"
-     bottom_delta="23"
-     follows="top|left|right"
-     font="SansSerif"
-     layout="topleft"
-     left="12"
-     name="msg_label"
-     right="-10">
-        Message:
-    </text>
     <text_editor
      type="string"
      length="1"
      follows="left|top|right"
-     height="60"
+     height="48"
      layout="topleft"
-     left_delta="0"
+     left="5"
      max_length="700"
      name="msg_form"
-     right="-10"
-     top_pad="10"
+     right="-4"
+     top_pad="5"
      word_wrap="true">
         Type your message here.
     </text_editor>
-    <button
-     follows="right|bottom"
-     height="23"
-     label="Cancel"
-     layout="topleft"
-     name="cancel_btn"
-     right="-32"
-     top="350"
-     width="100">
-      <button.commit_callback
-       function="Postcard.Cancel" />
-    </button>
-    <button
-     follows="right|bottom"
-     height="23"
-     label="Send"
-     layout="topleft"
-     left_delta="-106"
-     name="send_btn"
-     top_delta="0"
-     width="100">
-      <button.commit_callback
-       function="Postcard.Send" />
-    </button>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_postcard_settings.xml b/indra/newview/skins/default/xui/en/panel_postcard_settings.xml
index 3f67a48b14ff3f848bedd91fd330cab8f9373949..525149d7eee40a3168a2c290655c57f2abe70e7b 100755
--- a/indra/newview/skins/default/xui/en/panel_postcard_settings.xml
+++ b/indra/newview/skins/default/xui/en/panel_postcard_settings.xml
@@ -9,10 +9,10 @@
      height="23"
      label="Resolution"
      layout="topleft"
-     left="10"
+     left="5"
      name="postcard_size_combo"
-     right="-10"
-     top_pad="10">
+     right="-3"
+     top_pad="5">
         <combo_box.item
          label="Current Window"
          name="CurrentWindow"
@@ -34,103 +34,55 @@
          name="Custom"
          value="[i-1,i-1]" />
     </combo_box>
-    <layout_stack
-     animate="false"
-     follows="all"
-     height="275"
-     layout="bottomleft"
-     name="postcard_image_params_ls"
-     left_delta="0"
-     orientation="vertical"
-     top_pad="10"
-     right="-10">
-        <layout_panel
-         follows="top|left|right"
-         height="60"
-         layout="topleft"
-         left="0"
-         name="postcard_image_size_lp"
-         auto_resize="false"
-         top="0"
-         right="-1"
-         visible="true">
-            <spinner
-             allow_text_entry="false"
-             decimal_digits="0"
-             follows="left|top"
-             height="20"
-             increment="32"
-             label="Width"
-             label_width="40"
-             layout="topleft"
-             left="10"
-             max_val="6016"
-             min_val="32"
-             name="postcard_snapshot_width"
-             top_pad="10"
-             width="95" />
-            <spinner
-             allow_text_entry="false"
-             decimal_digits="0"
-             follows="left|top"
-             height="20"
-             increment="32"
-             label="Height"
-             label_width="40"
-             layout="topleft"
-             left_pad="5"
-             max_val="6016"
-             min_val="32"
-             name="postcard_snapshot_height"
-             top_delta="0"
-             width="95" />
-            <check_box
-              height="10"
-             bottom_delta="20"
-             follows="left|top"
-             label="Constrain proportions"
-             layout="topleft"
-             left="10"
-             name="postcard_keep_aspect_check" />
-        </layout_panel>
-        <layout_panel
-         follows="top|left|right"
-         height="23"
-         layout="topleft"
-         left="0"
-         name="postcard_image_format_quality_lp"
-         auto_resize="true"
-         top="0"
-         right="-1"
-         visible="true">
-            <slider
-             decimal_digits="0"
-             follows="left|top"
-             height="15"
-             increment="1"
-             initial_value="75"
-             label="Image quality"
-             label_width="80"
-             layout="topleft"
-             left="0"
-             max_val="100"
-             name="image_quality_slider"
-             top_pad="7"
-             width="190" />
-            <text
-             type="string"
-             follows="left|top"
-             font="SansSerifSmall"
-             length="1"
-             height="14"
-             layout="topleft"
-             left_pad="-5"
-             halign="left"
-             name="image_quality_level"
-             top_delta="0"
-             width="60">
-               ([QLVL])
-            </text>
-        </layout_panel>
-    </layout_stack>
+   <spinner
+    allow_text_entry="false"
+    decimal_digits="0"
+    follows="left|top"
+    height="20"
+    increment="32"
+    label="Width x Height"
+    label_width="90"
+    layout="topleft"
+    left="5"
+    max_val="6016"
+    min_val="32"
+    name="postcard_snapshot_width"
+    top_pad="5"
+    width="144" />
+   <spinner
+    allow_text_entry="false"
+    decimal_digits="0"
+    follows="left|top"
+    height="20"
+    increment="32"
+    label=""
+    label_width="0"
+    layout="topleft"
+    left_pad="0"
+    max_val="6016"
+    min_val="32"
+    name="postcard_snapshot_height"
+    top_delta="0"
+    width="52" />
+   <check_box
+    top_pad="12"
+    follows="left|top"
+    label="Constrain proportions"
+    layout="topleft"
+    left="5"
+    name="postcard_keep_aspect_check" />
+   <slider
+   decimal_digits="0"
+   follows="left|top"
+   height="15"
+   increment="1"
+   initial_value="75"
+   label="Quality:"
+   label_width="45"
+   layout="topleft"
+   left="5"
+   max_val="100"
+   name="image_quality_slider"
+   top_pad="6"
+   width="190" />
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml
index 71d808fa4b22b0ac5145739dc3015488bbd59a6a..ea579c6dae579a6f2121c934319da8dc617affbc 100755
--- a/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml
@@ -12,12 +12,12 @@
      left="12"
      mouse_opaque="true"
      name="title_icon"
-     top="5"
+     top="6"
      width="18" />
     <text
      follows="top|left|right"
      font="SansSerifBold"
-     height="20"
+     height="14"
      layout="topleft"
      left_pad="12"
      length="1"
@@ -25,46 +25,28 @@
      right="-10"
      text_color="white"
      type="string"
-     top_delta="5">
-        Save to My Inventory
+     top_delta="3">
+        Inventory
     </text>
     <view_border 
      bevel_style="in"
      follows="left|top|right" 
      height="1"
-     left="10"
+     left="9"
      layout="topleft"
      name="hr"
-     right="-10"
+     right="-5"
      top_pad="5"
      />
-    <text
-     bottom="35"
-     follows="top|left|right"
-     font="SansSerif"
-     height="56"
-     layout="topleft"
-     left="12"
-     length="1"
-     name="hint_lbl"
-     top_pad="10"
-     type="string"
-     word_wrap="true">
-        Saving an image to your inventory costs L$[UPLOAD_COST]. To save your image as a texture select one of the square formats.
-    </text>
     <combo_box
      follows="top|left|right"
-     height="23"
+     height="20"
      label="Resolution"
      layout="topleft"
      left_delta="0"
      name="texture_size_combo"
-     right="-10"
-     top_pad="10">
-        <combo_box.item
-         label="Current Window"
-         name="CurrentWindow"
-         value="[i0,i0]" />
+     right="-5"
+     top_pad="5">
         <combo_box.item
          label="Small (128x128)"
          name="Small(128x128)"
@@ -88,61 +70,74 @@
      follows="left|top"
      height="20"
      increment="32"
-     label="Width"
-     label_width="40"
+     label="Width x Height"
+     label_width="90"
      layout="topleft"
      left="10"
      max_val="6016"
      min_val="32"
      name="inventory_snapshot_width"
-     top_pad="10"
-     width="95" />
+     top_pad="7"
+     width="144" />
     <spinner
      allow_text_entry="false"
      decimal_digits="0"
      follows="left|top"
      height="20"
      increment="32"
-     label="Height"
-     label_width="40"
+     label=""
+     label_width="0"
      layout="topleft"
-     left_pad="5"
+     left_pad="0"
      max_val="6016"
      min_val="32"
      name="inventory_snapshot_height"
      top_delta="0"
-     width="95" />
+     width="54" />
     <check_box
-     bottom_delta="20"
-     height="10"
+     top_pad="12"
      follows="left|top"
      label="Constrain proportions"
      layout="topleft"
      left="10"
      name="inventory_keep_aspect_check"
      visible="false" />
+    <text
+     follows="top|left"
+     font="SansSerif"
+     height="56"
+     layout="topleft"
+     left="10"
+     length="1"
+     name="hint_lbl"
+     top_pad="6"
+     width="200"
+     type="string"
+     word_wrap="true">
+        Saving an image to your inventory costs L$[UPLOAD_COST]. To save your image as a texture select one of the square formats.
+    </text>
     <button
      follows="right|bottom"
      height="23"
      label="Cancel"
      layout="topleft"
      name="cancel_btn"
-     right="-32"
-     top="350"
-     width="100">
+     right="-5"
+     top="337"
+     width="97">
       <button.commit_callback
        function="Inventory.Cancel" />
     </button>
     <button
-     follows="right|bottom"
+     follows="left|bottom"
      height="23"
      label="Save"
      layout="topleft"
-     left_delta="-106"
+     left="10"
      name="save_btn"
      top_delta="0"
-     width="100">
+     width="97">
       <button.commit_callback
        function="Inventory.Save" />
     </button>
-</panel>
+</panel>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_local.xml b/indra/newview/skins/default/xui/en/panel_snapshot_local.xml
index 781ab174031b942158a3d8708012983f2a2f8769..188c9f87078329a592101ba52d3b3f55b2b5ff23 100755
--- a/indra/newview/skins/default/xui/en/panel_snapshot_local.xml
+++ b/indra/newview/skins/default/xui/en/panel_snapshot_local.xml
@@ -12,12 +12,12 @@
      left="12"
      mouse_opaque="true"
      name="title_icon"
-     top="5"
+     top="7"
      width="18" />
     <text
      follows="top|left|right"
      font="SansSerifBold"
-     height="20"
+     height="14"
      layout="topleft"
      left_pad="12"
      length="1"
@@ -25,28 +25,27 @@
      right="-10"
      text_color="white"
      type="string"
-     top_delta="4">
-        Save to My Computer
+     top_delta="2">
+        Disk
     </text>
     <view_border 
      bevel_style="in"
      follows="left|top|right" 
      height="1"
-     left="10"
+     left="9"
      layout="topleft"
      name="hr"
-     right="-10"
-     top_pad="5"
-     />
+     right="-5"
+     top_pad="5"/>
     <combo_box
      follows="left|top|right"
-     height="23"
+     height="20"
      label="Resolution"
      layout="topleft"
      left_delta="0"
      name="local_size_combo"
-     right="-10"
-     top_pad="10">
+     right="-5"
+     top_pad="5">
         <combo_box.item
          label="Current Window"
          name="CurrentWindow"
@@ -80,149 +79,114 @@
          name="Custom"
          value="[i-1,i-1]" />
     </combo_box>
-    <layout_stack
-     animate="false"
-     follows="all"
-     height="275"
-     layout="bottomleft"
-     name="local_image_params_ls"
-     left_delta="0"
-     orientation="vertical"
-     top_pad="10"
-     right="-10">
-        <layout_panel
-         follows="top|left|right"
-         height="60"
-         layout="topleft"
-         left="0"
-         name="local_image_size_lp"
-         auto_resize="false"
-         top="0"
-         right="-1"
-         visible="true">
-            <spinner
-             allow_text_entry="false"
-             decimal_digits="0"
-             follows="left|top"
-             height="20"
-             increment="32"
-             label="Width"
-             label_width="40"
-             layout="topleft"
-             left="10"
-             max_val="6016"
-             min_val="32"
-             name="local_snapshot_width"
-             top_pad="10"
-             width="95" />
-            <spinner
-             allow_text_entry="false"
-             decimal_digits="0"
-             follows="left|top"
-             height="20"
-             increment="32"
-             label="Height"
-             label_width="40"
-             layout="topleft"
-             left_pad="5"
-             max_val="6016"
-             min_val="32"
-             name="local_snapshot_height"
-             top_delta="0"
-             width="95" />
-            <check_box
-             bottom_delta="20"
-             height="10"
-             follows="left|top"
-             label="Constrain proportions"
-             layout="topleft"
-             left="10"
-             name="local_keep_aspect_check" />
-        </layout_panel>
-        <layout_panel
-         follows="top|left|right"
-         height="23"
-         layout="topleft"
-         left="0"
-         name="local_image_format_quality_lp"
-         auto_resize="true"
-         top="0"
-         right="-1"
-         visible="true">
-            <combo_box
-             follows="left|top"
-             height="23"
-             label="Format"
-             layout="topleft"
-             left_delta="0"
-             name="local_format_combo"
-             top_pad="0"
-             width="120">
-                <combo_box.item
-                 label="PNG (Lossless)"
-                 name="PNG"
-                 value="PNG" />
-                <combo_box.item
-                 label="JPEG"
-                 name="JPEG"
-                 value="JPEG" />
-                <combo_box.item
-                 label="BMP (Lossless)"
-                 name="BMP"
-                 value="BMP" />
-            </combo_box>
-            <slider
-             decimal_digits="0"
-             follows="left|top"
-             height="15"
-             increment="1"
-             initial_value="75"
-             label="Image quality"
-             label_width="80"
-             layout="topleft"
-             left="10"
-             max_val="100"
-             name="image_quality_slider"
-             top_pad="7"
-             width="200" />
-            <text
-             type="string"
-             follows="left|top"
-             font="SansSerifSmall"
-             length="1"
-             height="14"
-             layout="topleft"
-             left_pad="-5"
-             halign="left"
-             name="image_quality_level"
-             top_delta="0"
-             width="60">
-               ([QLVL])
-            </text>
-        </layout_panel>
-    </layout_stack>
+    <spinner
+     allow_text_entry="false"
+     decimal_digits="0"
+     follows="left|top"
+     height="20"
+     increment="32"
+     label="Width x Height"
+     label_width="90"
+     layout="topleft"
+     left="10"
+     max_val="6016"
+     min_val="32"
+     name="local_snapshot_width"
+     top_pad="7"
+     width="144" />
+    <spinner
+     allow_text_entry="false"
+     decimal_digits="0"
+     follows="left|top"
+     height="20"
+     increment="32"
+     label=""
+     label_width="0"
+     layout="topleft"
+     left_pad="0"
+     max_val="6016"
+     min_val="32"
+     name="local_snapshot_height"
+     top_delta="0"
+     width="54" />
+    <check_box
+     top_pad="12"
+     follows="left|top"
+     label="Constrain proportions"
+     layout="topleft"
+     left="10"
+     name="local_keep_aspect_check" />
+    <text
+      type="string"
+      length="1"
+      follows="left|top"
+      height="13"
+      layout="topleft"
+      left="10"
+      name="local_format_label"
+      top_pad="7"
+      width="50">
+         Format:
+     </text>
+    <combo_box
+     follows="left|top|right"
+     height="20"
+     label="Format"
+     layout="topleft"
+     left="65"
+     right="-5"
+     name="local_format_combo"
+     top_delta="-3"
+     width="120">
+        <combo_box.item
+         label="PNG (Lossless)"
+         name="PNG"
+         value="PNG" />
+        <combo_box.item
+         label="JPEG"
+         name="JPEG"
+         value="JPEG" />
+        <combo_box.item
+         label="BMP (Lossless)"
+         name="BMP"
+         value="BMP" />
+    </combo_box>
+    <slider
+     decimal_digits="0"
+     follows="left|top"
+     height="15"
+     increment="1"
+     initial_value="75"
+     label="Quality:"
+     label_width="45"
+     layout="topleft"
+     left="10"
+     max_val="100"
+     name="image_quality_slider"
+     top_pad="6"
+     width="203" />
     <button
      follows="right|bottom"
      height="23"
      label="Cancel"
      layout="topleft"
      name="cancel_btn"
-     right="-32"
-     top="350"
-     width="100">
+     right="-5"
+     top="337"
+     width="97">
       <button.commit_callback
        function="Local.Cancel" />
     </button>
     <flyout_button
-     follows="right|bottom"
+     follows="left|bottom"
      height="23"
      label="Save"
      layout="topleft"
-     left_delta="-106"
+     left="10"
      name="save_btn"
      tool_tip="Save image to a file"
      top_delta="0"
-     width="100">
+     width="97">
         <flyout_button.item
          label="Save"
          name="save_item"
@@ -232,4 +196,4 @@
          name="saveas_item"
          value="save as" />
     </flyout_button>
-</panel>
+</panel>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_options.xml b/indra/newview/skins/default/xui/en/panel_snapshot_options.xml
index eff60f8228bcaaaa7026ead068999cddb0b1a7cd..265217ef605b3debeb9ce50f383714053ef1c1ed 100755
--- a/indra/newview/skins/default/xui/en/panel_snapshot_options.xml
+++ b/indra/newview/skins/default/xui/en/panel_snapshot_options.xml
@@ -4,117 +4,124 @@
  height="240"
  layout="topleft"
  name="panel_snapshot_options"
- width="490">
+ width="208">
+ <button
+   follows="left|top"
+   font="SansSerif"
+   halign="left"
+   height="22"
+   image_overlay="Snapshot_Download"
+   image_overlay_alignment="left"
+   image_top_pad="-0"
+   imgoverlay_label_space="10"
+   label="Save to Disk"
+   layout="topleft"
+   left="9"
+   name="save_to_computer_btn"
+   top_pad="9">
+    <button.commit_callback
+     function="Snapshot.SaveToComputer" />
+  </button>
   <button
-   follows="left|top|right"
+   follows="left|top"
    font="SansSerif"
    halign="left"
-   height="38"
-   image_overlay="Snapshot_Profile"
+   height="22"
+   image_overlay="Snapshot_Inventory"
    image_overlay_alignment="left"
-   image_top_pad="-2"
+   image_top_pad="-1"
    imgoverlay_label_space="10"
-   label="Post to My Profile Feed"
+   label="Save to Inventory (L$[AMOUNT])"
    layout="topleft"
    left_delta="0"
+   name="save_to_inventory_btn"
+   top_pad="5">
+    <button.commit_callback
+     function="Snapshot.SaveToInventory" />
+  </button>
+  <button
+   follows="left|top"
+   font="SansSerif"
+   halign="left"
+   height="22"
+   image_overlay="Snapshot_Profile"
+   image_overlay_alignment="left"
+   image_top_pad="-1"
+   imgoverlay_label_space="10"
+   label="Upload to Profile"
+   layout="topleft"
    name="save_to_profile_btn"
-   pad_left="10"
-   right="-10"
-   top_pad="10">
+   left_delta="0"
+   top_pad="5">
     <button.commit_callback
      function="Snapshot.SaveToProfile" />
   </button>
   <button
-   follows="left|top|right"
+   follows="left|top"
    font="SansSerif"
    halign="left"
-   height="38"
-   image_overlay="Snapshot_Email"
+   height="22"
+   image_overlay="Snapshot_Facebook"
    image_overlay_alignment="left"
-   image_top_pad="-2"
+   image_top_pad="0"
    imgoverlay_label_space="10"
-   label="Email"
+   label="Upload to Facebook"
    layout="topleft"
    left_delta="0"
-   name="save_to_email_btn"
-   pad_left="10"
-   right="-10"
-   top_pad="10">
+   name="send_to_facebook_btn"
+   top_pad="5">
     <button.commit_callback
-     function="Snapshot.SaveToEmail" />
+     function="Snapshot.SendToFacebook"/>
   </button>
   <button
-   follows="left|top|right"
+   follows="left|top"
    font="SansSerif"
    halign="left"
-   height="38"
-   image_overlay="Snapshot_Inventory"
+   height="22"
+   image_overlay="Command_Twitter_Icon"
    image_overlay_alignment="left"
-   image_top_pad="-2"
+   image_top_pad="0"
    imgoverlay_label_space="10"
-   label="Save to My Inventory (L$[AMOUNT])"
+   label="Upload to Twitter"
    layout="topleft"
    left_delta="0"
-   name="save_to_inventory_btn"
-   pad_left="10"
-   right="-10"
-   top_pad="10">
+   name="send_to_twitter_btn"
+   top_pad="5">
     <button.commit_callback
-     function="Snapshot.SaveToInventory" />
+     function="Snapshot.SendToTwitter"/>
   </button>
   <button
-   follows="left|top|right"
+   follows="left|top"
    font="SansSerif"
    halign="left"
-   height="38"
-   image_overlay="Snapshot_Download"
+   height="22"
+   image_overlay="Command_Flickr_Icon"
    image_overlay_alignment="left"
-   image_top_pad="-2"
+   image_top_pad="0"
    imgoverlay_label_space="10"
-   label="Save to My Computer"
+   label="Upload to Flickr"
    layout="topleft"
    left_delta="0"
-   name="save_to_computer_btn"
-   pad_left="10"
-   right="-10"
-   top_pad="10">
+   name="send_to_flickr_btn"
+   top_pad="5">
     <button.commit_callback
-     function="Snapshot.SaveToComputer" />
+     function="Snapshot.SendToFlickr"/>
+  </button>
+  <button
+   follows="left|top"
+   font="SansSerif"
+   halign="left"
+   height="22"
+   image_overlay="Snapshot_Email"
+   image_overlay_alignment="left"
+   image_top_pad="0"
+   imgoverlay_label_space="10"
+   label="Send via E-mail"
+   layout="topleft"
+   left_delta="0"
+   name="save_to_email_btn"
+   top_pad="5">
+    <button.commit_callback
+     function="Snapshot.SaveToEmail" />
   </button>
-  <text
-    font="SansSerif"
-    layout="topleft"
-    length="1"
-    follows="top|left"
-    height="16"
-    left="10"
-    name="send_to_facebook_textbox"
-    top_pad="10"
-    type="string">
-    Send to:  [secondlife:/// Facebook]
-  </text>
-  <text
-    font="SansSerif"
-    layout="topleft"
-    length="1"
-    follows="top|left"
-    height="16"
-    left="140"
-    name="send_to_twitter_textbox"
-    top_pad="-16"
-    type="string">
-    [secondlife:/// Twitter]
-  </text>
-  <text
-    font="SansSerif"
-    layout="topleft"
-    length="1"
-    follows="top|left"
-    height="16"
-    left="190"
-    name="send_to_flickr_textbox"
-    top_pad="-16"
-    type="string">
-    [secondlife:/// Flickr]
-  </text>
-</panel>
+</panel>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/en/panel_snapshot_postcard.xml
index ebba292a935f0f1c6e906319690cdc5fd736b780..975b08be053713600d025efb189e8d6467622826 100755
--- a/indra/newview/skins/default/xui/en/panel_snapshot_postcard.xml
+++ b/indra/newview/skins/default/xui/en/panel_snapshot_postcard.xml
@@ -24,12 +24,12 @@
      left="12"
      mouse_opaque="true"
      name="title_icon"
-     top="5"
+     top="7"
      width="18" />
     <text
      follows="top|left|right"
      font="SansSerifBold"
-     height="20"
+     height="14"
      layout="topleft"
      left_pad="12"
      length="1"
@@ -37,63 +37,67 @@
      right="-10"
      text_color="white"
      type="string"
-     top_delta="3">
-        Email
+     top_delta="2">
+        E-mail
     </text>
-    <button
-     follows="right|top"
-     height="23"
-     is_toggle="true"
-     label="Message"
-     layout="topleft"
-     name="message_btn"
-     right="-82"
-     top_delta="-7"
-     width="70">
-      <button.commit_callback
-       function="Postcard.Message" />
-    </button>
-    <button
-     follows="right|top"
-     height="23"
-     is_toggle="true"
-     label="Settings"
-     layout="topleft"
-     name="settings_btn"
-     top_delta="0"
-     right="-10"
-     width="70">
-      <button.commit_callback
-       function="Postcard.Settings" />
-    </button>
     <view_border 
      bevel_style="in"
      follows="left|top|right" 
      height="1"
-     left="10"
+     left="9"
      layout="topleft"
      name="hr"
-     right="-10"
+     right="-5"
      top_pad="5"
      />
-    <panel_container
+    <tab_container
+     name="postcard_tabs"
+     tab_group="1"
+     tab_min_width="97"
+     tab_height="21"
+     tab_position="top"
+     top_pad="7"
+     left="5"
+     right="-2"
+     height="319"
      follows="all"
-     height="340"
-     layout="topleft"
-     left="0"
-     name="postcard_panel_container"
-     default_panel_name="panel_postcard_message"
-     top_pad="10"
-     width="490">
+     halign="center"
+     use_highlighting_on_hover="true">
       <panel
        follows="all"
        layout="topleft"
+       label="Message"
        name="panel_postcard_message"
        filename="panel_postcard_message.xml" />
       <panel
        follows="all"
        layout="topleft"
+       label="Settings"
        name="panel_postcard_settings"
        filename="panel_postcard_settings.xml" />
-    </panel_container>
-</panel>
+    </tab_container>
+    <button
+     follows="right|bottom"
+     height="23"
+     label="Cancel"
+     layout="topleft"
+     name="cancel_btn"
+     right="-6"
+     bottom="-20"
+     width="97">
+      <button.commit_callback
+       function="Postcard.Cancel" />
+    </button>
+    <button
+     follows="left|bottom"
+     height="23"
+     label="Send"
+     layout="topleft"
+     left="10"
+     name="send_btn"
+     top_delta="0"
+     width="97">
+      <button.commit_callback
+       function="Postcard.Send" />
+    </button>
+</panel>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml
index 0dd357aa1a747c9711c800ea5f45c9117ff32039..d86cb92981040bc1ad28386c9b31b2b3fcdcb976 100755
--- a/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml
@@ -12,12 +12,12 @@
      left="12"
      mouse_opaque="true"
      name="title_icon"
-     top="5"
+     top="7"
      width="18" />
     <text
      follows="top|left|right"
      font="SansSerifBold"
-     height="20"
+     height="14"
      layout="topleft"
      left_pad="12"
      length="1"
@@ -26,27 +26,28 @@
      text_color="white"
      type="string"
      top_delta="4">
-        Post to My Profile Feed
+        Profile
     </text>
     <view_border 
      bevel_style="in"
      follows="left|top|right" 
      height="1"
-     left="10"
+     left="9"
      layout="topleft"
      name="hr"
-     right="-10"
+     right="-5"
      top_pad="5"
      />
     <combo_box
-     follows="left|top"
+     follows="left|top|right"
      height="23"
      label="Resolution"
      layout="topleft"
-     left_delta="0"
+     left="10"
+     right="-5"
      name="profile_size_combo"
-     top_pad="10"
-     width="250">
+     top_pad="5"
+     width="180">
         <combo_box.item
          label="Current Window"
          name="CurrentWindow"
@@ -68,132 +69,99 @@
          name="Custom"
          value="[i-1,i-1]" />
     </combo_box>
-    <layout_stack
-     animate="false"
-     follows="all"
-     height="270"
-     layout="bottomleft"
-     name="profile_image_params_ls"
+    <spinner
+     allow_text_entry="false"
+     decimal_digits="0"
+     follows="left|top"
+     height="20"
+     increment="32"
+     label="Width x Height"
+     label_width="90"
+     layout="topleft"
+     left="10"
+     max_val="6016"
+     min_val="32"
+     name="profile_snapshot_width"
+     top_pad="7"
+     width="144" />
+    <spinner
+     allow_text_entry="false"
+     decimal_digits="0"
+     follows="left|top"
+     height="20"
+     increment="32"
+     label=""
+     label_width="0"
+     layout="topleft"
+     left_pad="0"
+     max_val="6016"
+     min_val="32"
+     name="profile_snapshot_height"
+     top_delta="0"
+     width="54" />
+    <check_box
+     top_pad="12"
+     label="Constrain proportions"
+     layout="topleft"
+     left="10"
+     name="profile_keep_aspect_check" />
+    <text
+     length="1"
+     follows="top|left|right"
+     height="16"
+     layout="topleft"
+     left="12"
+     name="caption_label"
+     right="-10"
+     top_pad="4"
+     type="string">
+        Caption:
+    </text>
+    <text_editor
+     follows="top|left|right"
+     height="35"
+     layout="topleft"
+     left="10"
+     right="-5"
+     length="1"
+     max_length="700"
+     name="caption"
+     width="200"
+     top_pad="2"
+     type="string"
+     word_wrap="true">
+    </text_editor>
+    <check_box
+     follows="left|top"
+     initial_value="true"
+     label="Include location"
+     layout="topleft"
      left_delta="0"
-     orientation="vertical"
-     top_pad="10"
-     right="-10">
-        <layout_panel
-         follows="top|left|right"
-         height="55"
-         layout="topleft"
-         left="0"
-         name="profile_image_size_lp"
-         auto_resize="false"
-         top="0"
-         right="-1"
-         visible="true">
-            <spinner
-             allow_text_entry="false"
-             decimal_digits="0"
-             follows="left|top"
-             height="20"
-             increment="32"
-             label="Width"
-             label_width="40"
-             layout="topleft"
-             left="10"
-             max_val="6016"
-             min_val="32"
-             name="profile_snapshot_width"
-             top_pad="10"
-             width="95" />
-            <spinner
-             allow_text_entry="false"
-             decimal_digits="0"
-             follows="left|top"
-             height="20"
-             increment="32"
-             label="Height"
-             label_width="40"
-             layout="topleft"
-             left_pad="5"
-             max_val="6016"
-             min_val="32"
-             name="profile_snapshot_height"
-             top_delta="0"
-             width="95" />
-            <check_box
-              height="10"
-             bottom_delta="20"
-             label="Constrain proportions"
-             layout="topleft"
-             left="10"
-             name="profile_keep_aspect_check" />
-        </layout_panel>
-        <layout_panel
-         follows="top|left|right"
-         height="200"
-         layout="topleft"
-         left="0"
-         name="profile_image_metadata_lp"
-         auto_resize="true"
-         top="0"
-         right="-1"
-         visible="true">
-            <text
-             length="1"
-             follows="top|left|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="0"
-             name="caption_label"
-             right="-10"
-             top_pad="0"
-             type="string">
-                Caption:
-            </text>
-            <text_editor
-             follows="all"
-             height="155"
-             layout="topleft"
-             left_delta="0"
-             length="1"
-             max_length="700"
-             name="caption"
-             right="-10"
-             top_pad="5"
-             type="string"
-             word_wrap="true">
-            </text_editor>
-            <check_box
-             follows="left|bottom"
-             initial_value="true"
-             label="Include location"
-             layout="topleft"
-             left_delta="0"
-             name="add_location_cb"
-             top_pad="15" />
-        </layout_panel>
-    </layout_stack>
+     height="18"
+     name="add_location_cb"
+     top_pad="3" />
     <button
      follows="right|bottom"
      height="23"
      label="Cancel"
      layout="topleft"
      name="cancel_btn"
-     right="-32"
-     top="350"
-     width="100">
+     right="-5"
+     top="337"
+     width="97">
       <button.commit_callback
        function="PostToProfile.Cancel" />
     </button>
     <button
-     follows="right|bottom"
+     follows="left|bottom"
      height="23"
      label="Post"
      layout="topleft"
-     left_delta="-106"
+     left="10"
      name="post_btn"
      top_delta="0"
-     width="100">
+     width="97">
       <button.commit_callback
        function="PostToProfile.Send" />
     </button>
-</panel>
+</panel>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_tools_texture.xml b/indra/newview/skins/default/xui/en/panel_tools_texture.xml
index 426c0c491554501f57c83ea423603a4605eb8dbc..cb6b2fafd893a691e6c4e1a7e5eb8df9fd06d3fb 100644
--- a/indra/newview/skins/default/xui/en/panel_tools_texture.xml
+++ b/indra/newview/skins/default/xui/en/panel_tools_texture.xml
@@ -36,8 +36,9 @@
             <color_swatch
              can_apply_immediately="true"
              follows="left|top"
-             height="45"
+             height="22"
              label=""
+             label_height="0"
              layout="topleft"
              left="10"
              name="colorswatch"
diff --git a/indra/newview/skins/default/xui/en/panel_twitter_account.xml b/indra/newview/skins/default/xui/en/panel_twitter_account.xml
index ee4f6396e1068cfdb24336385bda4439b165820f..b9049a0bba7214f585e7f57f609f0ef1c2bc1ace 100644
--- a/indra/newview/skins/default/xui/en/panel_twitter_account.xml
+++ b/indra/newview/skins/default/xui/en/panel_twitter_account.xml
@@ -1,6 +1,6 @@
 <panel
 	 height="400"
-	 width="304"
+	 width="272"
 	 layout="topleft"
    name="panel_twitter_account">
   <string
@@ -15,9 +15,9 @@
    follows="top|left"
    font="SansSerif"
    height="16"
-   left="9"
+   left="10"
    name="account_caption_label"
-   top="21"
+   top="5"
    type="string">
     Not connected to Twitter.
   </text>
@@ -28,19 +28,23 @@
    follows="top|left"
    font="SansSerif"
    height="16"
-   left="9"
+   left="10"
    name="account_name_label"
    parse_urls="true"
    type="string"/>
   <panel
     layout="topleft"
+	follows="top|left"
     name="panel_buttons"
     height="345"
-    left="9">
+	top_pad="3"
+    left="0">
     <button
      layout="topleft"
-     follows="left|top"
+     follows="left|top|right"
      top_pad="9"
+	 left="10"
+	 right="-10"
      visible="true"
      height="23"
      label="Connect..."
@@ -51,8 +55,10 @@
 
     <button
      layout="topleft"
-     follows="left|top"
+     follows="left|top|right"
      top_delta="0"
+	 left="10"
+	 right="-10"
      height="23"
      label="Disconnect"
      name="disconnect_btn"
@@ -65,9 +71,9 @@
       length="1"
       follows="top|left"
       height="16"
-      left="0"
+      left="10"
       name="account_learn_more_label"
-      top_pad="20"
+      top_pad="5"
       type="string">
       [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Twitter/ta-p/2435453 Learn about posting to Twitter]
     </text>
diff --git a/indra/newview/skins/default/xui/en/panel_twitter_photo.xml b/indra/newview/skins/default/xui/en/panel_twitter_photo.xml
index c2be56da2174e3cd32de376d844b583c370db709..9a460ceead7e6d9d09ca75413c824e7a682961ed 100644
--- a/indra/newview/skins/default/xui/en/panel_twitter_photo.xml
+++ b/indra/newview/skins/default/xui/en/panel_twitter_photo.xml
@@ -3,31 +3,22 @@
       width="304"
       layout="topleft"
       name="panel_twitter_photo">
-      <layout_stack
-	   layout="topleft"
-       border_size="0"
-       height="412"
-       follows="all"
-       orientation="vertical"
-       name="stack_photo"
-       top="8">
-        <layout_panel
-         name="text_panel"
-         height="160">
           <text
            length="1"
+		   layout="topleft"
            follows="top|left|right"
            font="SansSerif"
            height="16"
-           left="9"
+           left="10"
            name="status_label"
-           top="3"
+           top="5"
            type="string">
             What's happening?
           </text>
           <text
            length="1"
            follows="top|left"
+		   layout="topleft"
            font="SansSerif"
            text_color="EmphasisColor"
            halign="right"
@@ -35,15 +26,16 @@
            width="30"
            left="227"
            name="status_counter_label"
-           top="3"
+           top="5"
            type="string">
             140
           </text>
           <text_editor
            follows="left|top"
+		   layout="topleft"
            height="87"
            width="250"
-           left="9"
+           left="10"
            length="1"
            max_length="140"
            name="photo_status"
@@ -52,33 +44,32 @@
           </text_editor>
           <check_box
            follows="left|top"
+		   layout="topleft"
            initial_value="true"
            label="Include SL location"
            name="add_location_cb"
-            left="9"
+            left="10"
             height="16"
-           top_pad="10"/>
+           top_pad="8"/>
           <check_box
            follows="left|top"
+		   layout="topleft"
            initial_value="true"
            label="Include a photo"
            name="add_photo_cb"
-            left="9"
+            left="10"
             height="16"
-           top_pad="10"/>
-        </layout_panel>
-          <layout_panel
-           name="snapshot_panel"
-           height="227">
+           top_pad="1"/>
             <combo_box
              control_name="TwitterPhotoResolution"
              follows="left|top"
-             top="6"
-             left="9"
+			 layout="topleft"
+             top_pad="5"
+             left="10"
              name="resolution_combobox"
              tool_tip="Image resolution"
              height="21"
-             width="135">
+             width="124">
               <combo_box.item
                label="Current Window"
                name="CurrentWindow"
@@ -99,61 +90,76 @@
               <combo_box
                   control_name="TwitterPhotoFilters"
                   follows="right|top"
+				  layout="topleft"
                   name="filters_combobox"
                   tool_tip="Image filters"
-                  top="6"
-                  left="165"
+                  top_delta="0"
+                  right="-10"
                   height="21"
-                  width="135">
+                  width="124">
                   <combo_box.item
                   label="No Filter"
                   name="NoFilter"
                   value="NoFilter" />
               </combo_box>
             <panel
+				layout="topleft"
                 height="150"
                 width="250"
                 visible="true"
                 name="thumbnail_placeholder"
-                top="33"
-                follows="left|top"
-                left="9">
+                top_pad="5"
+				right="-10"
+                follows="left|top|right"
+                left="10">
             </panel>
-            <button
-             follows="left|top"
-             height="23"
-             label="Refresh"
-             left="9"
-             top_pad="5"
-             name="new_snapshot_btn"
-             tool_tip="Click to refresh"
-             visible="true"
-             width="100" >
-             <button.commit_callback
-               function="SocialSharing.RefreshPhoto" />
-            </button>
-            <text
+			<text
                 follows="left|top"
+				layout="topleft"
                 font="SansSerif"
                 text_color="EmphasisColor"
                 height="14"
-                top_pad="-19"
-                left_pad="-30"
+                top_pad="2"
+                left="10"
                 length="1"
                 halign="center"
                 name="working_lbl"
                 translate="false"
                 type="string"
                 visible="true"
-                width="150">
+                width="251">
                 Refreshing...
             </text>
+			<view_border 
+			 bevel_style="in"
+			 follows="left|top"
+			 layout="topleft"
+			 height="1"
+			 left="10"
+			 name="refresh_border"
+			 width="250"
+			 top_pad="0"/>
+            <button
+             follows="left|top"
+			 layout="topleft"
+             height="23"
+             label="Refresh"
+             left="10"
+             top_pad="5"
+             name="new_snapshot_btn"
+             tool_tip="Click to refresh"
+             visible="true"
+             width="100" >
+             <button.commit_callback
+               function="SocialSharing.RefreshPhoto" />
+            </button>
               <button
                   follows="right|top"
+				  layout="topleft"
                   height="23"
                   label="Preview"
-                  left="200"
-                  top_pad="-19"
+                  right="-10"
+                  top_delta="0"
                   name="big_preview_btn"
                   tool_tip="Click to toggle preview"
                   is_toggle="true"
@@ -162,14 +168,11 @@
                   <button.commit_callback
                   function="SocialSharing.BigPreview" />
               </button>
-        </layout_panel>
-        <layout_panel
-          name="photo_button_panel"
-          height="25">
           <button
            follows="left|top"
-           top="0"
-           left="9"
+		   layout="topleft"
+           top_pad="3"
+           left="10"
            height="23"
            label="Tweet"
            name="post_photo_btn"
@@ -178,16 +181,15 @@
              function="SocialSharing.SendPhoto" />
           </button>
           <button
-               follows="left|top"
+               follows="right|top"
+			   layout="topleft"
                height="23"
                label="Cancel"
                name="cancel_photo_btn"
-               left_pad="15"
+			   right="-10"
                top_delta="0"
                width="100">
             <button.commit_callback
              function="SocialSharing.Cancel" />
           </button>          
-        </layout_panel>        
-      </layout_stack>
     </panel>
diff --git a/indra/newview/skins/default/xui/en/teleport_strings.xml b/indra/newview/skins/default/xui/en/teleport_strings.xml
index fdf41991cd56f61c244a818459d8d3bfef7e6c8c..5a9a16d3448d91d8102e3bf421242a6d5d21a095 100755
--- a/indra/newview/skins/default/xui/en/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/en/teleport_strings.xml
@@ -48,7 +48,10 @@ Go to &apos;Welcome Island Public&apos; to repeat the tutorial.
     <message name="MustGetAgeRegion">
       You must be age 18 or over to enter this region.
     </message>
-	</message_set>
+    <message name="RegionTPSpecialUsageBlocked">
+      Unable to enter region. '[REGION_NAME]' is a Skill Gaming Region, and you must meet certain criteria in order to enter. For details, please review the [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life Skill Gaming FAQ].
+    </message>
+  </message_set>
 	<message_set name="progress">
 		<message name="sending_dest">
 			Sending to destination.
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index f079f31c81b0c20e674123faa6ec086848c96b95..7544fe1c414cea6346175eef40a0b05747e45ada 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -798,15 +798,42 @@ def path_optional(src, dst):
                     for libfile in dylibs:
                         symlinkf(os.path.join(os.pardir, os.pardir, os.pardir, libfile),
                                  os.path.join(resource_path, libfile))
-
-                # plugins
+                # SLPlugin.app/Contents/Resources gets those Qt4 libraries it needs.
+                if self.prefix(src="", dst="SLPlugin.app/Contents/Resources"):
+                    for libfile in ('libQtCore.4.dylib',
+                                    'libQtCore.4.7.1.dylib',
+                                    'libQtGui.4.dylib',
+                                    'libQtGui.4.7.1.dylib',
+                                    'libQtNetwork.4.dylib',
+                                    'libQtNetwork.4.7.1.dylib',
+                                    'libQtOpenGL.4.dylib',
+                                    'libQtOpenGL.4.7.1.dylib',
+                                    'libQtSvg.4.dylib',
+                                    'libQtSvg.4.7.1.dylib',
+                                    'libQtWebKit.4.dylib',
+                                    'libQtWebKit.4.7.1.dylib',
+                                    'libQtXml.4.dylib',
+                                    'libQtXml.4.7.1.dylib'):
+                        self.path2basename("../packages/lib/release", libfile)
+                    self.end_prefix("SLPlugin.app/Contents/Resources")
+
+                # Qt4 codecs go to llplugin.  Not certain why but this is the first
+                # location probed according to dtruss so we'll go with that.
+                if self.prefix(src="../packages/plugins/codecs/", dst="llplugin/codecs"):
+                    self.path("libq*.dylib")
+                    self.end_prefix("llplugin/codecs")
+
+                # Similarly for imageformats.
+                if self.prefix(src="../packages/plugins/imageformats/", dst="llplugin/imageformats"):
+                    self.path("libq*.dylib")
+                    self.end_prefix("llplugin/imageformats")
+
+                # SLPlugin plugins proper
                 if self.prefix(src="", dst="llplugin"):
                     self.path2basename("../media_plugins/quicktime/" + self.args['configuration'],
                                        "media_plugin_quicktime.dylib")
                     self.path2basename("../media_plugins/webkit/" + self.args['configuration'],
                                        "media_plugin_webkit.dylib")
-                    self.path2basename("../packages/lib/release", "libllqtwebkit.dylib")
-
                     self.end_prefix("llplugin")
 
                 self.end_prefix("Resources")
@@ -1011,6 +1038,7 @@ def construct(self):
             self.path("../media_plugins/gstreamer010/libmedia_plugin_gstreamer010.so", "libmedia_plugin_gstreamer.so")
             self.end_prefix("bin/llplugin")
 
+        # llcommon
         if not self.path("../llcommon/libllcommon.so", "lib/libllcommon.so"):
             print "Skipping llcommon.so (assuming llcommon was linked statically)"
 
@@ -1076,20 +1104,9 @@ def construct(self):
             self.path("libaprutil-1.so")
             self.path("libaprutil-1.so.0")
             self.path("libaprutil-1.so.0.4.1")
-            self.path("libboost_context-mt.so.*")
-            self.path("libboost_filesystem-mt.so.*")
-            self.path("libboost_program_options-mt.so.*")
-            self.path("libboost_regex-mt.so.*")
-            self.path("libboost_signals-mt.so.*")
-            self.path("libboost_system-mt.so.*")
-            self.path("libboost_thread-mt.so.*")
-            self.path("libcollada14dom.so")
             self.path("libdb*.so")
-            self.path("libcrypto.so.*")
             self.path("libexpat.so.*")
-            self.path("libssl.so.1.0.0")
             self.path("libGLOD.so")
-            self.path("libminizip.so")
             self.path("libuuid.so*")
             self.path("libSDL-1.2.so.*")
             self.path("libdirectfb-1.*.so.*")
@@ -1121,6 +1138,10 @@ def construct(self):
             # previous call did, without having to explicitly state the
             # version number.
             self.path("libfontconfig.so.*.*")
+
+            # Include libfreetype.so. but have it work as libfontconfig does.
+            self.path("libfreetype.so.*.*")
+
             try:
                 self.path("libtcmalloc.so*") #formerly called google perf tools
                 pass
@@ -1129,26 +1150,55 @@ def construct(self):
                 pass
 
             try:
-                    self.path("libfmodex-*.so")
-                    self.path("libfmodex.so")
-                    pass
+                self.path("libfmodex-*.so")
+                self.path("libfmodex.so")
+                pass
             except:
-                    print "Skipping libfmodex.so - not found"
-                    pass
+                print "Skipping libfmodex.so - not found"
+                pass
 
             self.end_prefix("lib")
 
             # Vivox runtimes
             if self.prefix(src="../packages/lib/release", dst="bin"):
-                    self.path("SLVoice")
-                    self.end_prefix()
+                self.path("SLVoice")
+                self.end_prefix()
+            if self.prefix(src="../packages/lib/release", dst="lib"):
+                self.path("libortp.so")
+                self.path("libsndfile.so.1")
+                #self.path("libvivoxoal.so.1") # no - we'll re-use the viewer's own OpenAL lib
+                self.path("libvivoxsdk.so")
+                self.path("libvivoxplatform.so")
+                self.end_prefix("lib")
+
+            # plugin runtime
             if self.prefix(src="../packages/lib/release", dst="lib"):
-                    self.path("libortp.so")
-                    self.path("libsndfile.so.1")
-                    #self.path("libvivoxoal.so.1") # no - we'll re-use the viewer's own OpenAL lib
-                    self.path("libvivoxsdk.so")
-                    self.path("libvivoxplatform.so")
-                    self.end_prefix("lib")
+                self.path("libQtCore.so*")
+                self.path("libQtGui.so*")
+                self.path("libQtNetwork.so*")
+                self.path("libQtOpenGL.so*")
+                self.path("libQtSvg.so*")
+                self.path("libQtWebKit.so*")
+                self.path("libQtXml.so*")
+                self.end_prefix("lib")
+
+            # For WebKit/Qt plugin runtimes (image format plugins)
+            if self.prefix(src="../packages/plugins/imageformats", dst="bin/llplugin/imageformats"):
+                self.path("libqgif.so")
+                self.path("libqico.so")
+                self.path("libqjpeg.so")
+                self.path("libqmng.so")
+                self.path("libqsvg.so")
+                self.path("libqtiff.so")
+                self.end_prefix("bin/llplugin/imageformats")
+
+            # For WebKit/Qt plugin runtimes (codec/character encoding plugins)
+            if self.prefix(src="../packages/plugins/codecs", dst="bin/llplugin/codecs"):
+                self.path("libqcncodecs.so")
+                self.path("libqjpcodecs.so")
+                self.path("libqkrcodecs.so")
+                self.path("libqtwcodecs.so")
+                self.end_prefix("bin/llplugin/codecs")
 
             self.strip_binaries()
 
diff --git a/indra/test_apps/llfbconnecttest/CMakeLists.txt b/indra/test_apps/llfbconnecttest/CMakeLists.txt
index f56329a0101cc545cab7de4b1a0e66901049e7d9..512bf202ae69d5f0435694de64b559440e887e73 100644
--- a/indra/test_apps/llfbconnecttest/CMakeLists.txt
+++ b/indra/test_apps/llfbconnecttest/CMakeLists.txt
@@ -122,32 +122,24 @@ add_custom_command(TARGET llfbconnecttest POST_BUILD
 )
 
 
-if (DARWIN OR WINDOWS)
-  get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION)
-  add_custom_command(TARGET llfbconnecttest POST_BUILD
-    COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_WEBKIT_PLUGIN}  ${PLUGINS_DESTINATION_DIR}
-    DEPENDS ${BUILT_WEBKIT_PLUGIN}
-  )
-  
-  # copy over bookmarks file if llfbconnecttest gets built
-  get_target_property(BUILT_LLFBCONNECTTEST llfbconnecttest LOCATION)
-  add_custom_command(TARGET llfbconnecttest POST_BUILD
-    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${CMAKE_CURRENT_BINARY_DIR}/
-    DEPENDS ${BUILT_LLFBCONNECTTEST}
-  )
-  # also copy it to the same place as SLPlugin, which is what the mac wants...
-  add_custom_command(TARGET llfbconnecttest POST_BUILD
-    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${PLUGINS_DESTINATION_DIR}
-    DEPENDS ${BUILT_LLFBCONNECTTEST}
-  )
-endif (DARWIN OR WINDOWS)
+get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION)
+add_custom_command(TARGET llfbconnecttest POST_BUILD
+  COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_WEBKIT_PLUGIN}  ${PLUGINS_DESTINATION_DIR}
+  DEPENDS ${BUILT_WEBKIT_PLUGIN}
+)
 
-if (DARWIN)
-  add_custom_command(TARGET llfbconnecttest POST_BUILD
-    COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${PLUGINS_DESTINATION_DIR}
-    DEPENDS ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib
-  )
-endif (DARWIN)
+# copy over bookmarks file if llfbconnecttest gets built
+get_target_property(BUILT_LLFBCONNECTTEST llfbconnecttest LOCATION)
+add_custom_command(TARGET llfbconnecttest POST_BUILD
+  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${CMAKE_CURRENT_BINARY_DIR}/
+  DEPENDS ${BUILT_LLFBCONNECTTEST}
+)
+
+# also copy it to the same place as SLPlugin, which is what the mac wants...
+add_custom_command(TARGET llfbconnecttest POST_BUILD
+  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${PLUGINS_DESTINATION_DIR}
+  DEPENDS ${BUILT_LLFBCONNECTTEST}
+)
 
 if(WINDOWS)
   #********************
@@ -301,4 +293,80 @@ if(WINDOWS)
 
 endif(WINDOWS)
 
+if (DARWIN)
+  set(fbconnecttest_release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
+  set(fbconnecttest_release_files
+    libexception_handler.dylib
+    libaprutil-1.0.dylib
+    libapr-1.0.dylib
+    libexpat.1.5.2.dylib
+    libQtCore.4.7.1.dylib
+    libQtCore.4.dylib
+    libQtGui.4.7.1.dylib
+    libQtGui.4.dylib
+    libQtNetwork.4.7.1.dylib
+    libQtNetwork.4.dylib
+    libQtOpenGL.4.7.1.dylib
+    libQtOpenGL.4.dylib
+    libQtWebKit.4.7.1.dylib
+    libQtWebKit.4.dylib
+    libQtSvg.4.7.1.dylib
+    libQtSvg.4.dylib
+    libQtXml.4.7.1.dylib
+    libQtXml.4.dylib
+    )
+  copy_if_different(
+    ${fbconnecttest_release_src_dir}
+    "${PLUGINS_DESTINATION_DIR}"
+    out_targets
+    ${fbconnecttest_release_files}
+    )
+  set(fbconnect_test_targets ${fbconnect_test_targets} ${out_targets})
+
+  # Release & ReleaseDebInfo config runtime files required for the FB connect test (Qt image format plugins)
+  set(fbconnecttest_release_src_dir "${ARCH_PREBUILT_DIRS_PLUGINS}/imageformats")
+  set(fbconnecttest_release_files
+    libqgif.dylib
+    libqico.dylib
+    libqjpeg.dylib
+    libqmng.dylib
+    libqsvg.dylib
+    libqtiff.dylib
+    )
+  copy_if_different(
+    ${fbconnecttest_release_src_dir}
+    "${PLUGINS_DESTINATION_DIR}/imageformats"
+    out_targets
+    ${fbconnecttest_release_files}
+    )
+  set(fbconnect_test_targets ${fbconnect_test_targets} ${out_targets})
+
+  # Release & ReleaseDebInfo config runtime files required for the FB connect test (Qt codec plugins)
+  set(fbconnecttest_release_src_dir "${ARCH_PREBUILT_DIRS_PLUGINS}/codecs")
+  set(fbconnecttest_release_files
+    libqcncodecs.dylib
+    libqjpcodecs.dylib
+    libqkrcodecs.dylib
+    libqtwcodecs.dylib
+    )
+  copy_if_different(
+    ${fbconnecttest_release_src_dir}
+    "${PLUGINS_DESTINATION_DIR}/codecs"
+    out_targets
+    ${fbconnecttest_release_files}
+    )
+  set(fbconnect_test_targets ${fbconnect_test_targets} ${out_targets})
+
+  add_custom_target(copy_fbconnecttest_libs ALL
+    DEPENDS 
+    ${fbconnect_test_targets}
+    )
+
+  add_dependencies(llfbconnecttest copy_fbconnecttest_libs)
+endif (DARWIN)
+
+if (LINUX)
+
+endif (LINUX)
+
 ll_deploy_sharedlibs_command(llfbconnecttest) 
diff --git a/indra/test_apps/llfbconnecttest/README.Linden b/indra/test_apps/llfbconnecttest/README.Linden
new file mode 100644
index 0000000000000000000000000000000000000000..7488ce680a33fe349cf559c97e2ed357ded0909a
--- /dev/null
+++ b/indra/test_apps/llfbconnecttest/README.Linden
@@ -0,0 +1,20 @@
+
+1.  Description
+
+    Exercises SLPlugin.  Specific functions and goals aren't clear
+    from the source.
+
+2.  Running
+
+  2.1  Mac
+
+    Make certain '.' is included in PATH.  E.g.:
+
+       PATH=.:"$PATH" open build-darwin-i386/test_apps/llfbconnecttest/RelWithDebInfo/llfbconnecttest.app
+
+    Otherwise the program won't find SLPlugin and will timeout and
+    fail after 30 seconds and give you little information as to why.
+
+    Running 'dtruss' on plugin test applications will give you a great
+    deal of insight into why they aren't activating.
+
diff --git a/indra/test_apps/llplugintest/CMakeLists.txt b/indra/test_apps/llplugintest/CMakeLists.txt
index 8179be66f51ce194e1433c6735391a5af1ef68ee..9d44563e265726a1c8bc52707a77de2bd78faecb 100755
--- a/indra/test_apps/llplugintest/CMakeLists.txt
+++ b/indra/test_apps/llplugintest/CMakeLists.txt
@@ -346,44 +346,44 @@ add_custom_command(TARGET llmediaplugintest POST_BUILD
   DEPENDS ${BUILT_LLCOMMON}
 )
 
+get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION)
+add_custom_command(TARGET llmediaplugintest POST_BUILD
+  COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_WEBKIT_PLUGIN}  ${PLUGINS_DESTINATION_DIR}
+  DEPENDS ${BUILT_WEBKIT_PLUGIN}
+)
 
 if (DARWIN OR WINDOWS)
-  get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION)
-  add_custom_command(TARGET llmediaplugintest POST_BUILD
-    COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_WEBKIT_PLUGIN}  ${PLUGINS_DESTINATION_DIR}
-    DEPENDS ${BUILT_WEBKIT_PLUGIN}
-  )
-
   get_target_property(BUILT_QUICKTIME_PLUGIN media_plugin_quicktime LOCATION)
   add_custom_command(TARGET llmediaplugintest POST_BUILD
     COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_QUICKTIME_PLUGIN}  ${PLUGINS_DESTINATION_DIR}
     DEPENDS ${BUILT_QUICKTIME_PLUGIN}
   )
-  
-  get_target_property(BUILT_EXAMPLE_PLUGIN media_plugin_example LOCATION)
-  add_custom_command(TARGET llmediaplugintest POST_BUILD
-    COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_EXAMPLE_PLUGIN}  ${PLUGINS_DESTINATION_DIR}
-    DEPENDS ${BUILT_EXAMPLE_PLUGIN}
-  )
-  
-  # copy over bookmarks file if llmediaplugintest gets built
-  get_target_property(BUILT_LLMEDIAPLUGINTEST llmediaplugintest LOCATION)
-  add_custom_command(TARGET llmediaplugintest POST_BUILD
-    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${CMAKE_CURRENT_BINARY_DIR}/
-    DEPENDS ${BUILT_LLMEDIAPLUGINTEST}
-  )
-  # also copy it to the same place as SLPlugin, which is what the mac wants...
-  add_custom_command(TARGET llmediaplugintest POST_BUILD
-    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${PLUGINS_DESTINATION_DIR}
-    DEPENDS ${BUILT_LLMEDIAPLUGINTEST}
-  )
 endif (DARWIN OR WINDOWS)
 
+get_target_property(BUILT_EXAMPLE_PLUGIN media_plugin_example LOCATION)
+add_custom_command(TARGET llmediaplugintest POST_BUILD
+  COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_EXAMPLE_PLUGIN}  ${PLUGINS_DESTINATION_DIR}
+  DEPENDS ${BUILT_EXAMPLE_PLUGIN}
+)
+
+# copy over bookmarks file if llmediaplugintest gets built
+get_target_property(BUILT_LLMEDIAPLUGINTEST llmediaplugintest LOCATION)
+add_custom_command(TARGET llmediaplugintest POST_BUILD
+  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${CMAKE_CURRENT_BINARY_DIR}/
+  DEPENDS ${BUILT_LLMEDIAPLUGINTEST}
+)
+
+# also copy it to the same place as SLPlugin, which is what the mac wants...
+add_custom_command(TARGET llmediaplugintest POST_BUILD
+  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${PLUGINS_DESTINATION_DIR}
+  DEPENDS ${BUILT_LLMEDIAPLUGINTEST}
+)
+
 if (DARWIN)
-  add_custom_command(TARGET llmediaplugintest POST_BUILD
-    COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${PLUGINS_DESTINATION_DIR}
-    DEPENDS ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib
-  )
+#   add_custom_command(TARGET llmediaplugintest POST_BUILD
+#     COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${PLUGINS_DESTINATION_DIR}
+#     DEPENDS ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib
+#   )
 endif (DARWIN)
 
 if(WINDOWS)
@@ -538,4 +538,76 @@ if(WINDOWS)
 
 endif(WINDOWS)
 
+if (DARWIN)
+  set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
+  set(plugintest_release_files
+    libexception_handler.dylib
+    libaprutil-1.0.dylib
+    libapr-1.0.dylib
+    libexpat.1.5.2.dylib
+    libQtCore.4.7.1.dylib
+    libQtCore.4.dylib
+    libQtGui.4.7.1.dylib
+    libQtGui.4.dylib
+    libQtNetwork.4.7.1.dylib
+    libQtNetwork.4.dylib
+    libQtOpenGL.4.7.1.dylib
+    libQtOpenGL.4.dylib
+    libQtWebKit.4.7.1.dylib
+    libQtWebKit.4.dylib
+    libQtSvg.4.7.1.dylib
+    libQtSvg.4.dylib
+    libQtXml.4.7.1.dylib
+    libQtXml.4.dylib
+    )
+  copy_if_different(
+    ${plugintest_release_src_dir}
+    "${PLUGINS_DESTINATION_DIR}"
+    out_targets
+    ${plugintest_release_files}
+    )
+  set(plugin_test_targets ${plugin_test_targets} ${out_targets})
+
+  # Release & ReleaseDebInfo config runtime files required for the FB connect test (Qt image format plugins)
+  set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_PLUGINS}/imageformats")
+  set(plugintest_release_files
+    libqgif.dylib
+    libqico.dylib
+    libqjpeg.dylib
+    libqmng.dylib
+    libqsvg.dylib
+    libqtiff.dylib
+    )
+  copy_if_different(
+    ${plugintest_release_src_dir}
+    "${PLUGINS_DESTINATION_DIR}/imageformats"
+    out_targets
+    ${plugintest_release_files}
+    )
+  set(plugin_test_targets ${plugin_test_targets} ${out_targets})
+
+  # Release & ReleaseDebInfo config runtime files required for the FB connect test (Qt codec plugins)
+  set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_PLUGINS}/codecs")
+  set(plugintest_release_files
+    libqcncodecs.dylib
+    libqjpcodecs.dylib
+    libqkrcodecs.dylib
+    libqtwcodecs.dylib
+    )
+  copy_if_different(
+    ${plugintest_release_src_dir}
+    "${PLUGINS_DESTINATION_DIR}/codecs"
+    out_targets
+    ${plugintest_release_files}
+    )
+  set(plugin_test_targets ${plugin_test_targets} ${out_targets})
+
+  add_custom_target(copy_plugintest_libs ALL
+    DEPENDS 
+    ${plugin_test_targets}
+    )
+
+  add_dependencies(llmediaplugintest copy_plugintest_libs)
+endif (DARWIN)
+
 ll_deploy_sharedlibs_command(llmediaplugintest) 
diff --git a/indra/test_apps/llplugintest/README.Linden b/indra/test_apps/llplugintest/README.Linden
new file mode 100644
index 0000000000000000000000000000000000000000..4a9f223c21f183528bc1edac3d1ba1f5592e84ae
--- /dev/null
+++ b/indra/test_apps/llplugintest/README.Linden
@@ -0,0 +1,21 @@
+
+1.  Description
+
+    Exercises SLPlugin.  Demonstrates mediakit plugin reuse and
+    switchover as MIME type changes (web, quicktime, flash).
+
+
+2.  Running
+
+  2.1  Mac
+
+    Make certain '.' is included in PATH.  E.g.:
+
+       PATH=.:"$PATH" open build-darwin-i386/test_apps/llmediaplugintest/RelWithDebInfo/llmediaplugintest.app
+
+    Otherwise the program won't find SLPlugin and will timeout and
+    fail after 30 seconds and give you little information as to why.
+
+    Running 'dtruss' on plugin test applications will give you a great
+    deal of insight into why they aren't activating.
+
diff --git a/indra/viewer_components/login/CMakeLists.txt b/indra/viewer_components/login/CMakeLists.txt
index 6f366677c937a8b57871034a925ad4658ea2fc01..ce80d558292cd1e817f4b0cae56e90d108eb4be0 100755
--- a/indra/viewer_components/login/CMakeLists.txt
+++ b/indra/viewer_components/login/CMakeLists.txt
@@ -46,6 +46,8 @@ target_link_libraries(lllogin
     ${LLMATH_LIBRARIES}
     ${LLXML_LIBRARIES}
     ${BOOST_CONTEXT_LIBRARY}
+    ${BOOST_COROUTINE_LIBRARY}
+    ${BOOST_SYSTEM_LIBRARY}
     )
 
 if(LL_TESTS)
@@ -55,7 +57,7 @@ if(LL_TESTS)
   set_source_files_properties(
     lllogin.cpp
     PROPERTIES
-    LL_TEST_ADDITIONAL_LIBRARIES "${BOOST_CONTEXT_LIBRARY}"
+    LL_TEST_ADDITIONAL_LIBRARIES "${BOOST_CONTEXT_LIBRARY};${BOOST_COROUTINE_LIBRARY};${BOOST_SYSTEM_LIBRARY}"
     )
 
   LL_ADD_PROJECT_UNIT_TESTS(lllogin "${lllogin_TEST_SOURCE_FILES}")
diff --git a/indra/win_updater/CMakeLists.txt b/indra/win_updater/CMakeLists.txt
deleted file mode 100755
index 210486c66867a0753e112d34da43f3ad6ad57d4d..0000000000000000000000000000000000000000
--- a/indra/win_updater/CMakeLists.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- cmake -*-
-
-project(win_updater)
-
-include(00-Common)
-include(LLCommon)
-include(Linking)
-
-# *HACK - override msvcrt implementation (intialized on 00-Common) to be
-# statically linked for the installer this relies on vc taking the last flag on
-# the command line
-set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
-set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT")
-set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
-
-include_directories(
-    ${LLCOMMON_INCLUDE_DIRS}
-    )
-
-set(win_updater_SOURCE_FILES updater.cpp)
-
-set(win_updater_HEADER_FILES CMakeLists.txt)
-
-set_source_files_properties(${win_updater_HEADER_FILES}
-                            PROPERTIES HEADER_FILE_ONLY TRUE)
-
-list(APPEND win_updater_SOURCE_FILES ${win_updater_HEADER_FILES})
-
-add_executable(windows-updater WIN32 ${win_updater_SOURCE_FILES})
-
-target_link_libraries(windows-updater
-    wininet
-    user32
-    gdi32
-    shell32
-    )
-
-set_target_properties(windows-updater
-    PROPERTIES
-    LINK_FLAGS "/NODEFAULTLIB:MSVCRT"
-    LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;MSVCRT\""
-    )
-
-# The windows-updater doesn't link against anything non-system, apparently
-#ll_deploy_sharedlibs_command(windows-updater)
diff --git a/indra/win_updater/updater.cpp b/indra/win_updater/updater.cpp
deleted file mode 100755
index aeab5a3b13533d0342b5fdfcd253ade920130007..0000000000000000000000000000000000000000
--- a/indra/win_updater/updater.cpp
+++ /dev/null
@@ -1,516 +0,0 @@
-/** 
- * @file updater.cpp
- * @brief Windows auto-updater
- *
- * $LicenseInfo:firstyear=2002&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-//
-// Usage: updater -url <url>
-//
-
-// We use dangerous fopen, strtok, mbstowcs, sprintf
-// which generates warnings on VC2005.
-// *TODO: Switch to fopen_s, strtok_s, etc.
-#define _CRT_SECURE_NO_DEPRECATE
-
-#include <windows.h>
-#include <wininet.h>
-#include <stdio.h>
-#include <string>
-#include <iostream>
-#include <stdexcept>
-#include <sstream>
-#include <fstream>
-
-#define BUFSIZE 8192
-
-int  gTotalBytesRead = 0;
-DWORD gTotalBytes = -1;
-HWND gWindow = NULL;
-WCHAR gProgress[256];
-char* gUpdateURL = NULL;
-
-#if _DEBUG
-std::ofstream logfile;
-#define DEBUG(expr) logfile << expr << std::endl
-#else
-#define DEBUG(expr) /**/
-#endif
-
-char* wchars_to_utf8chars(const WCHAR* in_chars)
-{
-	int tlen = 0;
-	const WCHAR* twc = in_chars;
-	while (*twc++ != 0)
-	{
-		tlen++;
-	}
-	char* outchars = new char[tlen];
-	char* res = outchars;
-	for (int i=0; i<tlen; i++)
-	{
-		int cur_char = (int)(*in_chars++);
-		if (cur_char < 0x80)
-		{
-			*outchars++ = (char)cur_char;
-		}
-		else
-		{
-			*outchars++ = '?';
-		}
-	}
-	*outchars = 0;
-	return res;
-}
-
-class Fetcher
-{
-public:
-    Fetcher(const std::wstring& uri)
-    {
-        // These actions are broken out as separate methods not because it
-        // makes the code clearer, but to avoid triggering AntiVir and
-        // McAfee-GW-Edition virus scanners (DEV-31680).
-        mInet = openInet();
-        mDownload = openUrl(uri);
-    }
-
-    ~Fetcher()
-    {
-        DEBUG("Calling InternetCloseHandle");
-        InternetCloseHandle(mDownload);
-        InternetCloseHandle(mInet);
-    }
-
-    unsigned long read(char* buffer, size_t bufflen) const;
-
-    DWORD getTotalBytes() const
-    {
-        DWORD totalBytes;
-        DWORD sizeof_total_bytes = sizeof(totalBytes);
-        HttpQueryInfo(mDownload, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER,
-                      &totalBytes, &sizeof_total_bytes, NULL);
-        return totalBytes;
-    }
-
-    struct InetError: public std::runtime_error
-    {
-        InetError(const std::string& what): std::runtime_error(what) {}
-    };
-
-private:
-    // We test results from a number of different MS functions with different
-    // return types -- but the common characteristic is that 0 (i.e. (! result))
-    // means an error of some kind.
-    template <typename RESULT>
-    static RESULT check(const std::string& desc, RESULT result)
-    {
-        if (result)
-        {
-            // success, show caller
-            return result;
-        }
-        DWORD err = GetLastError();
-        std::ostringstream out;
-        out << desc << " Failed: " << err;
-        DEBUG(out.str());
-        throw InetError(out.str());
-    }
-
-    HINTERNET openUrl(const std::wstring& uri) const;
-    HINTERNET openInet() const;
-
-    HINTERNET mInet, mDownload;
-};
-
-HINTERNET Fetcher::openInet() const
-{
-    DEBUG("Calling InternetOpen");
-    // Init wininet subsystem
-    return check("InternetOpen",
-                 InternetOpen(L"LindenUpdater", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0));
-}
-
-HINTERNET Fetcher::openUrl(const std::wstring& uri) const
-{
-    DEBUG("Calling InternetOpenUrl: " << wchars_to_utf8chars(uri.c_str()));
-    return check("InternetOpenUrl",
-                 InternetOpenUrl(mInet, uri.c_str(), NULL, 0, INTERNET_FLAG_NEED_FILE, NULL));
-}
-
-unsigned long Fetcher::read(char* buffer, size_t bufflen) const
-{
-    unsigned long bytes_read = 0;
-    DEBUG("Calling InternetReadFile");
-    check("InternetReadFile",
-          InternetReadFile(mDownload, buffer, bufflen, &bytes_read));
-    return bytes_read;
-}
-
-int WINAPI get_url_into_file(const std::wstring& uri, const std::string& path, int *cancelled)
-{
-	int success = FALSE;
-	*cancelled = FALSE;
-
-    DEBUG("Opening '" << path << "'");
-
-	FILE* fp = fopen(path.c_str(), "wb");		/* Flawfinder: ignore */
-
-	if (!fp)
-	{
-        DEBUG("Failed to open '" << path << "'");
-		return success;
-	}
-
-    // Note, ctor can throw, since it uses check() function.
-    Fetcher fetcher(uri);
-    gTotalBytes = fetcher.getTotalBytes();
-
-/*==========================================================================*|
-    // nobody uses total_bytes?!? What's this doing here?
-	DWORD total_bytes = 0;
-	success = check("InternetQueryDataAvailable",
-                    InternetQueryDataAvailable(hdownload, &total_bytes, 0, 0));
-|*==========================================================================*/
-
-	success = FALSE;
-	while(!success && !(*cancelled))
-	{
-        char data[BUFSIZE];		/* Flawfinder: ignore */
-        unsigned long bytes_read = fetcher.read(data, sizeof(data));
-
-		if (!bytes_read)
-		{
-            DEBUG("InternetReadFile Read " << bytes_read << " bytes.");
-		}
-
-        DEBUG("Reading Data, bytes_read = " << bytes_read);
-		
-		if (bytes_read == 0)
-		{
-			// If InternetFileRead returns TRUE AND bytes_read == 0
-			// we've successfully downloaded the entire file
-			wsprintf(gProgress, L"Download complete.");
-			success = TRUE;
-		}
-		else
-		{
-			// write what we've got, then continue
-			fwrite(data, sizeof(char), bytes_read, fp);
-
-			gTotalBytesRead += int(bytes_read);
-
-			if (gTotalBytes != -1)
-				wsprintf(gProgress, L"Downloaded: %d%%", 100 * gTotalBytesRead / gTotalBytes);
-			else
-				wsprintf(gProgress, L"Downloaded: %dK", gTotalBytesRead / 1024);
-
-		}
-
-        DEBUG("Calling InvalidateRect");
-		
-		// Mark the window as needing redraw (of the whole thing)
-		InvalidateRect(gWindow, NULL, TRUE);
-
-		// Do the redraw
-        DEBUG("Calling UpdateWindow");
-		UpdateWindow(gWindow);
-
-        DEBUG("Calling PeekMessage");
-		MSG msg;
-		while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
-		{
-			TranslateMessage(&msg);
-			DispatchMessage(&msg);
-
-			if (msg.message == WM_QUIT)
-			{
-				// bail out, user cancelled
-				*cancelled = TRUE;
-			}
-		}
-	}
-
-	fclose(fp);
-	return success;
-}
-
-LRESULT CALLBACK WinProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
-{
-	HDC hdc;			// Drawing context
-	PAINTSTRUCT ps;
-
-	switch(message)
-	{
-	case WM_PAINT:
-		{
-			hdc = BeginPaint(hwnd, &ps);
-
-			RECT rect;
-			GetClientRect(hwnd, &rect);
-			DrawText(hdc, gProgress, -1, &rect, 
-				DT_SINGLELINE | DT_CENTER | DT_VCENTER);
-
-			EndPaint(hwnd, &ps);
-			return 0;
-		}
-	case WM_CLOSE:
-	case WM_DESTROY:
-		// Get out of full screen
-		// full_screen_mode(false);
-		PostQuitMessage(0);
-		return 0;
-	}
-	return DefWindowProc(hwnd, message, wparam, lparam);
-}
-
-#define win_class_name L"FullScreen"
-
-int parse_args(int argc, char **argv)
-{
-	int j;
-
-	for (j = 1; j < argc; j++) 
-	{
-		if ((!strcmp(argv[j], "-url")) && (++j < argc)) 
-		{
-			gUpdateURL = argv[j];
-		}
-	}
-
-	// If nothing was set, let the caller know.
-	if (!gUpdateURL)
-	{
-		return 1;
-	}
-	return 0;
-}
-	
-int WINAPI
-WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
-{
-	// Parse the command line.
-	LPSTR cmd_line_including_exe_name = GetCommandLineA();
-
-	const int MAX_ARGS = 100;
-	int argc = 0;
-	char* argv[MAX_ARGS];		/* Flawfinder: ignore */
-
-#if _DEBUG
-	logfile.open("updater.log", std::ios_base::out);
-    DEBUG("Parsing command arguments");
-#endif
-	
-	char *token = NULL;
-	if( cmd_line_including_exe_name[0] == '\"' )
-	{
-		// Exe name is enclosed in quotes
-		token = strtok( cmd_line_including_exe_name, "\"" );
-		argv[argc++] = token;
-		token = strtok( NULL, " \t," );
-	}
-	else
-	{
-		// Exe name is not enclosed in quotes
-		token = strtok( cmd_line_including_exe_name, " \t," );
-	}
-
-	while( (token != NULL) && (argc < MAX_ARGS) )
-	{
-		argv[argc++] = token;
-		/* Get next token: */
-		if (*(token + strlen(token) + 1) == '\"')		/* Flawfinder: ignore */
-		{
-			token = strtok( NULL, "\"");
-		}
-		else
-		{
-			token = strtok( NULL, " \t," );
-		}
-	}
-
-	gUpdateURL = NULL;
-
-	/////////////////////////////////////////
-	//
-	// Process command line arguments
-	//
-
-    DEBUG("Processing command arguments");
-	
-	//
-	// Parse the command line arguments
-	//
-	int parse_args_result = parse_args(argc, argv);
-	
-	WNDCLASSEX wndclassex = { 0 };
-	//DEVMODE dev_mode = { 0 };
-
-	const int WINDOW_WIDTH = 250;
-	const int WINDOW_HEIGHT = 100;
-
-	wsprintf(gProgress, L"Connecting...");
-
-	/* Init the WNDCLASSEX */
-	wndclassex.cbSize = sizeof(WNDCLASSEX);
-	wndclassex.style = CS_HREDRAW | CS_VREDRAW;
-	wndclassex.hInstance = hInstance;
-	wndclassex.lpfnWndProc = WinProc;
-	wndclassex.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
-	wndclassex.lpszClassName = win_class_name;
-	
-	RegisterClassEx(&wndclassex);
-	
-	// Get the size of the screen
-	//EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dev_mode);
-	
-	gWindow = CreateWindowEx(NULL, win_class_name, 
-		L"Second Life Updater",
-		WS_OVERLAPPEDWINDOW, 
-		CW_USEDEFAULT, 
-		CW_USEDEFAULT, 
-		WINDOW_WIDTH, 
-		WINDOW_HEIGHT,
-		NULL, NULL, hInstance, NULL);
-
-	ShowWindow(gWindow, nShowCmd);
-	UpdateWindow(gWindow);
-
-	if (parse_args_result)
-	{
-		MessageBox(gWindow, 
-				L"Usage: updater -url <url> [-name <window_title>] [-program <program_name>] [-silent]",
-				L"Usage", MB_OK);
-		return parse_args_result;
-	}
-
-	// Did we get a userserver to work with?
-	if (!gUpdateURL)
-	{
-		MessageBox(gWindow, L"Please specify the download url from the command line",
-			L"Error", MB_OK);
-		return 1;
-	}
-
-	// Can't feed GetTempPath into GetTempFile directly
-	char temp_path[MAX_PATH];		/* Flawfinder: ignore */
-	if (0 == GetTempPathA(sizeof(temp_path), temp_path))
-	{
-		MessageBox(gWindow, L"Problem with GetTempPath()",
-			L"Error", MB_OK);
-		return 1;
-	}
-    std::string update_exec_path(temp_path);
-	update_exec_path.append("Second_Life_Updater.exe");
-
-	WCHAR update_uri[4096];
-    mbstowcs(update_uri, gUpdateURL, sizeof(update_uri));
-
-	int success = 0;
-	int cancelled = 0;
-
-	// Actually do the download
-    try
-    {
-        DEBUG("Calling get_url_into_file");
-        success = get_url_into_file(update_uri, update_exec_path, &cancelled);
-    }
-    catch (const Fetcher::InetError& e)
-    {
-        (void)e;
-        success = FALSE;
-        DEBUG("Caught: " << e.what());
-    }
-
-	// WinInet can't tell us if we got a 404 or not.  Therefor, we check
-	// for the size of the downloaded file, and assume that our installer
-	// will always be greater than 1MB.
-	if (gTotalBytesRead < (1024 * 1024) && ! cancelled)
-	{
-		MessageBox(gWindow,
-			L"The Second Life auto-update has failed.\n"
-			L"The problem may be caused by other software installed \n"
-			L"on your computer, such as a firewall.\n"
-			L"Please visit http://secondlife.com/download/ \n"
-			L"to download the latest version of Second Life.\n",
-			NULL, MB_OK);
-		return 1;
-	}
-
-	if (cancelled)
-	{
-		// silently exit
-		return 0;
-	}
-
-	if (!success)
-	{
-		MessageBox(gWindow, 
-			L"Second Life download failed.\n"
-			L"Please try again later.", 
-			NULL, MB_OK);
-		return 1;
-	}
-
-	// TODO: Make updates silent (with /S to NSIS)
-	//char params[256];		/* Flawfinder: ignore */
-	//sprintf(params, "/S");	/* Flawfinder: ignore */
-	//MessageBox(gWindow, 
-	//	L"Updating Second Life.\n\nSecond Life will automatically start once the update is complete.  This may take a minute...",
-	//	L"Download Complete",
-	//	MB_OK);
-		
-/*==========================================================================*|
-    // DEV-31680: ShellExecuteA() causes McAfee-GW-Edition and AntiVir
-    // scanners to flag this executable as a probable virus vector.
-    // Less than or equal to 32 means failure
-	if (32 >= (int) ShellExecuteA(gWindow, "open", update_exec_path.c_str(), NULL, 
-		"C:\\", SW_SHOWDEFAULT))
-|*==========================================================================*/
-    // from http://msdn.microsoft.com/en-us/library/ms682512(VS.85).aspx
-    STARTUPINFOA si;
-    PROCESS_INFORMATION pi;
-    ZeroMemory(&si, sizeof(si));
-    si.cb = sizeof(si);
-    ZeroMemory(&pi, sizeof(pi));
-
-    if (! CreateProcessA(update_exec_path.c_str(), // executable file
-                  NULL,                            // command line
-                  NULL,             // process cannot be inherited
-                  NULL,             // thread cannot be inherited
-                  FALSE,            // do not inherit existing handles
-                  0,                // process creation flags
-                  NULL,             // inherit parent's environment
-                  NULL,             // inherit parent's current dir
-                  &si,              // STARTUPINFO
-                  &pi))             // PROCESS_INFORMATION
-	{
-		MessageBox(gWindow, L"Update failed.  Please try again later.", NULL, MB_OK);
-		return 1;
-	}
-
-	// Give installer some time to open a window
-	Sleep(1000);
-
-	return 0;
-}