diff --git a/indra/llplugin/llpluginprocesschild.cpp b/indra/llplugin/llpluginprocesschild.cpp
index ccf6dab942a1bdb1d28a897ad1feb4f4bf1257fc..07fc82c770f544f399a2bfbce51b5e9c682a3ba6 100644
--- a/indra/llplugin/llpluginprocesschild.cpp
+++ b/indra/llplugin/llpluginprocesschild.cpp
@@ -54,8 +54,14 @@ LLPluginProcessChild::~LLPluginProcessChild()
 	if(mInstance != NULL)
 	{
 		sendMessageToPlugin(LLPluginMessage("base", "cleanup"));
-		delete mInstance;
-		mInstance = NULL;
+
+		// IMPORTANT: under some (unknown) circumstances the apr_dso_unload() triggered when mInstance is deleted 
+		// appears to fail and lock up which means that a given instance of the slplugin process never exits. 
+		// This is bad, especially when users try to update their version of SL - it fails because the slplugin 
+		// process as well as a bunch of plugin specific files are locked and cannot be overwritten.
+		exit( 0 );
+		//delete mInstance;
+		//mInstance = NULL;
 	}
 }
 
diff --git a/indra/llwindow/llkeyboardwin32.cpp b/indra/llwindow/llkeyboardwin32.cpp
index 35a3e7621af318372cfd0329218e111f8f4b2c9c..ab5ecb4e63cf6053af717d1415abc54726e6952e 100644
--- a/indra/llwindow/llkeyboardwin32.cpp
+++ b/indra/llwindow/llkeyboardwin32.cpp
@@ -80,7 +80,7 @@ LLKeyboardWin32::LLKeyboardWin32()
 	mTranslateKeyMap[VK_OEM_COMMA]  = ',';
 	mTranslateKeyMap[VK_OEM_MINUS]  = '-';
 	mTranslateKeyMap[VK_OEM_PERIOD] = '.';
-	mTranslateKeyMap[VK_OEM_2] = KEY_PAD_DIVIDE;
+	mTranslateKeyMap[VK_OEM_2] = '/';//This used to be KEY_PAD_DIVIDE, but that breaks typing into text fields in media prims
 	mTranslateKeyMap[VK_OEM_3] = '`';
 	mTranslateKeyMap[VK_OEM_4] = '[';
 	mTranslateKeyMap[VK_OEM_5] = '\\';
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index d43432e21558f30efa78d42ee8c271264ed114b1..7d98a4b6ce6c49a7737737ee2d262383c1d4d2cb 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -4820,6 +4820,17 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+	<key>MyOutfitsAutofill</key>
+	<map>
+		<key>Comment</key>
+		<string>Always autofill My Outfits from library when empty (else happens just once).</string>
+		<key>Persist</key>
+		<integer>1</integer>
+		<key>Type</key>
+		<string>Boolean</string>
+		<key>Value</key>
+		<integer>0</integer>
+	</map>
     <key>NearMeRange</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index d21965568d252c5a44f5d71806134e97b43bda12..29530c9c05276e98a799611f9590cc988085d671 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -911,7 +911,7 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs
 	
 	// If this is the very first time the user has logged into viewer2+ (from a legacy viewer, or new account)
 	// then auto-populate outfits from the library into the My Outfits folder.
-	if (LLInventoryModel::getIsFirstTimeInViewer2())
+	if (LLInventoryModel::getIsFirstTimeInViewer2() || gSavedSettings.getBOOL("MyOutfitsAutofill"))
 	{
 		gAgentWearables.populateMyOutfitsFolder();
 	}
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 11dd48056cc02ff935f0ce8ff59c569af071cc8d..d0716f67b8027cb5212ba6b45e5b30fdfc7258b0 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -325,6 +325,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
 	mCommitCallbackRegistrar.add("Pref.WindowedMod",            boost::bind(&LLFloaterPreference::onCommitWindowedMode, this));	
 	mCommitCallbackRegistrar.add("Pref.UpdateSliderText",       boost::bind(&LLFloaterPreference::onUpdateSliderText,this, _1,_2));	
 	mCommitCallbackRegistrar.add("Pref.AutoDetectAspect",       boost::bind(&LLFloaterPreference::onCommitAutoDetectAspect, this));	
