diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt
index 0bbdcfd6ffe8048afc77a55c2b6ad2d0442b442c..673494820f9a0ed5f8a639042deaf909535dda9f 100644
--- a/indra/llui/CMakeLists.txt
+++ b/indra/llui/CMakeLists.txt
@@ -29,6 +29,7 @@ set(llui_SOURCE_FILES
     llaccordionctrl.cpp
     llaccordionctrltab.cpp
     llbadge.cpp
+	llbadgeholder.cpp
     llbadgeowner.cpp
     llbutton.cpp
     llcheckboxctrl.cpp
@@ -123,6 +124,7 @@ set(llui_HEADER_FILES
     llaccordionctrl.h
     llaccordionctrltab.h
     llbadge.h
+	llbadgeholder.h
     llbadgeowner.h
     llbutton.h
     llcallbackmap.h
diff --git a/indra/llui/llbadge.cpp b/indra/llui/llbadge.cpp
index c28a947a7fa1eb2e8fb2486d19b314a26739dd5d..fde3c53a6512ae79da093eea1bb2cef77822131a 100644
--- a/indra/llui/llbadge.cpp
+++ b/indra/llui/llbadge.cpp
@@ -43,6 +43,8 @@ LLBadge::Params::Params()
 	, image_color("image_color")
 	, label("label")
 	, label_color("label_color")
+	, label_offset_horiz("label_offset_horiz")
+	, label_offset_vert("label_offset_vert")
 	, location("location", LLRelPos::TOP_LEFT)
 	, location_percent_hcenter("location_percent_hcenter")
 	, location_percent_vcenter("location_percent_vcenter")
@@ -65,6 +67,8 @@ bool LLBadge::Params::equals(const Params& a) const
 	comp &= (image_color() == a.image_color());
 	comp &= (label() == a.label());
 	comp &= (label_color() == a.label_color());
+	comp &= (label_offset_horiz() == a.label_offset_horiz());
+	comp &= (label_offset_vert() == a.label_offset_vert());
 	comp &= (location() == a.location());
 	comp &= (location_percent_hcenter() == a.location_percent_hcenter());
 	comp &= (location_percent_vcenter() == a.location_percent_vcenter());
@@ -84,6 +88,8 @@ LLBadge::LLBadge(const LLBadge::Params& p)
 	, mImageColor(p.image_color)
 	, mLabel(p.label)
 	, mLabelColor(p.label_color)
+	, mLabelOffsetHoriz(p.label_offset_horiz)
+	, mLabelOffsetVert(p.label_offset_vert)
 	, mLocation(p.location)
 	, mLocationPercentHCenter(0.5f)
 	, mLocationPercentVCenter(0.5f)
@@ -131,6 +137,18 @@ LLBadge::~LLBadge()
 {
 }
 
+bool LLBadge::addToView(LLView * view)
+{
+	bool child_added = view->addChild(this);
+
+	if (child_added)
+	{
+		setShape(view->getLocalRect());
+	}
+
+	return child_added;
+}
+
 void LLBadge::setLabel(const LLStringExplicit& label)
 {
 	mLabel = label;
@@ -241,8 +259,10 @@ void LLBadge::draw()
 			// Draw the label
 			//
 
-			mGLFont->render(badge_label_wstring, badge_label_begin_offset,
-							badge_center_x, badge_center_y,
+			mGLFont->render(badge_label_wstring,
+							badge_label_begin_offset,
+							badge_center_x + mLabelOffsetHoriz,
+							badge_center_y + mLabelOffsetVert,
 							mLabelColor % alpha,
 							LLFontGL::HCENTER, LLFontGL::VCENTER, // centered around the position
 							LLFontGL::NORMAL, // normal text (not bold, italics, etc.)
diff --git a/indra/llui/llbadge.h b/indra/llui/llbadge.h
index 0f923ef01b78e856928049a08d2bf6c5bee7bdf4..f81ccdf0cd1640cacb592bcd5916e861074ff066 100644
--- a/indra/llui/llbadge.h
+++ b/indra/llui/llbadge.h
@@ -104,6 +104,9 @@ class LLBadge
 		Optional< std::string >			label;
 		Optional< LLUIColor >			label_color;
 
+		Optional< S32 >					label_offset_horiz;
+		Optional< S32 >					label_offset_vert;
+
 		Optional< LLRelPos::Location >	location;
 		Optional< U32 >					location_percent_hcenter;
 		Optional< U32 >					location_percent_vcenter;
@@ -123,7 +126,9 @@ class LLBadge
 public:
 
 	~LLBadge();
-	
+
+	bool				addToView(LLView * view);
+
 	virtual void		draw();
 
 	const std::string	getLabel() const { return wstring_to_utf8str(mLabel); }
@@ -141,6 +146,9 @@ class LLBadge
 	LLUIString				mLabel;
 	LLUIColor				mLabelColor;
 
+	S32						mLabelOffsetHoriz;
+	S32						mLabelOffsetVert;
+
 	LLRelPos::Location		mLocation;
 	F32						mLocationPercentHCenter;
 	F32						mLocationPercentVCenter;
diff --git a/indra/llui/llbadgeholder.cpp b/indra/llui/llbadgeholder.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..1f786f36ae4cb4fe043232f033d6a26a8bd0ec5a
--- /dev/null
+++ b/indra/llui/llbadgeholder.cpp
@@ -0,0 +1,45 @@
+/** 
+ * @file llbadgeholder.cpp
+ * @brief Source for badge holders
+ *
+ * $LicenseInfo:firstyear=2001&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 "llbadgeholder.h"
+
+#include "llbadge.h"
+#include "llview.h"
+
+
+bool LLBadgeHolder::addBadge(LLBadge * badge)
+{
+	bool badge_added = false;
+
+	LLView * this_view = dynamic_cast<LLView *>(this);
+
+	if (this_view && mAcceptsBadge)
+	{
+		badge_added = badge->addToView(this_view);
+	}
+
+	return badge_added;
+}
diff --git a/indra/llui/llbadgeholder.h b/indra/llui/llbadgeholder.h
new file mode 100644
index 0000000000000000000000000000000000000000..2538eaae91c17e854fa4834ad94b63a8a7a399b9
--- /dev/null
+++ b/indra/llui/llbadgeholder.h
@@ -0,0 +1,56 @@
+/** 
+ * @file llbadgeholder.h
+ * @brief Header for badge holders
+ *
+ * $LicenseInfo:firstyear=2001&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_LLBADGEHOLDER_H
+#define LL_LLBADGEHOLDER_H
+
+//
+// Classes
+//
+
+class LLBadge;
+
+class LLBadgeHolder
+{
+public:
+
+	LLBadgeHolder(bool acceptsBadge)
+		: mAcceptsBadge(acceptsBadge)
+	{
+	}
+
+	void setAcceptsBadge(bool acceptsBadge) { mAcceptsBadge = acceptsBadge; }
+	bool acceptsBadge() const { return mAcceptsBadge; }
+
+	virtual bool addBadge(LLBadge * badge);
+
+private:
+
+	bool		mAcceptsBadge;
+
+};
+
+#endif  // LL_LLBADGEHOLDER_H
diff --git a/indra/llui/llbadgeowner.cpp b/indra/llui/llbadgeowner.cpp
index 77f15567bf655d5a155605c55d11a3f6336a1d9c..1860a05eddc2b7a6fadea30ce4fbf6c6ace14ef1 100644
--- a/indra/llui/llbadgeowner.cpp
+++ b/indra/llui/llbadgeowner.cpp
@@ -26,6 +26,7 @@
 
 #include "linden_common.h"
 
+#include "llbadgeholder.h"
 #include "llbadgeowner.h"
 #include "llpanel.h"
 
@@ -81,40 +82,44 @@ void LLBadgeOwner::setBadgeVisibility(bool visible)
 	}
 }
 
-void LLBadgeOwner::addBadgeToParentPanel()
+bool LLBadgeOwner::addBadgeToParentPanel()
 {
+	bool badge_added = false;
+
 	LLView * owner_view = mBadgeOwnerView.get();
 	
 	if (mBadge && owner_view)
 	{
-		// Badge parent is badge owner by default
-		LLView * badge_parent = owner_view;
+		LLBadgeHolder * badge_holder = NULL;
 
-		// Find the appropriate parent for the badge
+		// Find the appropriate holder for the badge
 		LLView * parent = owner_view->getParent();
 
 		while (parent)
 		{
-			LLPanel * parent_panel = dynamic_cast<LLPanel *>(parent);
+			LLBadgeHolder * badge_holder_panel = dynamic_cast<LLBadgeHolder *>(parent);
 
-			if (parent_panel && parent_panel->acceptsBadge())
+			if (badge_holder_panel && badge_holder_panel->acceptsBadge())
 			{
-				badge_parent = parent;
+				badge_holder = badge_holder_panel;
 				break;
 			}
 
 			parent = parent->getParent();
 		}
 
-		if (badge_parent)
+		if (badge_holder)
 		{
-			badge_parent->addChild(mBadge);
+			badge_added = badge_holder->addBadge(mBadge);
 		}
 		else
 		{
-			llwarns << "Unable to find parent panel for badge " << mBadge->getName() << " on " << owner_view->getName() << llendl;
+			// Badge parent is fallback badge owner if no valid holder exists in the hierarchy
+			badge_added = mBadge->addToView(owner_view);
 		}
 	}
+
+	return badge_added;
 }
 
 LLBadge* LLBadgeOwner::createBadge(const LLBadge::Params& p)
diff --git a/indra/llui/llbadgeowner.h b/indra/llui/llbadgeowner.h
index a2399189a5530b832b7fa828468005833569d1ea..8d03e30645089aa1bf373dba40021f0cc9cea016 100644
--- a/indra/llui/llbadgeowner.h
+++ b/indra/llui/llbadgeowner.h
@@ -41,7 +41,7 @@ class LLBadgeOwner
 	LLBadgeOwner(LLHandle< LLView > viewHandle);
 
 	void initBadgeParams(const LLBadge::Params& p);
-	void addBadgeToParentPanel();
+	bool addBadgeToParentPanel();
 	
 	bool badgeHasParent() const { return (mBadge && mBadge->getParent()); }
 
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index 5b7b020881191258cbf728ef577f4e9128269571..9aae1afc62d7b6fe85c3d693d142dec5b8aadf77 100644
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -253,7 +253,7 @@ friend class LLMultiFloater;
 
 	LLHandle<LLFloater> getHandle() const { return mHandle; }
 	const LLSD& 	getKey() { return mKey; }
-	BOOL		 	matchesKey(const LLSD& key) { return mSingleInstance || KeyCompare::equate(key, mKey); }
+	virtual bool	matchesKey(const LLSD& key) { return mSingleInstance || KeyCompare::equate(key, mKey); }
 	
 	const std::string& getInstanceName() { return mInstanceName; }
 	
diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp
index 4677d535db3698eced8a32df4c944d1dfb6394ba..f5e6444287ebf200c38ade8dae93dfa3a8076af3 100644
--- a/indra/llui/llfloaterreg.cpp
+++ b/indra/llui/llfloaterreg.cpp
@@ -129,7 +129,10 @@ LLFloater* LLFloaterReg::getInstance(const std::string& name, const LLSD& key)
 				}
 					
 				// Note: key should eventually be a non optional LLFloater arg; for now, set mKey to be safe
-				res->mKey = key;
+				if (res->mKey.isUndefined()) 
+				{
+						res->mKey = key;
+				}
 				res->setInstanceName(name);
 				res->applySavedVariables(); // Can't apply rect and dock state until setting instance name
 				if (res->mAutoTile && !res->getHost() && index > 0)
@@ -221,7 +224,7 @@ LLFloater* LLFloaterReg::showInstance(const std::string& name, const LLSD& key,
 	LLFloater* instance = getInstance(name, key); 
 	if (instance) 
 	{
-		instance->openFloater(key);
+		instance->openFloater(instance->mKey);
 		if (focus)
 			instance->setFocus(TRUE);
 	}
diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp
index 1dcdd79efae5cd37e7ae925ec8871e490e4f52d3..775db6bc9d08d962b9e991550cc2838c5676a79f 100644
--- a/indra/llui/llpanel.cpp
+++ b/indra/llui/llpanel.cpp
@@ -99,6 +99,7 @@ LLPanel::Params::Params()
 
 LLPanel::LLPanel(const LLPanel::Params& p)
 :	LLUICtrl(p),
+	LLBadgeHolder(p.accepts_badge),
 	mBgVisible(p.background_visible),
 	mBgOpaque(p.background_opaque),
 	mBgOpaqueColor(p.bg_opaque_color()),
@@ -114,8 +115,7 @@ LLPanel::LLPanel(const LLPanel::Params& p)
 	mCommitCallbackRegistrar(false),
 	mEnableCallbackRegistrar(false),
 	mXMLFilename(p.filename),
-	mVisibleSignal(NULL),
-	mAcceptsBadge(p.accepts_badge)
+	mVisibleSignal(NULL)
 	// *NOTE: Be sure to also change LLPanel::initFromParams().  We have too
 	// many classes derived from LLPanel to retrofit them all to pass in params.
 {
@@ -488,7 +488,7 @@ void LLPanel::initFromParams(const LLPanel::Params& p)
 	mBgOpaqueImageOverlay = p.bg_opaque_image_overlay;
 	mBgAlphaImageOverlay = p.bg_alpha_image_overlay;
 
-	mAcceptsBadge = p.accepts_badge;
+	setAcceptsBadge(p.accepts_badge);
 }
 
 static LLFastTimer::DeclareTimer FTM_PANEL_SETUP("Panel Setup");
diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h
index 67674fab7e9ca9f56727787907585f1c7392d796..1b777ee1cb684181a0aaf2b7bf2789b4a6baea7f 100644
--- a/indra/llui/llpanel.h
+++ b/indra/llui/llpanel.h
@@ -35,6 +35,7 @@
 #include "lluiimage.h"
 #include "lluistring.h"
 #include "v4color.h"
+#include "llbadgeholder.h"
 #include <list>
 #include <queue>
 
@@ -51,7 +52,7 @@ class LLUIImage;
  * With or without border,
  * Can contain LLUICtrls.
  */
-class LLPanel : public LLUICtrl
+class LLPanel : public LLUICtrl, public LLBadgeHolder
 {
 public:
 	struct LocalizedString : public LLInitParam::Block<LocalizedString>
@@ -252,8 +253,6 @@ class LLPanel : public LLUICtrl
 	
 	boost::signals2::connection setVisibleCallback( const commit_signal_t::slot_type& cb );
 
-	bool acceptsBadge() const { return mAcceptsBadge; }
-
 protected:
 	// Override to set not found list
 	LLButton*		getDefaultButton() { return mDefaultBtn; }
@@ -268,7 +267,6 @@ class LLPanel : public LLUICtrl
 	static factory_stack_t	sFactoryStack;
 	
 private:
-	bool			mAcceptsBadge;
 	BOOL			mBgVisible;				// any background at all?
 	BOOL			mBgOpaque;				// use opaque color or image
 	LLUIColor		mBgOpaqueColor;
diff --git a/indra/llui/llsdparam.h b/indra/llui/llsdparam.h
index 69dab2b411cf5159934f4b011f5fcc9702f1caa4..f776c781b33c642b59537d07adcd6a02fd5076f8 100644
--- a/indra/llui/llsdparam.h
+++ b/indra/llui/llsdparam.h
@@ -93,8 +93,17 @@ class LLSDParamAdapter : public T
 			LLParamSDParser parser;
 			parser.readSD(sd, *this);
 		}
+
+		operator LLSD() const
+		{
+			LLParamSDParser parser;
+			LLSD sd;
+			parser.writeSD(sd, *this);
+			return sd;
+		}
 		
 		LLSDParamAdapter(const T& val)
+		: T(val)
 		{
 			T::operator=(val);
 		}
diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h
index 35c889b69fa2704cade2036f3493c96ead61f7ef..7c4d4c8a4382abd0c8aa5033945a0d254806ca6f 100644
--- a/indra/llxuixml/llinitparam.h
+++ b/indra/llxuixml/llinitparam.h
@@ -1775,8 +1775,8 @@ namespace LLInitParam
 
 		void serializeBlock(Parser& parser, Parser::name_stack_t name_stack = Parser::name_stack_t(), const BaseBlock* diff_block = NULL) const
 		{
-			const self_t& typed_param = static_cast<const self_t&>(*this);
-			const self_t* diff_param = static_cast<const self_t*>(diff_block);
+			const derived_t& typed_param = static_cast<const derived_t&>(*this);
+			const derived_t* diff_param = static_cast<const derived_t*>(diff_block);
 			
 			std::string key = typed_param.getValueName();
 
@@ -1801,6 +1801,8 @@ namespace LLInitParam
 					// be exported as <color green="1"/>, since it was probably the intent of the user to 
 					// be specific about the RGB color values.  This also fixes an issue where we distinguish
 					// between rect.left not being provided and rect.left being explicitly set to 0 (same as default)
+					const_cast<derived_t&>(typed_param).updateBlockFromValue();
+
 					block_t::serializeBlock(parser, name_stack, NULL);
 				}
 			}
@@ -1863,7 +1865,7 @@ namespace LLInitParam
 			mValueAge = VALUE_AUTHORITATIVE;
 			mValue = val;
 			typed_param.clearValueName();
-			static_cast<derived_t*>(const_cast<self_t*>(this))->updateBlockFromValue();
+			static_cast<derived_t*>(this)->updateBlockFromValue();
 		}
 
 		value_assignment_t getValue() const
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 8344b08bfb24c5e6e6ef004580ec9886c4cef1bd..48827676cdf161a10e08fb227285746895e83f0b 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -316,7 +316,11 @@ static void on_avatar_name_show_profile(const LLUUID& agent_id, const LLAvatarNa
 	// PROFILES: open in webkit window
 	const bool show_chrome = false;
 	static LLCachedControl<LLRect> profile_rect(gSavedSettings, "WebProfileRect");
-	LLFloaterWebContent::create(url, "", agent_id.asString(), show_chrome, profile_rect);
+	LLFloaterWebContent::create(LLFloaterWebContent::Params().
+							url(url).
+							id(agent_id).
+							show_chrome(show_chrome).
+							preferred_media_size(profile_rect));
 }
 
 // static
diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp
index d5806e375c18ab8e02dd623467d65c3c63b28f22..ce0bba802d7c4cfebf50344bf5b306a91383e5e9 100644
--- a/indra/newview/llfloatersearch.cpp
+++ b/indra/newview/llfloatersearch.cpp
@@ -70,21 +70,28 @@ class LLSearchHandler : public LLCommandHandler
 		}
 
 		// create the LLSD arguments for the search floater
-		LLSD args;
-		args["category"] = category;
-		args["id"] = LLURI::unescape(search_text);
+		LLFloaterSearch::Params p;
+		p.category = category;
+		p.query = LLURI::unescape(search_text);
 
 		// open the search floater and perform the requested search
-		LLFloaterReg::showInstance("search", args);
+		LLFloaterReg::showInstance("search", p);
 		return true;
 	}
 };
 LLSearchHandler gSearchHandler;
 
