diff --git a/.hgtags b/.hgtags
index bd574ec656ca91615d3309fd5c0230bc3bed8e7c..dd0dc4499ac4dbd9c5e8f87356dcb13cb4db4018 100755
--- a/.hgtags
+++ b/.hgtags
@@ -487,3 +487,4 @@ a9f2d0cb11f73b06858e6083bb50083becc3f9cd 3.7.9-release
 3b44ea8988cb902f0dda8429e8d5e4569e304532 3.7.12-release
 d86a7e1bc96d27b683f951d3701d5b7042158c68 3.7.13-release
 a7872554f3665588f1e8347d472cec3a299254b3 3.7.14-release
+3f11f57f2b4d15a9f987d12bc70ef507eefb5018 3.7.15-release
diff --git a/doc/contributions.txt b/doc/contributions.txt
index e157e82aaca070dd894ad95540e646c76ad53f76..dd69f8f953240b293fe63844bec82abd746ce295 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
@@ -1185,6 +1221,7 @@ Sovereign Engineer
     OPEN-189
     STORM-1972
     OPEN-195
+    OPEN-217
 SpacedOut Frye
 	VWR-34
 	VWR-45
@@ -1360,6 +1397,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/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/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/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 748bd90c61a109d54eacb2574ba04ca955f5cf90..e8f4144e70dbc1b2ca70c4c23ab69e4a83f7949e 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1769,7 +1769,6 @@ if (WINDOWS)
       media_plugin_webkit
       winmm_shim
       windows-crash-logger
-      windows-updater
       )
 
     if (FMODEX)
@@ -1815,7 +1814,6 @@ if (WINDOWS)
 
     add_dependencies(${VIEWER_BINARY_NAME}
       SLPlugin
-      windows-updater
       windows-crash-logger
       )
 
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index 03d7b8fb9b85130bd5e06e4ab23d65e9bb6a08ed..36f601f10e93b9afb7e1de7d771a4afbbd1f50a1 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-3.7.15
+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 86a7def14f92e5b299106f07023af014e8d2e253..fbb1637090aefe83097b4cd5d5c0c2af14e5b7cd 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>
@@ -11452,17 +11452,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/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp
index b89b0d99004d404e493a1be460cc86d08764fc73..746b541f9d2ce76e8d50fad1900197881b5d5d21 100755
--- a/indra/newview/llavatariconctrl.cpp
+++ b/indra/newview/llavatariconctrl.cpp
@@ -247,7 +247,7 @@ void LLAvatarIconCtrl::setValue(const LLSD& value)
 	{
 		LLAvatarPropertiesProcessor* app =
 			LLAvatarPropertiesProcessor::getInstance();
-		if (mAvatarId.notNull() && mAvatarId != value.asUUID())
+		if (mAvatarId.notNull())
 		{
 			app->removeObserver(mAvatarId, this);
 		}
@@ -255,7 +255,6 @@ void LLAvatarIconCtrl::setValue(const LLSD& value)
 		if (mAvatarId != value.asUUID())
 		{
 			mAvatarId = value.asUUID();
-			app->addObserver(mAvatarId, this);
 
 			// *BUG: This will return stale icons if a user changes their
 			// profile picture. However, otherwise we send too many upstream
@@ -271,7 +270,7 @@ void LLAvatarIconCtrl::setValue(const LLSD& value)
 				// People API, rather than sending AvatarPropertyRequest
 				// messages.  People API already hits the user table.
 				LLIconCtrl::setValue(mDefaultIconName);
-				// duplicated requests are filtered later if there are any
+				app->addObserver(mAvatarId, this);
 				app->sendAvatarPropertiesRequest(mAvatarId);
 			}
 		}
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 c094eb31803e293135f4915d026ad2974b4f0b62..7621c35ed2d06c38af35f1b8a2edfaebf09ce90d 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 47b14811a81308dd3e4823e76dd5fdba4af4e17c..dc8b15a5bf7932835fbe204a0fbddab54927ee69 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),
@@ -210,6 +212,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;
@@ -218,9 +221,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;
+		}
 	}
 
 	////////////////////////////////////////////////////////////////////////////////
@@ -642,11 +655,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();
@@ -675,6 +699,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)
@@ -939,6 +977,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());
@@ -958,6 +997,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();
@@ -979,6 +1019,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 094fda7707f2e32fd5d1b35b488289247382cd03..5e18ad4d20d5eda28161824f26ba45920b592a51 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;
@@ -178,6 +187,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 db540b61995718452aceb87b22b17a9e955d1285..3546317471287c980815d3c87271a56ccbc378b8 100755
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -402,6 +402,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 e8a006d0bed981473b624dcceac037a133bda0ba..eb037577be25093d816ea4ec0c5a864ee061a8e0 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);
@@ -704,6 +706,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);
+		}
 	}
 }
 
