diff --git a/indra/llui/llsdparam.cpp b/indra/llui/llsdparam.cpp
index 6fa90933a4ccf8ec436baeafe20b5de979c1fbb8..0e29873bb01403bacc492661f48a7c1d88bf91fd 100644
--- a/indra/llui/llsdparam.cpp
+++ b/indra/llui/llsdparam.cpp
@@ -36,6 +36,8 @@ static 	LLInitParam::Parser::parser_write_func_map_t sWriteFuncs;
 static 	LLInitParam::Parser::parser_inspect_func_map_t sInspectFuncs;
 static const LLSD NO_VALUE_MARKER;
 
+LLFastTimer::DeclareTimer FTM_SD_PARAM_ADAPTOR("LLSD to LLInitParam conversion");
+
 //
 // LLParamSDParser
 //
diff --git a/indra/llui/llsdparam.h b/indra/llui/llsdparam.h
index c1cfa98399f7e6ad9c69e28b47a429c59e3d085f..3dfc6d020ee33ada34bf74a17145ef8f85533786 100644
--- a/indra/llui/llsdparam.h
+++ b/indra/llui/llsdparam.h
@@ -91,6 +91,8 @@ typedef LLInitParam::Parser parser_t;
 	LLSD*					mCurWriteSD;
 };
 