-LLFloaterSearch::LLFloaterSearch(const LLSD& key) :
-	LLFloater(key),
-	LLViewerMediaObserver(),
-	mBrowser(NULL),
+LLFloaterSearch::_Params::_Params()
+:	category("category", ""),
+	query("query")
+{
+	trusted_content = true;
+	allow_address_entry = false;
+}
+
+
+LLFloaterSearch::LLFloaterSearch(const Params& key) :
+	LLFloaterWebContent(key),
 	mSearchGodLevel(0)
 {
 	// declare a map that transforms a category name into
@@ -102,53 +109,43 @@ LLFloaterSearch::LLFloaterSearch(const LLSD& key) :
 
 BOOL LLFloaterSearch::postBuild()
 {
-	mBrowser = getChild<LLMediaCtrl>("browser");
-	mBrowser->addObserver(this);
+	LLFloaterWebContent::postBuild();
+	mWebBrowser->addObserver(this);
 
 	return TRUE;
 }
 
 void LLFloaterSearch::onOpen(const LLSD& key)
 {
+	LLFloaterWebContent::onOpen(key);
 	search(key);
 }
 
 void LLFloaterSearch::onClose(bool app_quitting)
 {
+	LLFloaterWebContent::onClose(app_quitting);
 	// tear down the web view so we don't show the previous search
 	// result when the floater is opened next time
 	destroy();
 }
 
-void LLFloaterSearch::handleMediaEvent(LLPluginClassMedia *self, EMediaEvent event)
-{
-	switch (event) 
-	{
-	case MEDIA_EVENT_NAVIGATE_BEGIN:
-		getChild<LLUICtrl>("status_text")->setValue(getString("loading_text"));
-		break;
-		
-	case MEDIA_EVENT_NAVIGATE_COMPLETE:
-		getChild<LLUICtrl>("status_text")->setValue(getString("done_text"));
-		break;
-
-	default:
-		break;
-	}
-}
-
 void LLFloaterSearch::godLevelChanged(U8 godlevel)
 {
 	// search results can change based upon god level - if the user
 	// changes god level, then give them a warning (we don't refresh
 	// the search as this might undo any page navigation or
 	// AJAX-driven changes since the last search).
-	getChildView("refresh_search")->setVisible( (godlevel != mSearchGodLevel));
+	
+	//FIXME: set status bar text
+
+	//getChildView("refresh_search")->setVisible( (godlevel != mSearchGodLevel));
 }
 
 void LLFloaterSearch::search(const LLSD &key)
 {
-	if (! mBrowser)
+	Params p(key);
+	
+	if (! mWebBrowser || !p.validateBlock())
 	{
 		return;
 	}
@@ -159,10 +156,9 @@ void LLFloaterSearch::search(const LLSD &key)
 
 	// work out the subdir to use based on the requested category
 	LLSD subs;
-	std::string category = key.has("category") ? key["category"].asString() : "";
-	if (mCategoryPaths.has(category))
+	if (mCategoryPaths.has(p.category))
 	{
-		subs["CATEGORY"] = mCategoryPaths[category].asString();
+		subs["CATEGORY"] = mCategoryPaths[p.category].asString();
 	}
 	else
 	{
@@ -170,8 +166,7 @@ void LLFloaterSearch::search(const LLSD &key)
 	}
 
 	// add the search query string
-	std::string search_text = key.has("id") ? key["id"].asString() : "";
-	subs["QUERY"] = LLURI::escape(search_text);
+	subs["QUERY"] = LLURI::escape(p.query);
 
 	// add the permissions token that login.cgi gave us
 	// We use "search_token", and fallback to "auth_token" if not present.
@@ -207,5 +202,5 @@ void LLFloaterSearch::search(const LLSD &key)
 	url = LLWeb::expandURLSubstitutions(url, subs);
 
 	// and load the URL in the web view
-	mBrowser->navigateTo(url, "text/html");
+	mWebBrowser->navigateTo(url, "text/html");
 }
diff --git a/indra/newview/llfloatersearch.h b/indra/newview/llfloatersearch.h
index ba4dc4c0fa2bc31152ef19e0a5978358a3cf1cb9..a4043b2353ad560fc60bfcceaf8d45f6e6cd8223 100644
--- a/indra/newview/llfloatersearch.h
+++ b/indra/newview/llfloatersearch.h
@@ -28,7 +28,7 @@
 #ifndef LL_LLFLOATERSEARCH_H
 #define LL_LLFLOATERSEARCH_H
 
-#include "llfloater.h"
+#include "llfloaterwebcontent.h"
 #include "llviewermediaobserver.h"
 
 #include <string>
@@ -43,11 +43,20 @@ class LLMediaCtrl;
 /// so that the user can click on teleport links in search results.
 ///
 class LLFloaterSearch : 
-	public LLFloater, 
-	public LLViewerMediaObserver
+	public LLFloaterWebContent
 {
 public:
-	LLFloaterSearch(const LLSD& key);
+	struct _Params : public LLInitParam::Block<_Params, LLFloaterWebContent::Params>
+	{
+		Optional<std::string> category;
+		Optional<std::string> query;
+
+		_Params();
+	};
+
+	typedef LLSDParamAdapter<_Params> Params;
+
+	LLFloaterSearch(const Params& key);
 
 	/// show the search floater with a new search
 	/// see search() for details on the key parameter.
@@ -70,10 +79,6 @@ class LLFloaterSearch :
 private:
 	/*virtual*/ BOOL postBuild();
 
-	// inherited from LLViewerMediaObserver
-	/*virtual*/ void handleMediaEvent(LLPluginClassMedia *self, EMediaEvent event);
-
-	LLMediaCtrl *mBrowser;
 	LLSD        mCategoryPaths;
 	U8          mSearchGodLevel;
 };
diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp
index 43eecbf0485f1c796f37c2a98e98ec4ac0ec9c3b..c7c6857a47fdb0998235abeec7573de137fd2bf5 100644
--- a/indra/newview/llfloaterwebcontent.cpp
+++ b/indra/newview/llfloaterwebcontent.cpp
@@ -40,8 +40,18 @@
 
 #include "llfloaterwebcontent.h"
 
-LLFloaterWebContent::LLFloaterWebContent( const LLSD& key )
-	: LLFloater( key )
+LLFloaterWebContent::_Params::_Params()
+:	url("url"),
+	target("target"),
+	id("id"),
+	show_chrome("show_chrome", true),
+	allow_address_entry("allow_address_entry", true),
+	preferred_media_size("preferred_media_size"),
+	trusted_content("trusted_content", false)
+{}
+
+LLFloaterWebContent::LLFloaterWebContent( const Params& key )
+: LLFloater( key )
 {
 	mCommitCallbackRegistrar.add( "WebContent.Back", boost::bind( &LLFloaterWebContent::onClickBack, this ));
 	mCommitCallbackRegistrar.add( "WebContent.Forward", boost::bind( &LLFloaterWebContent::onClickForward, this ));
@@ -75,6 +85,12 @@ BOOL LLFloaterWebContent::postBuild()
 	return TRUE;
 }
 
+bool LLFloaterWebContent::matchesKey(const LLSD& key)
+{
+	return key["target"].asString() == mKey["target"].asString();
+}
+
+
 void LLFloaterWebContent::initializeURLHistory()
 {
 	// start with an empty list
@@ -99,30 +115,23 @@ void LLFloaterWebContent::initializeURLHistory()
 }
 
 //static
-void LLFloaterWebContent::create( const std::string &url, const std::string& target, const std::string& uuid,  bool show_chrome, const LLRect& preferred_media_size)
+void LLFloaterWebContent::create( Params p)
 {
-	lldebugs << "url = " << url << ", target = " << target << ", uuid = " << uuid << llendl;
+	lldebugs << "url = " << p.url() << ", target = " << p.target() << ", uuid = " << p.id().asString() << llendl;
 
-	std::string tag = target;
+	if (!p.id.isProvided())
+	{
+		p.id = LLUUID::generateNewID();
+	}
 
-	if(target.empty() || target == "_blank")
+	if(!p.target.isProvided() || p.target() == "_blank")
 	{
-		if(!uuid.empty())
-		{
-			tag = uuid;
-		}
-		else
-		{
-			// create a unique tag for this instance
-			LLUUID id;
-			id.generate();
-			tag = id.asString();
-		}
+		p.target = p.id().asString();
 	}
 
 	S32 browser_window_limit = gSavedSettings.getS32("WebContentWindowLimit");
 
-	if(LLFloaterReg::findInstance("web_content", tag) != NULL)
+	if(LLFloaterReg::findInstance("web_content", p.target()) != NULL)
 	{
 		// There's already a web browser for this tag, so we won't be opening a new window.
 	}
@@ -136,7 +145,7 @@ void LLFloaterWebContent::create( const std::string &url, const std::string& tar
 
 		for(LLFloaterReg::const_instance_list_t::const_iterator iter = instances.begin(); iter != instances.end(); iter++)
 		{
-			lldebugs << "    " << (*iter)->getKey() << llendl;
+			lldebugs << "    " << (*iter)->getKey()["target"] << llendl;
 		}
 
 		if(instances.size() >= (size_t)browser_window_limit)
@@ -146,30 +155,7 @@ void LLFloaterWebContent::create( const std::string &url, const std::string& tar
 		}
 	}
 
-	LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*> (LLFloaterReg::showInstance("web_content", tag));
-	llassert(browser);
-	if(browser)
-	{
-		browser->mUUID = uuid;
-
-		// tell the browser instance to load the specified URL
-		browser->open_media(url, target);
-		LLViewerMedia::proxyWindowOpened(target, uuid);
-
-		browser->getChild<LLLayoutPanel>("status_bar")->setVisible(show_chrome);
-		browser->getChild<LLLayoutPanel>("nav_controls")->setVisible(show_chrome);
-
-		if (!show_chrome)
-		{
-			browser->setResizeLimits(100, 100);
-		}
-
-		if (!preferred_media_size.isEmpty())
-		{
-			//ignore x, y for now
-			browser->geometryChanged(browser->getRect().mLeft, browser->getRect().mBottom, preferred_media_size.getWidth(), preferred_media_size.getHeight());
-		}
-	}
+	LLFloaterReg::showInstance("web_content", p);
 }
 
 //static
@@ -227,13 +213,48 @@ void LLFloaterWebContent::geometryChanged(S32 x, S32 y, S32 width, S32 height)
 	setShape(geom);
 }
 