@@ -723,6 +749,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());
@@ -744,6 +771,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()
@@ -844,17 +872,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();
 }
@@ -869,6 +903,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 425e339713958f219713c7caf2f5ec0813ef7bd0..d9a874be499b78a161d10a6036ff40d53ea06767 100755
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -1346,17 +1346,20 @@ bool LLTextureFetchWorker::doWork(S32 param)
 						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(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;
 			}
 		}
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 703c6d87c6c8d7c882e404f5610604c7ef5d5ff9..44eb4361f178b9897baab65367c53a10c7c06598 100755
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -5756,83 +5756,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;
 			}
+	}
+	}		// End of special handling for "TeleportEntryAccessBlocked"
+	else
+	{	// Normal case, no message munging
+		gAgent.clearTeleportRequest();
+		if (LLNotifications::getInstance()->templateExists(notificationID))
+		{
+			tp_failure_notification = LLNotificationsUtil::add(notificationID, llsdBlock, llsdBlock);
 		}
 		else
 		{
-			gAgent.clearTeleportRequest();
-			maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
-			returnValue = true;
-		}
+			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);
 	}
 
@@ -6048,8 +6066,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)
 	{
@@ -6071,10 +6089,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;
@@ -6657,8 +6675,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.
@@ -6668,16 +6686,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;
@@ -6693,7 +6711,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 )
 					{
@@ -6706,17 +6724,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/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 3f6d244af1613b41382942743285cd940ffc5d13..4e2eef39d67d8c20a45b3e165826715e0228c083 100755
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -1480,17 +1480,6 @@ void LLViewerFetchedTexture::processTextureStats()
 		{
 			mDesiredDiscardLevel = 0;
 		}
-		else if (mDontDiscard && (mBoostLevel == LLGLTexture::BOOST_UI || mBoostLevel == LLGLTexture::BOOST_ICON))
-		{
-			if (mFullWidth > MAX_IMAGE_SIZE_DEFAULT || mFullHeight > MAX_IMAGE_SIZE_DEFAULT)
-			{
-				mDesiredDiscardLevel = 1; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048
-			}
-			else
-			{
-				mDesiredDiscardLevel = 0;
-			}
-		}
 		else if(!mFullWidth || !mFullHeight)
 		{
 			mDesiredDiscardLevel = 	llmin(getMaxDiscardLevel(), (S32)mLoadedCallbackDesiredDiscardLevel);
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 f5d5d7e07528a2f448ccad1b26772d5ccfc46f7f..76adaad57ca8dbe219c5cd673418a8350c88d748 100755
--- a/indra/newview/skins/default/xui/en/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml
@@ -3,8 +3,9 @@
  positioning="cascading"
  legacy_header_height="18"
  can_minimize="true"
+ can_resize="false"
  can_close="true"
- height="500"
+ height="455"
  layout="topleft"
  name="Snapshot"
  single_instance="true"
@@ -12,7 +13,8 @@
  save_rect="true"
  save_visibility="false"
  title="SNAPSHOT"
- width="470">
+ width="624"
+ min_height="455">
     <floater.string
      name="unknown">
         unknown
@@ -58,11 +60,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
@@ -79,35 +81,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
@@ -120,7 +318,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">
@@ -128,18 +326,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
@@ -152,7 +349,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">
@@ -161,51 +358,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"
@@ -213,37 +398,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"
@@ -252,161 +444,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 944f600ef73719df34688bb96235dcdb10ef764b..570ecf241e1e38f4e3748b93b4583c7e3ed06cf4 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"
@@ -4659,6 +4669,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/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index 35b373f13a009d48f90e7f4cafe74571630a3689..bca134eef388babd52099202e5a437e1182f0dc3 100755
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -71,7 +71,7 @@ Version Qt Webkit : [QT_WEBKIT_VERSION]
 Version serveur vocal : [VOICE_VERSION]
 	</string>
 	<string name="AboutTraffic">
-		Paquets perdus : [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)
+		Paquets perdus : [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)
 	</string>
 	<string name="ErrorFetchingServerReleaseNotesURL">
 		Erreur lors de la récupération de l&apos;URL des notes de version du serveur.
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;
-}