+	mCommitCallbackRegistrar.add("Pref.ParcelMediaAutoPlayEnable",       boost::bind(&LLFloaterPreference::onCommitParcelMediaAutoPlayEnable, this));	
 	mCommitCallbackRegistrar.add("Pref.onSelectAspectRatio",    boost::bind(&LLFloaterPreference::onKeystrokeAspectRatio, this));	
 	mCommitCallbackRegistrar.add("Pref.QualityPerformance",     boost::bind(&LLFloaterPreference::onChangeQuality, this, _2));	
 	mCommitCallbackRegistrar.add("Pref.applyUIColor",			boost::bind(&LLFloaterPreference::applyUIColor, this ,_1, _2));
@@ -986,6 +987,25 @@ void LLFloaterPreference::onCommitAutoDetectAspect()
 	}
 }
 
+void LLFloaterPreference::onCommitParcelMediaAutoPlayEnable()
+{
+	BOOL autoplay = getChild<LLCheckBoxCtrl>("autoplay_enabled")->get();
+		
+	gSavedSettings.setBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING, autoplay);
+
+	lldebugs << "autoplay now = " << int(autoplay) << llendl;
+
+	if (autoplay)
+	{
+		// autoplay toggle has gone from FALSE to TRUE; ensure that
+		// the media system is thus actually turned on too.
+		gSavedSettings.setBOOL("AudioStreamingVideo", TRUE);
+		gSavedSettings.setBOOL("AudioStreamingMusic", TRUE);
+		gSavedSettings.setBOOL("AudioStreamingMedia", TRUE);
+		llinfos << "autoplay turned on, turned all media subsystems on" << llendl;
+	}
+}
+
 void LLFloaterPreference::refresh()
 {
 	LLPanel::refresh();
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index 74a53d673c457951204b3a3d5c20779c8ef4691c..b2bc34231d35f08123e254c1a6bdbae03b934c2c 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -132,6 +132,7 @@ public:
 //	void fractionFromDecimal(F32 decimal_val, S32& numerator, S32& denominator);
 
 	void onCommitAutoDetectAspect();
+	void onCommitParcelMediaAutoPlayEnable();
 	void applyResolution();
 	void applyUIColor(LLUICtrl* ctrl, const LLSD& param);
 	void getUIColor(LLUICtrl* ctrl, const LLSD& param);	
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 112b23d2df08198e8a5865fbccaef342c0ae0af3..41f4d1a663ccd6b3fc03ecd6b1a36b6f535cb2fa 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -569,6 +569,8 @@ LLFolderViewItem* LLFolderView::getCurSelectedItem( void )
 BOOL LLFolderView::setSelection(LLFolderViewItem* selection, BOOL openitem,
 								BOOL take_keyboard_focus)
 {
+	mSignalSelectCallback = take_keyboard_focus ? SIGNAL_KEYBOARD_FOCUS : SIGNAL_NO_KEYBOARD_FOCUS;
+
 	if( selection == this )
 	{
 		return FALSE;
@@ -596,8 +598,6 @@ BOOL LLFolderView::setSelection(LLFolderViewItem* selection, BOOL openitem,
 
 	llassert(mSelectedItems.size() <= 1);
 
-	mSignalSelectCallback = take_keyboard_focus ? SIGNAL_KEYBOARD_FOCUS : SIGNAL_NO_KEYBOARD_FOCUS;
-
 	return rv;
 }
 
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 47d593ca89480f98e49528d48dbe73c55743b846..2a395d79dcdd990a09ae69c3180ac30c9a2b68e1 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -2627,6 +2627,13 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 			{
 				mItems.push_back(std::string("Rename"));
 				mItems.push_back(std::string("Delete"));
+
+				// EXT-4030: disallow deletion of currently worn outfit
+				const LLViewerInventoryItem *base_outfit_link = LLAppearanceManager::instance().getBaseOutfitLink();
+				if (base_outfit_link && (cat == base_outfit_link->getLinkedCategory()))
+				{
+					mDisabledItems.push_back(std::string("Delete"));
+				}
 			}
 		}
 
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 2e5526a273c40bf063c7ffeeee20873819e4df63..498a29728c28d926c4929cd7cbbc9f913093f222 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -433,11 +433,10 @@ void LLInventoryPanel::initializeViews()
 	{
 		mStartFolderID = (preferred_type != LLFolderType::FT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null);
 	}
-	llinfos << this << " Generating views for start folder " << mStartFolderString << llendl;
 	rebuildViewsFor(mStartFolderID);
 
 	mViewsInitialized = true;
-	defaultOpenInventory();
+	openStartFolderOrMyInventory();
 }
 
 void LLInventoryPanel::rebuildViewsFor(const LLUUID& id)
@@ -577,7 +576,7 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)
 }
 
 // bit of a hack to make sure the inventory is open.