-void LLFloaterWebContent::open_media(const std::string& web_url, const std::string& target)
+void LLFloaterWebContent::open_media(const Params& p)
 {
 	// Specifying a mime type of text/html here causes the plugin system to skip the MIME type probe and just open a browser plugin.
-	mWebBrowser->setHomePageUrl(web_url, "text/html");
-	mWebBrowser->setTarget(target);
-	mWebBrowser->navigateTo(web_url, "text/html");
-	set_current_url(web_url);
+	LLViewerMedia::proxyWindowOpened(p.target(), p.id().asString());
+	mWebBrowser->setHomePageUrl(p.url, "text/html");
+	mWebBrowser->setTarget(p.target);
+	mWebBrowser->navigateTo(p.url, "text/html");
+
+	set_current_url(p.url);
+
+	getChild<LLLayoutPanel>("status_bar")->setVisible(p.show_chrome);
+	getChild<LLLayoutPanel>("nav_controls")->setVisible(p.show_chrome);
+	getChild<LLUICtrl>("address")->setEnabled(p.allow_address_entry && !p.trusted_content);
+
+	if (!p.show_chrome)
+	{
+		setResizeLimits(100, 100);
+	}
+
+	if (!p.preferred_media_size().isEmpty())
+	{
+		//ignore x, y for now
+		geometryChanged(getRect().mLeft, getRect().mBottom, p.preferred_media_size().getWidth(), p.preferred_media_size().getHeight());
+	}
+
+}
+
+void LLFloaterWebContent::onOpen(const LLSD& key)
+{
+	Params params(key);
+
+	if (!params.validateBlock())
+	{
+		closeFloater();
+		return;
+	}
+
+	mUUID = params.id().asString();
+	mWebBrowser->setTrustedContent(params.trusted_content);
+
+	// tell the browser instance to load the specified URL
+	open_media(params);
 }
 
 //virtual