+
+extern LLFastTimer::DeclareTimer FTM_SD_PARAM_ADAPTOR;
 template<typename T>
 class LLSDParamAdapter : public T
 {
@@ -98,8 +100,11 @@ class LLSDParamAdapter : public T
 	LLSDParamAdapter() {}
 	LLSDParamAdapter(const LLSD& sd)
 	{
+		LLFastTimer _(FTM_SD_PARAM_ADAPTOR);
 		LLParamSDParser parser;
-		parser.readSD(sd, *this);
+		// don't spam for implicit parsing of LLSD, as we want to allow arbitrary freeform data and ignore most of it
+		bool parse_silently = true;
+		parser.readSD(sd, *this, parse_silently);
 	}
 
 	operator LLSD() const
diff --git a/indra/llui/llurlaction.cpp b/indra/llui/llurlaction.cpp
index 42b779bd28316abbccc2dd58b82940533ccadf81..fd9b3d9a6d33f6d26b89f7482dcf1b09841cf3d6 100644
--- a/indra/llui/llurlaction.cpp
+++ b/indra/llui/llurlaction.cpp
@@ -33,28 +33,28 @@
 #include "llurlregistry.h"
 
 // global state for the callback functions
-void (*LLUrlAction::sOpenURLCallback) (const std::string& url) = NULL;
-void (*LLUrlAction::sOpenURLInternalCallback) (const std::string& url) = NULL;
-void (*LLUrlAction::sOpenURLExternalCallback) (const std::string& url) = NULL;
-bool (*LLUrlAction::sExecuteSLURLCallback) (const std::string& url) = NULL;
+LLUrlAction::url_callback_t 		LLUrlAction::sOpenURLCallback;
+LLUrlAction::url_callback_t 		LLUrlAction::sOpenURLInternalCallback;
+LLUrlAction::url_callback_t 		LLUrlAction::sOpenURLExternalCallback;
+LLUrlAction::execute_url_callback_t LLUrlAction::sExecuteSLURLCallback;
 
 
-void LLUrlAction::setOpenURLCallback(void (*cb) (const std::string& url))
+void LLUrlAction::setOpenURLCallback(url_callback_t cb)
 {
 	sOpenURLCallback = cb;
 }
 
-void LLUrlAction::setOpenURLInternalCallback(void (*cb) (const std::string& url))
+void LLUrlAction::setOpenURLInternalCallback(url_callback_t cb)
 {
 	sOpenURLInternalCallback = cb;
 }
 
-void LLUrlAction::setOpenURLExternalCallback(void (*cb) (const std::string& url))
+void LLUrlAction::setOpenURLExternalCallback(url_callback_t cb)
 {
 	sOpenURLExternalCallback = cb;
 }
 
-void LLUrlAction::setExecuteSLURLCallback(bool (*cb) (const std::string& url))
+void LLUrlAction::setExecuteSLURLCallback(execute_url_callback_t cb)
 {
 	sExecuteSLURLCallback = cb;
 }
@@ -63,7 +63,7 @@ void LLUrlAction::openURL(std::string url)
 {
 	if (sOpenURLCallback)
 	{
-		(*sOpenURLCallback)(url);
+		sOpenURLCallback(url);
 	}
 }
 
@@ -71,7 +71,7 @@ void LLUrlAction::openURLInternal(std::string url)
 {
 	if (sOpenURLInternalCallback)
 	{
-		(*sOpenURLInternalCallback)(url);
+		sOpenURLInternalCallback(url);
 	}
 }
 
@@ -79,7 +79,7 @@ void LLUrlAction::openURLExternal(std::string url)
 {
 	if (sOpenURLExternalCallback)
 	{
-		(*sOpenURLExternalCallback)(url);
+		sOpenURLExternalCallback(url);
 	}
 }
 
@@ -87,18 +87,18 @@ void LLUrlAction::executeSLURL(std::string url)
 {
 	if (sExecuteSLURLCallback)
 	{
-		(*sExecuteSLURLCallback)(url);
+		sExecuteSLURLCallback(url);
 	}
 }
 
 void LLUrlAction::clickAction(std::string url)
 {
 	// Try to handle as SLURL first, then http Url
-	if ( (sExecuteSLURLCallback) && !(*sExecuteSLURLCallback)(url) )
+	if ( (sExecuteSLURLCallback) && !sExecuteSLURLCallback(url) )
 	{
 		if (sOpenURLCallback)
 		{
-			(*sOpenURLCallback)(url);
+			sOpenURLCallback(url);
 		}
 	}
 }
diff --git a/indra/llui/llurlaction.h b/indra/llui/llurlaction.h
index 0132dbaaf0358f6f86bcebca8ba9ce788e76f5fd..c34960b82622345aeccc014335f9a01dd5df204a 100644
--- a/indra/llui/llurlaction.h
+++ b/indra/llui/llurlaction.h
@@ -29,6 +29,7 @@
 #define LL_LLURLACTION_H
 
 #include <string>
+#include <boost/function.hpp>
 
 ///
 /// The LLUrlAction class provides a number of static functions that
@@ -77,17 +78,21 @@ class LLUrlAction
 	static void showProfile(std::string url);
 
 	/// specify the callbacks to enable this class's functionality
-	static void	setOpenURLCallback(void (*cb) (const std::string& url));
-	static void	setOpenURLInternalCallback(void (*cb) (const std::string& url));
-	static void	setOpenURLExternalCallback(void (*cb) (const std::string& url));
-	static void	setExecuteSLURLCallback(bool (*cb) (const std::string& url));
+	typedef boost::function<void (const std::string&)> url_callback_t;
+	typedef boost::function<bool(const std::string& url)> execute_url_callback_t;
+
+	static void	setOpenURLCallback(url_callback_t cb);
+	static void	setOpenURLInternalCallback(url_callback_t cb);
+	static void	setOpenURLExternalCallback(url_callback_t cb);
+	static void	setExecuteSLURLCallback(execute_url_callback_t cb);
 
 private:
 	// callbacks for operations we can perform on Urls
-	static void (*sOpenURLCallback) (const std::string& url);
-	static void (*sOpenURLInternalCallback) (const std::string& url);
-	static void (*sOpenURLExternalCallback) (const std::string& url);
-	static bool (*sExecuteSLURLCallback) (const std::string& url);
+	static url_callback_t sOpenURLCallback;
+	static url_callback_t sOpenURLInternalCallback;
+	static url_callback_t sOpenURLExternalCallback;
+
+	static execute_url_callback_t sExecuteSLURLCallback;
 };
 
 #endif
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index ff9cf3199edaa7845b8b528e592a53d86c5d9aa1..ba05f6288bfcdd93e9b084cc4c77fc052c0abd96 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -207,7 +207,6 @@ set(viewer_SOURCE_FILES
     llfloaterland.cpp
     llfloaterlandholdings.cpp
     llfloatermap.cpp
-    llfloatermediabrowser.cpp
     llfloatermediasettings.cpp
     llfloatermemleak.cpp
     llfloatermodelpreview.cpp
@@ -781,7 +780,6 @@ set(viewer_HEADER_FILES
     llfloaterland.h
     llfloaterlandholdings.h
     llfloatermap.h
-    llfloatermediabrowser.h
     llfloatermediasettings.h
     llfloatermemleak.h
     llfloatermodelpreview.h
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index c937f604fc17e0d8ca02c06deac553c8d3bf3915..8bf4d9405971c3e9404b038e1e48d461b8b6afea 100755
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -847,9 +847,9 @@ bool LLAppViewer::init()
 	LLWeb::initClass();			  // do this after LLUI
 	
 	// Provide the text fields with callbacks for opening Urls
-	LLUrlAction::setOpenURLCallback(&LLWeb::loadURL);
-	LLUrlAction::setOpenURLInternalCallback(&LLWeb::loadURLInternal);
-	LLUrlAction::setOpenURLExternalCallback(&LLWeb::loadURLExternal);
+	LLUrlAction::setOpenURLCallback(boost::bind(&LLWeb::loadURL, _1, LLStringUtil::null, LLStringUtil::null));
+	LLUrlAction::setOpenURLInternalCallback(boost::bind(&LLWeb::loadURLInternal, _1, LLStringUtil::null, LLStringUtil::null));
+	LLUrlAction::setOpenURLExternalCallback(boost::bind(&LLWeb::loadURLExternal, _1, true, LLStringUtil::null));
 	LLUrlAction::setExecuteSLURLCallback(&LLURLDispatcher::dispatchFromTextEditor);
 
 	// Let code in llui access the viewer help floater
diff --git a/indra/newview/llfloaterhelpbrowser.h b/indra/newview/llfloaterhelpbrowser.h
index 80b0ecc06b34b16288fe936061c9454af1b5a3a0..bf4f544a14b1cc75cde3d38158a3cb21f2719203 100644
--- a/indra/newview/llfloaterhelpbrowser.h
+++ b/indra/newview/llfloaterhelpbrowser.h
@@ -1,5 +1,5 @@
 /** 
- * @file llfloatermediabrowser.h
+ * @file llfloaterhelpbrowser.h
  * @brief HTML Help floater - uses embedded web browser control
  *
  * $LicenseInfo:firstyear=2006&license=viewerlgpl$
diff --git a/indra/newview/llfloatermediabrowser.cpp b/indra/newview/llfloatermediabrowser.cpp
deleted file mode 100644
index 7a670dd90cca7b108027d6911e5ced8d2086b502..0000000000000000000000000000000000000000
--- a/indra/newview/llfloatermediabrowser.cpp
+++ /dev/null
@@ -1,462 +0,0 @@
-/** 
- * @file llfloatermediabrowser.cpp
- * @brief media browser floater - uses embedded media browser control
- *
- * $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 "llviewerprecompiledheaders.h"
-
-#include "llfloatermediabrowser.h"
-
-#include "llfloaterreg.h"
-#include "llparcel.h"
-#include "llpluginclassmedia.h"
-#include "lluictrlfactory.h"
-#include "llmediactrl.h"
-#include "llviewerwindow.h"
-#include "llviewercontrol.h"
-#include "llviewerparcelmgr.h"
-#include "llweb.h"
-#include "llui.h"
-#include "roles_constants.h"
-
-#include "llurlhistory.h"
-#include "llmediactrl.h"
-#include "llviewermedia.h"
-#include "llviewerparcelmedia.h"
-#include "llcombobox.h"
-#include "llwindow.h"
-#include "lllayoutstack.h"
-#include "llcheckboxctrl.h"
-
-#include "llnotifications.h"
-
-// TEMP
-#include "llsdutil.h"
-
-LLFloaterMediaBrowser::LLFloaterMediaBrowser(const LLSD& key)
-	: LLFloater(key)
-{
-}
-
-//static 
-void LLFloaterMediaBrowser::create(const std::string &url, const std::string& target, const std::string& uuid)
-{
-	lldebugs << "url = " << url << ", target = " << target << ", uuid = " << uuid << llendl;
-	
-	std::string tag = target;
-	
-	if(target.empty() || target == "_blank")
-	{
-		if(!uuid.empty())
-		{
-			tag = uuid;
-		}
-		else
-		{
-		// create a unique tag for this instance
-		LLUUID id;
-		id.generate();
-		tag = id.asString();
-	}
-	}
-	
-	S32 browser_window_limit = gSavedSettings.getS32("MediaBrowserWindowLimit");
-	
-	if(LLFloaterReg::findInstance("media_browser", tag) != NULL)
-	{
-		// There's already a media browser for this tag, so we won't be opening a new window.
-	}
-	else if(browser_window_limit != 0)
-	{
-		// showInstance will open a new window.  Figure out how many media browsers are already open, 
-		// and close the least recently opened one if this will put us over the limit.
-		
-		LLFloaterReg::const_instance_list_t &instances = LLFloaterReg::getFloaterList("media_browser");
-		lldebugs << "total instance count is " << instances.size() << llendl;
-		
-		for(LLFloaterReg::const_instance_list_t::const_iterator iter = instances.begin(); iter != instances.end(); iter++)
-		{
-			lldebugs << "    " << (*iter)->getKey() << llendl;
-		}
-		
-		if(instances.size() >= (size_t)browser_window_limit)
-		{
-			// Destroy the least recently opened instance
-			(*instances.begin())->closeFloater();
-		}
-	}
-
-	LLFloaterMediaBrowser *browser = dynamic_cast<LLFloaterMediaBrowser*> (LLFloaterReg::showInstance("media_browser", tag));
-	llassert(browser);
-	if(browser)
-	{
-		browser->mUUID = uuid;
-
-		// tell the browser instance to load the specified URL
-		browser->openMedia(url, target);
-		LLViewerMedia::proxyWindowOpened(target, uuid);
-	}
-}
-
-//static 
-void LLFloaterMediaBrowser::closeRequest(const std::string &uuid)
-{
-	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("media_browser");
-	lldebugs << "instance list size is " << inst_list.size() << ", incoming uuid is " << uuid << llendl;
-	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
-	{
-		LLFloaterMediaBrowser* i = dynamic_cast<LLFloaterMediaBrowser*>(*iter);
-		lldebugs << "    " << i->mUUID << llendl;
-		if (i && i->mUUID == uuid)
-		{
-			i->closeFloater(false);
-			return;
- 		}
- 	}
-}
-
-//static 
-void LLFloaterMediaBrowser::geometryChanged(const std::string &uuid, S32 x, S32 y, S32 width, S32 height)
-{
-	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("media_browser");
-	lldebugs << "instance list size is " << inst_list.size() << ", incoming uuid is " << uuid << llendl;
-	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
-	{
-		LLFloaterMediaBrowser* i = dynamic_cast<LLFloaterMediaBrowser*>(*iter);
-		lldebugs << "    " << i->mUUID << llendl;
-		if (i && i->mUUID == uuid)
-		{
-			i->geometryChanged(x, y, width, height);
-			return;
-	}
-}
-}
-	
-void LLFloaterMediaBrowser::geometryChanged(S32 x, S32 y, S32 width, S32 height)
-{	
-	// Make sure the layout of the browser control is updated, so this calculation is correct.
-	LLLayoutStack::updateClass();
-		
-	// TODO: need to adjust size and constrain position to make sure floaters aren't moved outside the window view, etc.
-	LLCoordWindow window_size;
-	getWindow()->getSize(&window_size);
-
-	// Adjust width and height for the size of the chrome on the Media Browser window.
-	width += getRect().getWidth() - mBrowser->getRect().getWidth();
-	height += getRect().getHeight() - mBrowser->getRect().getHeight();
-	
-	LLRect geom;
-	geom.setOriginAndSize(x, window_size.mY - (y + height), width, height);
-
-	lldebugs << "geometry change: " << geom << llendl;
-	
-	handleReshape(geom,false);
-}
-
-
-void LLFloaterMediaBrowser::draw()
-{
-	getChildView("go")->setEnabled(!mAddressCombo->getValue().asString().empty());
-	LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
-	if(parcel)
-	{
-		getChildView("parcel_owner_controls")->setVisible( LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_MEDIA));
-		getChildView("assign")->setEnabled(!mAddressCombo->getValue().asString().empty());
-	}
-	bool show_time_controls = false;
-	bool media_playing = false;
-	if(mBrowser)
-	{
-		LLPluginClassMedia* media_plugin = mBrowser->getMediaPlugin();
-		if(media_plugin)
-		{
-			show_time_controls = media_plugin->pluginSupportsMediaTime();
-			media_playing = media_plugin->getStatus() == LLPluginClassMediaOwner::MEDIA_PLAYING;
-		}
-	}
-	getChildView("rewind")->setVisible( show_time_controls);
-	getChildView("play")->setVisible( show_time_controls && ! media_playing);
-	getChildView("pause")->setVisible( show_time_controls && media_playing);
-	getChildView("stop")->setVisible( show_time_controls);
-	getChildView("seek")->setVisible( show_time_controls);
-
-	getChildView("play")->setEnabled(! media_playing);
-	getChildView("stop")->setEnabled(media_playing);
-
-	getChildView("back")->setEnabled(mBrowser->canNavigateBack());
-	getChildView("forward")->setEnabled(mBrowser->canNavigateForward());
-
-	LLFloater::draw();
-}
-
-BOOL LLFloaterMediaBrowser::postBuild()
-{
-	mBrowser = getChild<LLMediaCtrl>("browser");
-	mBrowser->addObserver(this);
-
-	mAddressCombo = getChild<LLComboBox>("address");
-	mAddressCombo->setCommitCallback(onEnterAddress, this);
-	mAddressCombo->sortByName();
-
-	childSetAction("back", onClickBack, this);
-	childSetAction("forward", onClickForward, this);
-	childSetAction("reload", onClickRefresh, this);
-	childSetAction("rewind", onClickRewind, this);
-	childSetAction("play", onClickPlay, this);
-	childSetAction("stop", onClickStop, this);
-	childSetAction("pause", onClickPlay, this);
-	childSetAction("seek", onClickSeek, this);
-	childSetAction("go", onClickGo, this);
-	childSetAction("close", onClickClose, this);
-	childSetAction("open_browser", onClickOpenWebBrowser, this);
-	childSetAction("assign", onClickAssign, this);
-
-	buildURLHistory();
-
-	return TRUE;
-}
-
-void LLFloaterMediaBrowser::buildURLHistory()
-{
-	LLCtrlListInterface* url_list = childGetListInterface("address");
-	if (url_list)
-	{
-		url_list->operateOnAll(LLCtrlListInterface::OP_DELETE);
-	}
-
-	// Get all of the entries in the "browser" collection
-	LLSD browser_history = LLURLHistory::getURLHistory("browser");
-
-	LLSD::array_iterator iter_history =
-		browser_history.beginArray();
-	LLSD::array_iterator end_history =
-		browser_history.endArray();
-	for(; iter_history != end_history; ++iter_history)
-	{
-		std::string url = (*iter_history).asString();
-		if(! url.empty())
-			url_list->addSimpleElement(url);
-	}
-
-	// initialize URL history in the plugin
-	if(mBrowser && mBrowser->getMediaPlugin())
-	{
-		mBrowser->getMediaPlugin()->initializeUrlHistory(browser_history);
-	}
-}
-
-std::string LLFloaterMediaBrowser::getSupportURL()
-{
-	return getString("support_page_url");
-}
-
-//virtual
-void LLFloaterMediaBrowser::onClose(bool app_quitting)
-{
-	LLViewerMedia::proxyWindowClosed(mUUID);
-	//setVisible(FALSE);
-	destroy();
-}
-
-void LLFloaterMediaBrowser::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
-{
-	if(event == MEDIA_EVENT_LOCATION_CHANGED)
-	{
-		setCurrentURL(self->getLocation());
-	}
-	else if(event == MEDIA_EVENT_NAVIGATE_COMPLETE)
-	{
-		// This is the event these flags are sent with.
-		getChildView("back")->setEnabled(self->getHistoryBackAvailable());
-		getChildView("forward")->setEnabled(self->getHistoryForwardAvailable());
-	}
-	else if(event == MEDIA_EVENT_CLOSE_REQUEST)
-	{
-		// The browser instance wants its window closed.
-		closeFloater();
-	}
-	else if(event == MEDIA_EVENT_GEOMETRY_CHANGE)
-	{
-		geometryChanged(self->getGeometryX(), self->getGeometryY(), self->getGeometryWidth(), self->getGeometryHeight());
-	}
-}
-
-void LLFloaterMediaBrowser::setCurrentURL(const std::string& url)
-{
-	mCurrentURL = url;
-
-	mAddressCombo->remove(mCurrentURL);
-	mAddressCombo->add(mCurrentURL);
-	mAddressCombo->selectByValue(mCurrentURL);
-
-	// Serialize url history
-	LLURLHistory::removeURL("browser", mCurrentURL);
-	LLURLHistory::addURL("browser", mCurrentURL);
-
-	getChildView("back")->setEnabled(mBrowser->canNavigateBack());
-	getChildView("forward")->setEnabled(mBrowser->canNavigateForward());
-	getChildView("reload")->setEnabled(TRUE);
-}
-
-//static 
-void LLFloaterMediaBrowser::onEnterAddress(LLUICtrl* ctrl, void* user_data)
-{
-	LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-	self->mBrowser->navigateTo(self->mAddressCombo->getValue().asString());
-}
-
-//static 
-void LLFloaterMediaBrowser::onClickRefresh(void* user_data)
-{
-	LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
-	if( self->mBrowser->getMediaPlugin() &&  self->mBrowser->getMediaPlugin()->pluginSupportsMediaBrowser())
-	{
-		bool ignore_cache = true;
-		self->mBrowser->getMediaPlugin()->browse_reload( ignore_cache );
-	}
-	else
-	{
-		self->mBrowser->navigateTo(self->mCurrentURL);
-	}
-}
-
-//static 
-void LLFloaterMediaBrowser::onClickForward(void* user_data)
-{
-	LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
-	self->mBrowser->navigateForward();
-}
-
-//static 
-void LLFloaterMediaBrowser::onClickBack(void* user_data)
-{
-	LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
-	self->mBrowser->navigateBack();
-}
-
-//static 
-void LLFloaterMediaBrowser::onClickGo(void* user_data)
-{
-	LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
-	self->mBrowser->navigateTo(self->mAddressCombo->getValue().asString());
-}
-
-//static 
-void LLFloaterMediaBrowser::onClickClose(void* user_data)
-{
-	LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
-	self->closeFloater();
-}
-
-//static 
-void LLFloaterMediaBrowser::onClickOpenWebBrowser(void* user_data)
-{
-	LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
-	std::string url = self->mCurrentURL.empty() ? 
-		self->mBrowser->getHomePageUrl() :
-		self->mCurrentURL;
-	LLWeb::loadURLExternal(url);
-}
-
-void LLFloaterMediaBrowser::onClickAssign(void* user_data)
-{
-	LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
-	LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
-	if (!parcel)
-	{
-		return;
-	}
-	std::string media_url = self->mAddressCombo->getValue().asString();
-	LLStringUtil::trim(media_url);
-
-	if(parcel->getMediaType() != "text/html")
-	{
-		parcel->setMediaURL(media_url);
-		parcel->setMediaCurrentURL(media_url);
-		parcel->setMediaType(std::string("text/html"));
-		LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel, true );
-		LLViewerParcelMedia::sendMediaNavigateMessage(media_url);
-		LLViewerParcelMedia::stop();
-		// LLViewerParcelMedia::update( parcel );
-	}
-	LLViewerParcelMedia::sendMediaNavigateMessage(media_url);
-}
-//static 
-void LLFloaterMediaBrowser::onClickRewind(void* user_data)
-{
-	LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
-	if(self->mBrowser->getMediaPlugin())
-		self->mBrowser->getMediaPlugin()->start(-2.0f);
-}
-//static 
-void LLFloaterMediaBrowser::onClickPlay(void* user_data)
-{
-	LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
-	LLPluginClassMedia* plugin = self->mBrowser->getMediaPlugin();
-	if(plugin)
-	{
-		if(plugin->getStatus() == LLPluginClassMediaOwner::MEDIA_PLAYING)
-		{
-			plugin->pause();
-		}
-		else
-		{
-			plugin->start();
-		}
-	}
-}
-//static 
-void LLFloaterMediaBrowser::onClickStop(void* user_data)
-{
-	LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
-	if(self->mBrowser->getMediaPlugin())
-		self->mBrowser->getMediaPlugin()->stop();
-}
-//static 
-void LLFloaterMediaBrowser::onClickSeek(void* user_data)
-{
-	LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
-	if(self->mBrowser->getMediaPlugin())
-		self->mBrowser->getMediaPlugin()->start(2.0f);
-}
-void LLFloaterMediaBrowser::openMedia(const std::string& media_url, const std::string& target)
-{
-	mBrowser->setHomePageUrl(media_url);
-	mBrowser->setTarget(target);
-	mBrowser->navigateTo(media_url);
-	setCurrentURL(media_url);
-}
-
-
diff --git a/indra/newview/llfloatermediabrowser.h b/indra/newview/llfloatermediabrowser.h
deleted file mode 100644
index 152d221a01849c09d4ebd7ea616e45d19a993119..0000000000000000000000000000000000000000
--- a/indra/newview/llfloatermediabrowser.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/** 
- * @file llfloatermediabrowser.h
- * @brief media browser floater - uses embedded media browser control
- *
- * $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$
- */
-
-#ifndef LL_LLFLOATERMEDIABROWSER_H
-#define LL_LLFLOATERMEDIABROWSER_H
-
-#include "llfloater.h"
-#include "llmediactrl.h"
-
-
-class LLComboBox;
-class LLMediaCtrl;
-class LLNotification;
-
-class LLFloaterMediaBrowser : 
-	public LLFloater, 
-	public LLViewerMediaObserver
-{
-public:
-    LOG_CLASS(LLFloaterMediaBrowser);
-	LLFloaterMediaBrowser(const LLSD& key);
-
-	static void create(const std::string &url, const std::string& target, const std::string& uuid = LLStringUtil::null);
-
-	static void closeRequest(const std::string &uuid);
-	static void geometryChanged(const std::string &uuid, S32 x, S32 y, S32 width, S32 height);
-	void geometryChanged(S32 x, S32 y, S32 width, S32 height);
-	
-	/*virtual*/ BOOL postBuild();
-	/*virtual*/ void onClose(bool app_quitting);
-	/*virtual*/ void draw();
-
-	// inherited from LLViewerMediaObserver
-	/*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
-
-	void openMedia(const std::string& media_url, const std::string& target);
-	void buildURLHistory();
-	std::string getSupportURL();
-	void setCurrentURL(const std::string& url);
-
-	static void onEnterAddress(LLUICtrl* ctrl, void* user_data);
-	static void onClickRefresh(void* user_data);
-	static void onClickBack(void* user_data);
-	static void onClickForward(void* user_data);
-	static void onClickGo(void* user_data);
-	static void onClickClose(void* user_data);
-	static void onClickOpenWebBrowser(void* user_data);
-	static void onClickAssign(void* user_data);
-	static void onClickRewind(void* user_data);
-	static void onClickPlay(void* user_data);
-	static void onClickStop(void* user_data);
-	static void onClickSeek(void* user_data);
-
-private:
-	LLMediaCtrl* mBrowser;
-	LLComboBox* mAddressCombo;
-	std::string mCurrentURL;
-	boost::shared_ptr<LLNotification> mCurNotification;
-	std::string mUUID;
-};
-
-#endif  // LL_LLFLOATERMEDIABROWSER_H
-
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 18c3f7682609024b8ca72fc6360942ceeef0d924..acbec531b6adc5cb2ede24952fa856a07990a2f5 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -1128,19 +1128,78 @@ LLInventoryPanel* LLInventoryPanel::getActiveInventoryPanel(BOOL auto_open)
 	{
 		// Make sure the floater is not minimized (STORM-438).
 		if (active_inv_floaterp && active_inv_floaterp->isMinimized())
+		{
 			active_inv_floaterp->setMinimized(FALSE);
+		}
+	}	
+	else if (auto_open)
+	{
+		floater_inventory->openFloater();
 
-		return res;
+		res = sidepanel_inventory->getActivePanel();
 	}
+
+	return res;
+}
+
+//static
+void LLInventoryPanel::openInventoryPanelAndSetSelection(BOOL auto_open, const LLUUID& obj_id)
+{
+	LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(auto_open);
+
+	if (active_panel)
+	{
+		LL_DEBUGS("Messaging") << "Highlighting" << obj_id  << LL_ENDL;
 		
-	// C. If no panels are open and we don't want to force open a panel, then just abort out.
-	if (!auto_open) return NULL;
-	
-	// D. Open the inventory side panel floater and use that.
-	floater_inventory->openFloater();
-	return sidepanel_inventory->getActivePanel();
+		LLViewerInventoryItem * item = gInventory.getItem(obj_id);
+		LLViewerInventoryCategory * cat = gInventory.getCategory(obj_id);
+		
+		bool in_inbox = false;
+		bool in_outbox = false;
+		
+		LLViewerInventoryCategory * parent_cat = NULL;
+		
+		if (item)
+		{
+			parent_cat = gInventory.getCategory(item->getParentUUID());
+		}
+		else if (cat)
+		{
+			parent_cat = gInventory.getCategory(cat->getParentUUID());
+		}
+		
+		if (parent_cat)
+		{
+			in_inbox = (LLFolderType::FT_INBOX == parent_cat->getPreferredType());
+			in_outbox = (LLFolderType::FT_OUTBOX == parent_cat->getPreferredType());
+		}
+		
+		if (in_inbox || in_outbox)
+		{
+			LLSidepanelInventory * sidepanel_inventory =	LLFloaterSidePanelContainer::getPanel<LLSidepanelInventory>("inventory");
+			LLInventoryPanel * inventory_panel = NULL;
+			
+			if (in_inbox)
+			{
+				sidepanel_inventory->openInbox();
+				inventory_panel = sidepanel_inventory->getInboxPanel();
+			}
+			else
+			{
+				sidepanel_inventory->openOutbox();
+				inventory_panel = sidepanel_inventory->getOutboxPanel();
+			}
 
-	return NULL;
+			if (inventory_panel)
+			{
+				inventory_panel->setSelection(obj_id, TAKE_FOCUS_YES);
+			}
+		}
+		else
+		{
+			active_panel->setSelection(obj_id, TAKE_FOCUS_YES);
+		}
+	}
 }
 
 void LLInventoryPanel::addHideFolderType(LLFolderType::EType folder_type)
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index 8635ebc5c8df831186148b7bfd5b9b9ba6b222cf..2a24327115360a29e5becbeea5d5f5c779da160d 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -175,6 +175,8 @@ class LLInventoryPanel : public LLPanel
 	// Find whichever inventory panel is active / on top.
 	// "Auto_open" determines if we open an inventory panel if none are open.
 	static LLInventoryPanel *getActiveInventoryPanel(BOOL auto_open = TRUE);
+	
+	static void openInventoryPanelAndSetSelection(BOOL auto_open, const LLUUID& obj_id);
 
 protected:
 	void openStartFolderOrMyInventory(); // open the first level of inventory
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 58ba0219cc1b0c44cd92b9cdd88ff9813dba3284..74fa5d350a3da19ee3b06ccfa685b65f4dbc78a7 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -57,7 +57,6 @@
 #include "llcheckboxctrl.h"
 #include "llnotifications.h"
 #include "lllineeditor.h"
-#include "llfloatermediabrowser.h"
 #include "llfloaterwebcontent.h"
 #include "llwindowshade.h"
 
@@ -1082,26 +1081,6 @@ void LLMediaCtrl::onPopup(const LLSD& notification, const LLSD& response)
 {
 	if (response["open"])
 	{
-		// name of default floater to open
-		std::string floater_name = "media_browser";
-
-		// look for parent floater name
-		if ( gFloaterView )
-		{
-			if ( gFloaterView->getParentFloater(this) )
-			{
-				floater_name = gFloaterView->getParentFloater(this)->getInstanceName();
-			}
-			else
-			{
-				lldebugs << "No gFloaterView->getParentFloater(this) for onPopuup()" << llendl;
-			};
-		}
-		else
-		{
-			lldebugs << "No gFloaterView for onPopuup()" << llendl;
-		};
-
 		LLWeb::loadURL(notification["payload"]["url"], notification["payload"]["target"], notification["payload"]["uuid"]);
 	}
 	else
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index fc264db5af96ee9350e9f2e26af14afab69f29a6..146bcbe47b18cc8321b981323a3aca61c27cf48a 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -54,7 +54,6 @@
 #include "llworldmapmessage.h"
 #include "llappviewer.h"
 #include "llviewercontrol.h"
-#include "llfloatermediabrowser.h"
 #include "llweb.h"
 #include "llhints.h"
 
diff --git a/indra/newview/llpanelmarketplaceinboxinventory.cpp b/indra/newview/llpanelmarketplaceinboxinventory.cpp
index df89adb8daa8f6c7d3e996d2289a8991918cd4cd..678e4f28433bade734f6c66edd5434915cf69547 100644
--- a/indra/newview/llpanelmarketplaceinboxinventory.cpp
+++ b/indra/newview/llpanelmarketplaceinboxinventory.cpp
@@ -189,16 +189,16 @@ void LLInboxFolderViewFolder::draw()
 
 void LLInboxFolderViewFolder::selectItem()
 {
-	LLFolderViewFolder::selectItem();
-
 	deFreshify();
+
+	LLFolderViewFolder::selectItem();
 }
 
 void LLInboxFolderViewFolder::toggleOpen()
 {
-	LLFolderViewFolder::toggleOpen();
-
 	deFreshify();
+
+	LLFolderViewFolder::toggleOpen();
 }
 
 void LLInboxFolderViewFolder::computeFreshness()
@@ -270,7 +270,9 @@ BOOL LLInboxFolderViewItem::addToFolder(LLFolderViewFolder* folder, LLFolderView
 
 BOOL LLInboxFolderViewItem::handleDoubleClick(S32 x, S32 y, MASK mask)
 {
-	return TRUE;
+	deFreshify();
+	
+	return LLFolderViewItem::handleDoubleClick(x, y, mask);
 }
 
 // virtual
@@ -290,9 +292,9 @@ void LLInboxFolderViewItem::draw()
 
 void LLInboxFolderViewItem::selectItem()
 {
-	LLFolderViewItem::selectItem();
-
 	deFreshify();
+
+	LLFolderViewItem::selectItem();
 }
 
 void LLInboxFolderViewItem::computeFreshness()
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index 04e78e04e371cdaf7fd683658125e9748e75aa8e..b6c9f825df9f8b16a86b13f4f143c49dc105255e 100755
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -134,7 +134,10 @@ class LLPickHandler : public LLCommandHandler,
 		LLFloater* picks_floater = LLFloaterReg::showInstance("picks");
 
 		LLPanelPicks* picks = picks_floater->findChild<LLPanelPicks>("panel_picks");
-		picks->createNewPick();
+		if (picks)
+		{
+			picks->createNewPick();
+		}
 	}
 
 	void editPick(LLPickData* pick_info)
@@ -251,7 +254,10 @@ class LLClassifiedHandler :
 		LLFloater* picks_floater = LLFloaterReg::showInstance("picks");
 
 		LLPanelPicks* picks = picks_floater->findChild<LLPanelPicks>("panel_picks");
-		picks->createNewClassified();
+		if (picks)
+		{
+			picks->createNewClassified();
+		}
 	}
 
 	void openClassified(LLAvatarClassifiedInfo* c_info)
@@ -269,7 +275,7 @@ class LLClassifiedHandler :
 			params["classified_name"] = c_info->name;
 			params["classified_desc"] = c_info->description;
 			params["from_search"] = true;
-			LLFloaterSidePanelContainer::showPanel("people", "panel_profile_view", params);
+			LLFloaterSidePanelContainer::showPanel("picks", params);
 		}
 		else if (mRequestVerb == "edit")
 		{
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 91f80355562905bc672724cf8793040499b0e1a0..9d069c3996c26c9901b9e6263deae2eb23f869b8 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -450,6 +450,24 @@ void LLSidepanelInventory::enableOutbox(bool enabled)
 	}
 }
 
+void LLSidepanelInventory::openInbox()
+{
+	if (mInboxEnabled)
+	{
+		getChild<LLButton>(INBOX_BUTTON_NAME)->setToggleState(true);
+		onToggleInboxBtn();
+	}
+}
+
+void LLSidepanelInventory::openOutbox()
+{
+	if (mOutboxEnabled)
+	{
+		getChild<LLButton>(OUTBOX_BUTTON_NAME)->setToggleState(true);
+		onToggleOutboxBtn();
+	}
+}
+
 void LLSidepanelInventory::onInboxChanged(const LLUUID& inbox_id)
 {
 	// Trigger a load of the entire inbox so we always know the contents and their creation dates for sorting
diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h
index 4e34926a4b2e2c533ab643760bbbe184d47dae07..2c6f8070139d385cae10a337fe25d052217e1fe9 100644
--- a/indra/newview/llsidepanelinventory.h
+++ b/indra/newview/llsidepanelinventory.h
@@ -58,6 +58,9 @@ class LLSidepanelInventory : public LLPanel
 	/*virtual*/ void onOpen(const LLSD& key);
 
 	LLInventoryPanel* getActivePanel(); // Returns an active inventory panel, if any.
+	LLInventoryPanel* getInboxPanel() const { return mInventoryPanelInbox; }
+	LLInventoryPanel* getOutboxPanel() const { return mInventoryPanelOutbox; }
+
 	LLPanelMainInventory* getMainInventoryPanel() const { return mPanelMainInventory; }
 	BOOL isMainInventoryPanelActive() const;
 
@@ -77,6 +80,9 @@ class LLSidepanelInventory : public LLPanel
 	void enableInbox(bool enabled);
 	void enableOutbox(bool enabled);
 	
+	void openInbox();
+	void openOutbox();
+	
 	bool isInboxEnabled() const { return mInboxEnabled; }
 	bool isOutboxEnabled() const { return mOutboxEnabled; }
 
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 9d8d1be0f5bab57adbb424be6b29ce79002d26db..66187f6b42852cba41eb232b3f952c7991b431fa 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -2034,7 +2034,7 @@ bool idle_startup()
 		show_debug_menus(); // Debug menu visiblity and First Use trigger
 		
 		// If we've got a startup URL, dispatch it
-		LLStartUp::dispatchURL();
+		//LLStartUp::dispatchURL();
 
 		// Retrieve information about the land data
 		// (just accessing this the first time will fetch it,
@@ -2694,12 +2694,12 @@ void LLStartUp::cleanupNameCache()
 bool LLStartUp::dispatchURL()
 {
 	// ok, if we've gotten this far and have a startup URL
-        if (!getStartSLURL().isValid())
+    if (!getStartSLURL().isValid())
 	{
 	  return false;
 	}
-        if(getStartSLURL().getType() != LLSLURL::APP)
-	  {
+    if(getStartSLURL().getType() != LLSLURL::APP)
+	{
 	    
 		// If we started with a location, but we're already
 		// at that location, don't pop dialogs open.
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 74c4f6d2dc69f52831936e7505b00fe11e927f69..273bf822bcf532c109503b87a1f3b8fd3888c10f 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -64,7 +64,6 @@
 #include "llfloatergroups.h"
 #include "llfloaterhardwaresettings.h"
 #include "llfloaterhelpbrowser.h"
-#include "llfloatermediabrowser.h"
 #include "llfloaterwebcontent.h"
 #include "llfloatermediasettings.h"
 #include "llfloaterhud.h"
@@ -226,7 +225,6 @@ void LLViewerFloaterReg::registerFloaters()
 	LLFloaterReg::add("land_holdings", "floater_land_holdings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLandHoldings>);
 	
 	LLFloaterReg::add("mem_leaking", "floater_mem_leaking.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMemLeak>);
-	LLFloaterReg::add("media_browser", "floater_media_browser.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMediaBrowser>);	
 	LLFloaterReg::add("media_settings", "floater_media_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMediaSettings>);	
 	LLFloaterReg::add("message_critical", "floater_critical.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterTOS>);
 	LLFloaterReg::add("message_tos", "floater_tos.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterTOS>);
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 2858330597ae786f9ec521bb3ef150b6615c9aa2..67c8a4b902ddc678cceb02d2c7ed1914abe3bf0a 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -69,7 +69,6 @@
 #include "llwindow.h"
 
 
-#include "llfloatermediabrowser.h"	// for handling window close requests and geometry change requests in media browser windows.
 #include "llfloaterwebcontent.h"	// for handling window close requests and geometry change requests in media browser windows.
 
 #include <boost/bind.hpp>	// for SkinFolder listener
@@ -3374,7 +3373,6 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
 			{
 				// This close request is directed at another instance
 				pass_through = false;
-				LLFloaterMediaBrowser::closeRequest(uuid);
 				LLFloaterWebContent::closeRequest(uuid);
 			}
 		}
@@ -3394,7 +3392,6 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
 			{
 				// This request is directed at another instance
 				pass_through = false;
-				LLFloaterMediaBrowser::geometryChanged(uuid, plugin->getGeometryX(), plugin->getGeometryY(), plugin->getGeometryWidth(), plugin->getGeometryHeight());
 				LLFloaterWebContent::geometryChanged(uuid, plugin->getGeometryX(), plugin->getGeometryY(), plugin->getGeometryWidth(), plugin->getGeometryHeight());
 			}
 		}
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 7cae19a1d21fae7ad03dcd71a9b2a04cf70df910..dca5cdd06dc44e1b1cb0da3104c9fac101693830 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -1256,14 +1256,7 @@ void open_inventory_offer(const uuid_vec_t& objects, const std::string& from_nam
 		const BOOL auto_open = 
 			gSavedSettings.getBOOL("ShowInInventory") && // don't open if showininventory is false
 			!from_name.empty(); // don't open if it's not from anyone.
-		LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(auto_open);
-		if(active_panel)
-		{
-			LL_DEBUGS("Messaging") << "Highlighting" << obj_id  << LL_ENDL;
-			LLFocusableElement* focus_ctrl = gFocusMgr.getKeyboardFocus();
-			active_panel->setSelection(obj_id, TAKE_FOCUS_NO);
-			gFocusMgr.setKeyboardFocus(focus_ctrl);
-		}
+		LLInventoryPanel::openInventoryPanelAndSetSelection(auto_open, obj_id);
 	}
 }
 
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index b2f35892d0ad768b793396d0de32650d63c965a4..d2d48dc68fac33321199b62d91bfc3111dffe9a5 100644
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -34,7 +34,6 @@
 
 #include "llagent.h"
 #include "llappviewer.h"
-#include "llfloatermediabrowser.h"
 #include "llfloaterwebcontent.h"
 #include "llfloaterreg.h"
 #include "lllogininstance.h"
@@ -78,32 +77,15 @@ void LLWeb::initClass()
 }
 
 
-// static
-void LLWeb::loadURL(const std::string& url, const std::string& target, const std::string& uuid)
-{
-	loadWebURL(url, target, uuid);
-	//if(target == "_internal")
-	//{
-	//	// Force load in the internal browser, as if with a blank target.
-	//	loadURLInternal(url, "", uuid);
-	//}
-	//else if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external"))
-	//{
-	//	loadURLExternal(url);
-	//}
-	//else
-	//{
-	//	loadURLInternal(url, target, uuid);
-	//}
-}
+
 
 // static
-void LLWeb::loadWebURL(const std::string& url, const std::string& target, const std::string& uuid)
+void LLWeb::loadURL(const std::string& url, const std::string& target, const std::string& uuid)
 {
 	if(target == "_internal")
 	{
 		// Force load in the internal browser, as if with a blank target.
-		loadWebURLInternal(url, "", uuid);
+		loadURLInternal(url, "", uuid);
 	}
 	else if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external"))
 	{
@@ -111,19 +93,13 @@ void LLWeb::loadWebURL(const std::string& url, const std::string& target, const
 	}
 	else
 	{
-		loadWebURLInternal(url, target, uuid);
+		loadURLInternal(url, target, uuid);
 	}
 }
 
-// static
-void LLWeb::loadURLInternal(const std::string &url, const std::string& target, const std::string& uuid)
-{
-	LLFloaterMediaBrowser::create(url, target, uuid);
-}
-
 // static
 // Explicitly open a Web URL using the Web content floater
-void LLWeb::loadWebURLInternal(const std::string &url, const std::string& target, const std::string& uuid)
+void LLWeb::loadURLInternal(const std::string &url, const std::string& target, const std::string& uuid)
 {
 	LLFloaterWebContent::Params p;
 	p.url(url).target(target).id(uuid);
diff --git a/indra/newview/llweb.h b/indra/newview/llweb.h
index 376abc0ecea55bd1f49f96ed04c4c23938c42de7..0b95f664d681f0ec510c5ddfd1296658f5590ee0 100644
--- a/indra/newview/llweb.h
+++ b/indra/newview/llweb.h
@@ -42,23 +42,15 @@ class LLWeb
 public:
 	static void initClass();
 	
-	/// Load the given url in the user's preferred web browser
-	static void loadURL(const std::string& url, const std::string& target, const std::string& uuid = LLStringUtil::null);
-	static void loadURL(const std::string& url) { loadURL(url, LLStringUtil::null); }
-	/// Load the given url in the user's preferred web browser	
-	static void loadURL(const char* url, const std::string& target = LLStringUtil::null) { loadURL( ll_safe_string(url), target); }
-	/// Load the given url in the Second Life internal web browser
-	static void loadURLInternal(const std::string &url, const std::string& target, const std::string& uuid = LLStringUtil::null);
-	static void loadURLInternal(const std::string &url) { loadURLInternal(url, LLStringUtil::null, LLStringUtil::null);}
 	/// Load the given url in the operating system's web browser, async if we want to return immediately
 	/// before browser has spawned
 	static void loadURLExternal(const std::string& url) {loadURLExternal(url, LLStringUtil::null);}
 	static void loadURLExternal(const std::string& url, const std::string& uuid);
 	static void loadURLExternal(const std::string& url, bool async, const std::string& uuid = LLStringUtil::null);
 
-	// Explicitly open a Web URL using the Web content floater vs. the more general media browser
-	static void loadWebURL(const std::string& url, const std::string& target, const std::string& uuid);
-	static void loadWebURLInternal(const std::string &url, const std::string& target = LLStringUtil::null, const std::string& uuid = LLStringUtil::null);
+	static void loadURL(const std::string& url, const std::string& target = LLStringUtil::null, const std::string& uuid = LLStringUtil::null);
+	// load content using built-in browser
+	static void loadURLInternal(const std::string &url, const std::string& target = LLStringUtil::null, const std::string& uuid = LLStringUtil::null);
 
 	/// Returns escaped url (eg, " " to "%20") - used by all loadURL methods
 	static std::string escapeURL(const std::string& url);
diff --git a/indra/newview/llworldmapmessage.cpp b/indra/newview/llworldmapmessage.cpp
index 66d0d698ba490218beb4466c57fda20ce9a4ed26..8307d323362b8348026a7fbbafb21f0af216b0c6 100644
--- a/indra/newview/llworldmapmessage.cpp
+++ b/indra/newview/llworldmapmessage.cpp
@@ -210,15 +210,14 @@ void LLWorldMapMessage::processMapBlockReply(LLMessageSystem* msg, void**)
 		}
 
 		// Handle the SLURL callback if any
-		if(LLWorldMapMessage::getInstance()->mSLURLCallback != NULL)
+		url_callback_t callback = LLWorldMapMessage::getInstance()->mSLURLCallback;
+		if(callback != NULL)
 		{
 			U64 handle = to_region_handle(x_world, y_world);
 			// Check if we reached the requested region
 			if ((LLStringUtil::compareInsensitive(LLWorldMapMessage::getInstance()->mSLURLRegionName, name)==0)
 				|| (LLWorldMapMessage::getInstance()->mSLURLRegionHandle == handle))
 			{
-				url_callback_t callback = LLWorldMapMessage::getInstance()->mSLURLCallback;
-
 				LLWorldMapMessage::getInstance()->mSLURLCallback = NULL;
 				LLWorldMapMessage::getInstance()->mSLURLRegionName.clear();
 				LLWorldMapMessage::getInstance()->mSLURLRegionHandle = 0;
diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml
index 80e310a8735fa1ea9f301885468fa99d0a38c952..8ac1ac9e093fec25f7f4309cd08fcd4d143f7849 100644
--- a/indra/newview/skins/default/xui/en/menu_login.xml
+++ b/indra/newview/skins/default/xui/en/menu_login.xml
@@ -167,13 +167,6 @@
              function="Floater.Show"
              parameter="message_critical" />
         </menu_item_call>
-        <menu_item_call
-         label="Media Browser Test"
-         name="Web Browser Test">
-          <menu_item_call.on_click
-           function="Advanced.WebBrowserTest"
-           parameter="http://join.secondlife.com/"/>
-        </menu_item_call>
       <menu_item_call
        label="Web Content Floater Debug Test"
        name="Web Content Floater Debug Test">
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml
index f47e9874b4541ee10272815620002160ce29362f..0e29ed0d0bf73cb51f670a33cd33c04a32508b81 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml
@@ -22,6 +22,7 @@
       draw_border="false"
       height="24"
       left="25"
+      bottom="1"      
       name="speaker"
       visible="false"
       width="20" />
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml
index 8dfdf95e8093e773759f11e3b995ecbccbc68945..77011139bfe0f9835f4cb1ad200e235ef816729f 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml
@@ -22,6 +22,7 @@
       draw_border="false"
       height="24"
       left="25"
+      bottom="1"      
       name="speaker"
       visible="false"
       width="20" />
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml
index cef698e57796ed64f192932bd48de04457cf9a25..8b56a8f0f690cb9183e90afd2849a16c4af9e67e 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml
@@ -22,6 +22,7 @@
       draw_border="false"
       height="24"
       left="25"
+      bottom="1"
       name="speaker"
       visible="false"
       width="20" />