-void LLInventoryPanel::defaultOpenInventory()
+void LLInventoryPanel::openStartFolderOrMyInventory()
 {
 	if (mStartFolderString != "")
 	{
@@ -585,13 +584,17 @@ void LLInventoryPanel::defaultOpenInventory()
 	}
 	else
 	{
-		// Get the first child (it should be "My Inventory") and
-		// open it up by name (just to make sure the first child is actually a folder).
-		LLView* first_child = mFolders->getFirstChild();
-		if (first_child)
+		// Find My Inventory folder and open it up by name
+		for (LLView *child = mFolders->getFirstChild(); child; child = mFolders->findNextSibling(child))
 		{
-			const std::string& first_child_name = first_child->getName();
-			mFolders->openFolder(first_child_name);
+			LLFolderViewFolder *fchild = dynamic_cast<LLFolderViewFolder*>(child);
+			if (fchild && fchild->getListener() &&
+				(fchild->getListener()->getUUID() == gInventory.getRootFolderID()))
+			{
+				const std::string& child_name = child->getName();
+				mFolders->openFolder(child_name);
+				break;
+			}
 		}
 	}
 }
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index 4f7f0a79f64a919d7ce60088cc24fdc68c5cb7b4..09533b52f1e12a06d6f9a636f8c5617b9753db35 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -167,7 +167,7 @@ public:
 	static LLInventoryPanel *getActiveInventoryPanel(BOOL auto_open = TRUE);
 
 protected:
-	void defaultOpenInventory(); // open the first level of inventory
+	void openStartFolderOrMyInventory(); // open the first level of inventory
 
 	LLInventoryModel*			mInventory;
 	LLInventoryObserver*		mInventoryObserver;
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index 29fa4b319caea4e8f6b1a228e550413cb68b8c64..a1c12412b5ddf8e6ec5a9e4e8daca670cb7bf4e3 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -415,7 +415,7 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
 	if (command_name == "wear" ||
 		command_name == "make_outfit")
 	{
-		const BOOL is_my_outfits = (mActivePanel->getName() == "outfitslist_accordionpanel");
+		const BOOL is_my_outfits = (mActivePanel->getName() == "outfitslist_tab");
 		if (!is_my_outfits)
 		{
 			return FALSE;
@@ -468,11 +468,11 @@ void LLPanelOutfitsInventory::initTabPanels()
 {
 	mTabPanels.resize(2);
 
-	LLInventoryPanel *cof_panel = getChild<LLInventoryPanel>("cof_accordionpanel");
+	LLInventoryPanel *cof_panel = getChild<LLInventoryPanel>("cof_tab");
 	cof_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
 	mTabPanels[0] = cof_panel;
 	
-	LLInventoryPanel *myoutfits_panel = getChild<LLInventoryPanel>("outfitslist_accordionpanel");
+	LLInventoryPanel *myoutfits_panel = getChild<LLInventoryPanel>("outfitslist_tab");
 	myoutfits_panel->setFilterTypes(1LL << LLFolderType::FT_OUTFIT, LLInventoryFilter::FILTERTYPE_CATEGORY);
 	myoutfits_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
 	mTabPanels[1] = myoutfits_panel;
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index 0aefebce10bbbac62c3d615e22cc66e3267a1bfd..d870009e4f3d4e7caebbea5896bf63b33c5206fc 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -213,7 +213,7 @@ void LLSidepanelAppearance::onOpenOutfitButtonClicked()
 	if (tab_outfits)
 	{
 		tab_outfits->changeOpenClose(FALSE);
-		LLInventoryPanel *inventory_panel = tab_outfits->findChild<LLInventoryPanel>("outfitslist_accordionpanel");
+		LLInventoryPanel *inventory_panel = tab_outfits->findChild<LLInventoryPanel>("outfitslist_tab");
 		if (inventory_panel)
 		{
 			LLFolderView *folder = inventory_panel->getRootFolder();
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 9d796d7299967a3d40b082b264f91663eb5bd9da..412878eef509116b78061ab3fac06ea44567b913 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -731,7 +731,7 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)
 				LLInspector::Params p;
 				p.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>());
 				p.message(avatar_name);
-				p.image(LLUI::getUIImage("Info"));
+				p.image.name("Inspector_I");
 				p.click_callback(boost::bind(showAvatarInspector, hover_object->getID()));
 				p.visible_time_near(6.f);
 				p.visible_time_far(3.f);
@@ -822,7 +822,7 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)
 					LLInspector::Params p;
 					p.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>());
 					p.message(tooltip_msg);
-					p.image(LLUI::getUIImage("Info_Off"));
+					p.image.name("Inspector_I");
 					p.click_callback(boost::bind(showObjectInspector, hover_object->getID(), mHoverPick.mObjectFace));
 					p.time_based_media(is_time_based_media);
 					p.web_based_media(is_web_based_media);
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 70bfc6752316ee115b984f9dbaceeea4a35ca808..55609621b3ac967bd94bc1f44ed8a6c16b27a084 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -2689,13 +2689,16 @@ U32 LLVOVolume::getRenderCost(std::set<LLUUID> &textures) const
 		const LLTextureEntry* te = face->getTextureEntry();
 		const LLViewerTexture* img = face->getTexture();
 
-		textures.insert(img->getID());
+		if (img)
+		{
+			textures.insert(img->getID());
+		}
 
 		if (face->getPoolType() == LLDrawPool::POOL_ALPHA)
 		{
 			alpha++;
 		}
-		else if (img->getPrimaryFormat() == GL_ALPHA)
+		else if (img && img->getPrimaryFormat() == GL_ALPHA)
 		{
 			invisi = 1;
 		}
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
index 614a2e2ffe87fbdbeb7f1ffd528a1e125a7284bc..74eafb24dbe4ef6aa4fd37aab3555cfdddb8c4b8 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
@@ -46,8 +46,8 @@
            top="0"
            width="314"
            mouse_opaque="true"
-           name="outfitslist_accordionpanel"
-           start_folder="My Outfits" />
+           name="outfitslist_tab"
+           start_folder="My Outfits" /> 
    </tab_container>
 	<panel
 	  background_visible="true"
@@ -82,10 +82,10 @@
 		  tool_tip="Remove selected item"
 		  top="6"
 		  width="18" />
-     <button
-      follows="bottom|left"
-      height="23"
-      label="Make Outfit"
+	 <button
+	  follows="bottom|left"
+		height="23" 
+      label="Make Outfit" 
       layout="topleft"
       name="make_outfit_btn"
       tool_tip="Save appearance as an outfit"
@@ -93,8 +93,8 @@
        left='10'
       width="120" />
      <button
-      follows="bottom|right"
-      height="23"
+      follows="bottom|right" 
+      height="23" 
       label="Wear"
       layout="topleft"
       name="wear_btn"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
index 25d7ba0903f193f5a8ba293157ae0970c0d3fba0..5dd93d0f7e6b27b77b0ae782eeabd61fffda2edd 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -85,7 +85,10 @@
      left="30"
      name="autoplay_enabled"
      top_pad="10"
-     width="350" />
+     width="350">
+       <check_box.commit_callback
+          function="Pref.ParcelMediaAutoPlayEnable" />
+    </check_box>
    <text
       type="string"
     length="1"
diff --git a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
index 4cef1f9c608139e00b53b52120d7d2938e21a8c0..075d9232b1db5c18b489c8224a4a32d8ba79a838 100644
--- a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
@@ -14,7 +14,7 @@
   <string name="min_width">300</string>
   <string name="min_height">75</string>
   <string name="zoom_near_padding">1.0</string>
-  <string name="zoom_medium_padding">1.25</string>
+  <string name="zoom_medium_padding">1.1</string>
   <string name="zoom_far_padding">1.5</string>
   <string name="top_world_view_avoid_zone">50</string>
   <layout_stack
@@ -113,6 +113,7 @@
 	</layout_panel>
 	<layout_panel
 		name="fwd"
+		mouse_opaque="false"
 		auto_resize="false"
 		user_resize="false"
 		layout="topleft"
@@ -140,6 +141,7 @@
 	</layout_panel>
 	<layout_panel
 		name="home"
+		mouse_opaque="false"
 		auto_resize="false"
 		user_resize="false"
 		layout="topleft"
@@ -167,6 +169,7 @@
 	</layout_panel>
 	<layout_panel
 		name="media_stop"
+		mouse_opaque="false"
 		auto_resize="false"
 		user_resize="false"
 		layout="topleft"
@@ -194,6 +197,7 @@
 	</layout_panel>
 	<layout_panel
 		name="reload"
+		mouse_opaque="false"
 		auto_resize="false"
 		user_resize="false"
 		layout="topleft"
@@ -221,6 +225,7 @@
 	</layout_panel>
 	<layout_panel
 		name="stop"
+		mouse_opaque="false"
 		auto_resize="false"
 		user_resize="false"
 		layout="topleft"
@@ -248,6 +253,7 @@
 	</layout_panel>
 	<layout_panel
 		name="play"
+		mouse_opaque="false"
 		auto_resize="false"
 		user_resize="false"
 		layout="topleft"
@@ -276,6 +282,7 @@
 	</layout_panel>
 	<layout_panel
 		name="pause"
+		mouse_opaque="false"
 		auto_resize="false"
 		user_resize="false"
 		layout="topleft"
@@ -303,6 +310,7 @@
 	<!-- media URL entry  -->
 	<layout_panel
 		name="media_address"
+		mouse_opaque="false"
 		auto_resize="true"
 		user_resize="false"
 		height="24"
@@ -367,6 +375,7 @@
 	</layout_panel>
 	<layout_panel
 		name="media_play_position"
+		mouse_opaque="false"
 		auto_resize="true"
 		user_resize="false"
 		follows="left|right"
@@ -392,6 +401,7 @@
 	</layout_panel>
 	<layout_panel
 		name="skip_back"
+		mouse_opaque="false"
 		auto_resize="false"
 		user_resize="false"
 		layout="topleft"
@@ -419,6 +429,7 @@
 	</layout_panel>
 	<layout_panel
 		name="skip_forward"
+		mouse_opaque="false"
 		auto_resize="false"
 		user_resize="false"
 		layout="topleft"
@@ -445,6 +456,7 @@
 	</layout_panel>
 	<layout_panel
 		name="media_volume"
+		mouse_opaque="false"
 		auto_resize="false"
 		user_resize="false"
 		layout="topleft"
@@ -501,6 +513,7 @@
 	</layout_panel>
 	<layout_panel
 		name="zoom_frame"
+		mouse_opaque="false"
 		auto_resize="false"
 		user_resize="false"
 		layout="topleft"
@@ -528,6 +541,7 @@
 	</layout_panel>
 	<layout_panel
 		name="close"
+		mouse_opaque="false"
 		auto_resize="false"
 		user_resize="false"
 		layout="topleft"
@@ -554,6 +568,7 @@
 	</layout_panel>
 	<layout_panel
 		name="new_window"
+		mouse_opaque="false"
 		auto_resize="false"
 		user_resize="false"
 		layout="topleft"
@@ -581,6 +596,7 @@
 	<!-- bookend panel -->
 	<layout_panel
 		name="right_bookend"
+		mouse_opaque="false"
 		top="0"
 		width="0"
 		layout="topleft"