diff --git a/indra/newview/llfloaterwebcontent.h b/indra/newview/llfloaterwebcontent.h
index 56b6ef12c8ea30b7f38a6750359ee34d6848d9d6..3a99d49b5ac489f21176e9c70f9401f18438b297 100644
--- a/indra/newview/llfloaterwebcontent.h
+++ b/indra/newview/llfloaterwebcontent.h
@@ -29,6 +29,7 @@
 
 #include "llfloater.h"
 #include "llmediactrl.h"
+#include "llsdparam.h"
 
 class LLMediaCtrl;
 class LLComboBox;
@@ -42,20 +43,39 @@ class LLFloaterWebContent :
 {
 public:
     LOG_CLASS(LLFloaterWebContent);
-	LLFloaterWebContent(const LLSD& key);
+
+	struct _Params : public LLInitParam::Block<_Params>
+	{
+		Optional<std::string>	url,
+								target;
+		Optional<LLUUID>		id;
+		Optional<bool>			show_chrome,
+								allow_address_entry,
+								trusted_content;
+		Optional<LLRect>		preferred_media_size;
+
+		_Params();
+	};
+
+	typedef LLSDParamAdapter<_Params> Params;
+
+	LLFloaterWebContent(const Params& key);
 
 	void initializeURLHistory();
 
-	static void create(const std::string &url, const std::string& target, const std::string& uuid = LLStringUtil::null, bool show_chrome = true, const LLRect& preferred_media_size = LLRect() );
+	static void create(Params);
 
 	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 onOpen(const LLSD& key);
+	/* virtual */ bool matchesKey(const LLSD& key);
 	/* virtual */ void onClose(bool app_quitting);
 	/* virtual */ void draw();
 
+protected:
 	// inherited from LLViewerMediaObserver
 	/*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
 
@@ -66,8 +86,7 @@ class LLFloaterWebContent :
 	void onEnterAddress();
 	void onPopExternal();
 
-private:
-	void open_media(const std::string& media_url, const std::string& target);
+	void open_media(const Params& );
 	void set_current_url(const std::string& url);
 
 	LLMediaCtrl* mWebBrowser;
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 702e8d5a1f1dbde5898663ea807dd148b2260d25..d5d40ca65d30e13fd33968a64ee75f14fcc087c4 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -902,6 +902,18 @@ void LLInventoryPanel::onFocusReceived()
 	LLPanel::onFocusReceived();
 }
 
+bool LLInventoryPanel::addBadge(LLBadge * badge)
+{
+	bool badge_added = false;
+
+	if (acceptsBadge())
+	{
+		badge_added = badge->addToView(mFolderRoot);
+	}
+
+	return badge_added;
+}
+
 void LLInventoryPanel::openAllFolders()
 {
 	mFolderRoot->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index a4287a438e790965f45ab9c33555cad90e886c40..7676bbb6d7ed752a5b95b8de48975a559fad60f2 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -125,6 +125,9 @@ class LLInventoryPanel : public LLPanel
 	 /*virtual*/ void onFocusLost();
 	 /*virtual*/ void onFocusReceived();
 
+	// LLBadgeHolder methods
+	bool addBadge(LLBadge * badge);
+
 	// Call this method to set the selection.
 	void openAllFolders();
 	void setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus);
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 03ccabc99441b8b2e3d88c0e51ae02b10df158e2..1eb786f433d873008c1f34e628c7bec12fb0c0e7 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -1164,3 +1164,12 @@ void LLMediaCtrl::hideNotification()
 		mWindowShade->hide();
 	}
 }
+
+void LLMediaCtrl::setTrustedContent(bool trusted)
+{
+	mTrusted = trusted;
+	if (mMediaSource)
+	{
+		mMediaSource->setTrustedBrowser(trusted);
+	}
+}
diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h
index 28666e620f310799a3347c20f6f478e54c36a404..6833453616530c837a2de76ef3ba6bb168b6bc56 100644
--- a/indra/newview/llmediactrl.h
+++ b/indra/newview/llmediactrl.h
@@ -149,6 +149,8 @@ class LLMediaCtrl :
 		void showNotification(boost::shared_ptr<class LLNotification> notify);
 		void hideNotification();
 
+		void setTrustedContent(bool trusted);
+
 		// over-rides
 		virtual BOOL handleKeyHere( KEY key, MASK mask);
 		virtual void handleVisibilityChange ( BOOL new_visibility );
@@ -176,7 +178,7 @@ class LLMediaCtrl :
 		LLViewBorder* mBorder;
 		bool mFrequentUpdates;
 		bool mForceUpdate;
-		const bool mTrusted;
+		bool mTrusted;
 		std::string mHomePageUrl;
 		std::string mHomePageMimeType;
 		std::string mCurrentNavUrl;
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index b8832dfd8e4a738d4e09c100e2bb4f2e9eb7c43e..9d54ad746310e4c6c17fcaeab95703b282aa1bc0 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -716,7 +716,7 @@ void LLNavigationBar::handleLoginComplete()
 
 void LLNavigationBar::invokeSearch(std::string search_text)
 {
-	LLFloaterReg::showInstance("search", LLSD().with("category", "all").with("id", LLSD(search_text)));
+	LLFloaterReg::showInstance("search", LLSD().with("category", "all").with("query", LLSD(search_text)));
 }
 
 void LLNavigationBar::clearHistoryCache()
diff --git a/indra/newview/llpanelmarketplaceinbox.cpp b/indra/newview/llpanelmarketplaceinbox.cpp
index 6db52e8f25636ed4d11b11e77bce8467532d5fc6..771b9c2f8f12c42baa958f085b8f7c4c6fd5e0c3 100644
--- a/indra/newview/llpanelmarketplaceinbox.cpp
+++ b/indra/newview/llpanelmarketplaceinbox.cpp
@@ -27,6 +27,7 @@
 #include "llviewerprecompiledheaders.h"
 
 #include "llpanelmarketplaceinbox.h"
+#include "llpanelmarketplaceinboxinventory.h"
 
 #include "llappviewer.h"
 #include "llbutton.h"
@@ -36,9 +37,6 @@
 #include "llviewercontrol.h"
 
 
-#define SUPPORTING_FRESH_ITEM_COUNT	0
-
-
 static LLRegisterPanelClassWrapper<LLPanelMarketplaceInbox> t_panel_marketplace_inbox("panel_marketplace_inbox");
 
 const LLPanelMarketplaceInbox::Params& LLPanelMarketplaceInbox::getDefaultParams() 
@@ -159,10 +157,10 @@ U32 LLPanelMarketplaceInbox::getFreshItemCount() const
 
 			for (; folders_it != folders_end; ++folders_it)
 			{
-				const LLFolderViewFolder * folder = *folders_it;
+				const LLFolderViewFolder * folder_view = *folders_it;
+				const LLInboxFolderViewFolder * inbox_folder_view = dynamic_cast<const LLInboxFolderViewFolder*>(folder_view);
 
-				// TODO: Replace this check with new "fresh" flag
-				if (folder->getCreationDate() > 1500)
+				if (inbox_folder_view && inbox_folder_view->isFresh())
 				{
 					fresh_item_count++;
 				}
diff --git a/indra/newview/llpanelmarketplaceinboxinventory.cpp b/indra/newview/llpanelmarketplaceinboxinventory.cpp
index b88a697e0cd38bf72c1aabb380135fc1724c2a71..2c97d539a1ecff99b4e7c08eb2d051af54ae587e 100644
--- a/indra/newview/llpanelmarketplaceinboxinventory.cpp
+++ b/indra/newview/llpanelmarketplaceinboxinventory.cpp
@@ -141,24 +141,41 @@ LLFolderViewFolder * LLInboxInventoryPanel::createFolderViewFolder(LLInvFVBridge
 LLInboxFolderViewFolder::LLInboxFolderViewFolder(const Params& p)
 	: LLFolderViewFolder(p)
 	, LLBadgeOwner(getHandle())
-	, mFresh(false)
+	, mFresh(true)
 {
+#if SUPPORTING_FRESH_ITEM_COUNT
 	initBadgeParams(p.new_badge());
+#endif
 }
 
 LLInboxFolderViewFolder::~LLInboxFolderViewFolder()
 {
 }
 
+// virtual
+time_t LLInboxFolderViewFolder::getCreationDate() const
+{
+	time_t ret_val = LLFolderViewFolder::getCreationDate();
+
+	if (!mCreationDate)
+	{
+		updateFlag();
+	}
+
+	return ret_val;
+}
+
 // virtual
 void LLInboxFolderViewFolder::draw()
 {
+#if SUPPORTING_FRESH_ITEM_COUNT
 	if (!badgeHasParent())
 	{
 		addBadgeToParentPanel();
 	}
 	
 	setBadgeVisibility(mFresh);
+#endif
 
 	LLFolderViewFolder::draw();
 }
@@ -166,10 +183,7 @@ void LLInboxFolderViewFolder::draw()
 void LLInboxFolderViewFolder::updateFlag() const
 {
 	LLDate saved_freshness_date = LLDate(gSavedPerAccountSettings.getString("LastInventoryInboxExpand"));
-	if (getCreationDate() > saved_freshness_date.secondsSinceEpoch())
-	{
-		mFresh = true;
-	}
+	mFresh = (mCreationDate > saved_freshness_date.secondsSinceEpoch());
 }
 
 void LLInboxFolderViewFolder::selectItem()
diff --git a/indra/newview/llpanelmarketplaceinboxinventory.h b/indra/newview/llpanelmarketplaceinboxinventory.h
index 7b124fdccc90eb5c00757ae96721640f7cdee68d..8946b9dc98dbb4120b5d0f5bd3a1aa2a3068646e 100644
--- a/indra/newview/llpanelmarketplaceinboxinventory.h
+++ b/indra/newview/llpanelmarketplaceinboxinventory.h
@@ -32,6 +32,11 @@
 #include "llinventorypanel.h"
 #include "llfolderviewitem.h"
 
+
+#define SUPPORTING_FRESH_ITEM_COUNT	0
+
+
+
 class LLInboxInventoryPanel : public LLInventoryPanel
 {
 public:
@@ -66,12 +71,16 @@ class LLInboxFolderViewFolder : public LLFolderViewFolder, public LLBadgeOwner
 	
 	LLInboxFolderViewFolder(const Params& p);
 	~LLInboxFolderViewFolder();
+
+	time_t getCreationDate() const;
 	
 	void draw();
 	
 	void updateFlag() const;
 	void selectItem();
 	void toggleOpen();
+
+	bool isFresh() const { return mFresh; }
 	
 protected:
 	void setCreationDate(time_t creation_date_utc) const;
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 6ae8e79be4cd95af76eac3affd23d83e3da00692..0e58f54f8b322c32d93ae0c00647f0e1b09f840e 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -274,7 +274,7 @@ void LLViewerFloaterReg::registerFloaters()
 	LLFloaterReg::add("start_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterRunQueue>);
 	LLFloaterReg::add("stop_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNotRunQueue>);
 	LLFloaterReg::add("snapshot", "floater_snapshot.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSnapshot>);
-	LLFloaterReg::add("search", "floater_search.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSearch>);	
+	LLFloaterReg::add("search", "floater_web_content.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSearch>);	
 	
 	LLFloaterUIPreviewUtil::registerFloater();
 	LLFloaterReg::add("upload_anim", "floater_animation_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAnimPreview>, "upload");
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index b73017a51a2141cb525a1001e35c4bdfaa29152b..e4cdfaaaaf1dc17e81fd34f4fc6f3775e6ff4605 100644
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -81,19 +81,20 @@ void LLWeb::initClass()
 // static
 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.
-		loadURLInternal(url, "", uuid);
-	}
-	else if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external"))
-	{
-		loadURLExternal(url);
-	}
-	else
-	{
-		loadURLInternal(url, target, 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
@@ -124,17 +125,15 @@ void LLWeb::loadURLInternal(const std::string &url, const std::string& target, c
 // 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)
 {
-	LLFloaterWebContent::create(url, target, uuid);
+	LLFloaterWebContent::create(LLFloaterWebContent::Params().url(url).target(target).id(LLUUID(uuid)));
 }
 
-
 // static
 void LLWeb::loadURLExternal(const std::string& url, const std::string& uuid)
 {
 	loadURLExternal(url, true, uuid);
 }
 
-
 // static
 void LLWeb::loadURLExternal(const std::string& url, bool async, const std::string& uuid)
 {
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 8cdb615686ca4aa4838a4149ca705b24adec26f6..265d5dc801b51798531e18e8cdb9881e6c0eba23 100644
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -1752,13 +1752,13 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask )
 		case MAP_ITEM_LAND_FOR_SALE_ADULT:
 			{
 				LLFloaterReg::hideInstance("world_map");
-				LLFloaterReg::showInstance("search", LLSD().with("category", "destinations").with("id", id));
+				LLFloaterReg::showInstance("search", LLSD().with("category", "destinations").with("query", id));
 				break;
 			}
 		case MAP_ITEM_CLASSIFIED:
 			{
 				LLFloaterReg::hideInstance("world_map");
-				LLFloaterReg::showInstance("search", LLSD().with("category", "classifieds").with("id", id));
+				LLFloaterReg::showInstance("search", LLSD().with("category", "classifieds").with("query", id));
 				break;
 			}
 		default:
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 76965ad14ba2de0589e4c4edcbd381fa940a62f7..31b6fc77f58d55a9642f86efb186e9edaf96bf24 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -134,7 +134,7 @@
      reference="AvatarListItemIconOfflineColor" />
     <color
      name="BadgeImageColor"
-     value="0.44 0.69 0.56 1.0" />
+     value="1.0 0.40 0.0 1.0" />
     <color
      name="BadgeBorderColor"
      value="0.9 0.9 0.9 1.0" />
diff --git a/indra/newview/skins/default/textures/widgets/Badge_Background_New.png b/indra/newview/skins/default/textures/widgets/Badge_Background_New.png
new file mode 100644
index 0000000000000000000000000000000000000000..9f114f2e4aa0d0529e67af3d779dd9748488e6dd
Binary files /dev/null and b/indra/newview/skins/default/textures/widgets/Badge_Background_New.png differ
diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml
deleted file mode 100644
index 8770ede7e9f920348ed84c0d0536357d0ecf8ff5..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/floater_search.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="13"
- can_resize="true"
- height="600"
- layout="topleft"
- min_height="400"
- min_width="450"
- name="floater_search"
- help_topic="floater_search"
- save_rect="true"
- save_visibility="true"
- single_instance="true"
- title="FIND"
- width="650">
-    <floater.string
-     name="loading_text">
-        Loading...
-    </floater.string>
-    <floater.string
-     name="done_text">
-        Done
-    </floater.string>
-    <layout_stack
-     height="580"
-     follows="left|right|top|bottom"
-     layout="topleft"
-     left="10"
-     name="stack1"
-     top="20"
-     width="630">
-        <layout_panel
-         height="570"
-         layout="topleft"
-         left_delta="0"
-         top_delta="0"
-         name="browser_layout"
-         user_resize="false"
-         width="630">
-            <web_browser
-              trusted_content="true" 
-             follows="left|right|top|bottom"
-             layout="topleft"
-             left="0"
-             name="browser"
-             top="0"
-             height="540"
-             width="630" />
-            <text
-             follows="bottom|left"
-             height="16"
-             layout="topleft"
-             left_delta="0"
-             name="status_text"
-             top_pad="10"
-             width="150" />
-            <text
-             visible="false"
-             follows="bottom|right"
-             height="16"
-             left_delta="0"
-             name="refresh_search"
-             left_pad="0"
-             right="-10"
-             halign="right"
-             width="450">
-               Redo search to reflect current God level
-            </text>
-        </layout_panel>
-    </layout_stack>
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_web_content.xml b/indra/newview/skins/default/xui/en/floater_web_content.xml
index 69e60575562f7745852fd38f1c777d5911357813..0eda9ae62ab3c3a63344772a0b3d23fc9acb930e 100644
--- a/indra/newview/skins/default/xui/en/floater_web_content.xml
+++ b/indra/newview/skins/default/xui/en/floater_web_content.xml
@@ -40,6 +40,7 @@
 		    image_disabled_selected="PushButton_Disabled"
 		    image_selected="PushButton_Selected"
 		    image_unselected="PushButton_Off"
+        chrome="true"
 		    hover_glow_amount="0.15"
         tool_tip="Navigate back"
         follows="left|top"
@@ -58,6 +59,7 @@
 		    image_disabled_selected="PushButton_Disabled"
 		    image_selected="PushButton_Selected"
 		    image_unselected="PushButton_Off"
+        chrome="true"
         tool_tip="Navigate forward"
         follows="left|top"
         height="22"
@@ -75,6 +77,7 @@
 		    image_disabled_selected="PushButton_Disabled"
 		    image_selected="PushButton_Selected"
 		    image_unselected="PushButton_Off"
+        chrome="true"
         tool_tip="Stop navigation"
         enabled="true"
         follows="left|top"
@@ -93,6 +96,7 @@
 		    image_disabled_selected="PushButton_Disabled"
 		    image_selected="PushButton_Selected"
 		    image_unselected="PushButton_Off"
+        chrome="true"
         tool_tip="Reload page"
         follows="left|top"
         height="22"
@@ -137,6 +141,7 @@
 		    image_disabled_selected="PushButton_Disabled"
 		    image_selected="PushButton_Selected"
 		    image_unselected="PushButton_Off"
+        chrome="true"
         tool_tip="Open current URL in your desktop browser"
         follows="right|top"
         enabled="true" 
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 4ef64269e80e018bd9a7d3ee3caf2188555ec43c..2ba9393eeca3d418f2b247f6f2a81bc1ef765d6e 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -4991,19 +4991,19 @@ Would you like to automatically wear the clothing you are about to create?
    name="NotAgeVerified"
    type="alertmodal">
    <tag>fail</tag>
-You must be age-verified to visit this area.  Do you want to go to the [SECOND_LIFE] website and verify your age?
+To access adult content and areas in Second Life you must be at least 18 years old. Please visit our age verification page to confirm you are over 18. 
+Note this will launch your web browser.
 
 [_URL]
     <tag>confirm</tag>
     <url option="0" name="url">
-
-	    https://secondlife.com/account/verification.php
+	    https://secondlife.com/my/account/verification.php
     </url>
     <usetemplate
      ignoretext="I have not verified my age"
      name="okcancelignore"
-     notext="No"
-     yestext="Yes"/>
+     notext="Cancel"
+     yestext="Go to Age Verification"/>
   </notification>
 
   <notification
diff --git a/indra/newview/skins/default/xui/en/widgets/badge.xml b/indra/newview/skins/default/xui/en/widgets/badge.xml
index f77c4b71787f75830591a37bc533086d1bc1b12b..2d4c02b092904cf34c6ddf30f32cc3a4059324b3 100644
--- a/indra/newview/skins/default/xui/en/widgets/badge.xml
+++ b/indra/newview/skins/default/xui/en/widgets/badge.xml
@@ -7,11 +7,14 @@
        image="Badge_Background"
        image_color="BadgeImageColor"
        label_color="BadgeLabelColor"
+       label_offset_horiz="0"
+       label_offset_vert="0"
        location="top_left"
        location_percent_hcenter="85"
        location_percent_vcenter="85"
        padding_horiz="7"
        padding_vert="4"
        requests_front="true"
+       mouse_opaque="false"
        >
 </badge>
diff --git a/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml
index c34aec1bf0269b0f1436955b7c5861bc6e6fcae1..95f5cf2ecd03676a59f248f8c66384a4293e7f59 100644
--- a/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml
+++ b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml
@@ -6,5 +6,14 @@
   item_top_pad="4"
   selection_image="Rounded_Square"
   >
-	<new_badge label="New" location="right" padding_horiz="4" padding_vert="2" location_percent_hcenter="70" />
+	<new_badge 
+        label="New" 
+        label_offset_horiz="-1"
+        location="right" 
+        padding_horiz="4" 
+        padding_vert="1" 
+        location_percent_hcenter="70"
+        border_image=""
+        image="Badge_Background_New"
+        />
 </inbox_folder_view_folder>