diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index 99eb992dddb4b89e33e395a6513dc127b2465600..f7528bc62ab331e9776eca2aec819d6f2e657cda 100644
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -202,8 +202,9 @@ std::string LLUrlEntryHTTPLabel::getUrl(const std::string &string)
 LLUrlEntryHTTPNoProtocol::LLUrlEntryHTTPNoProtocol()
 {
 	mPattern = boost::regex("("
-				"\\bwww\\.\\S+\\.\\S+" // www.FOO.BAR
-				"|\\b[^ \t\n\r\f\v:/]+.(?:com|net|edu|org)[^[:space:][:alnum:]]*$" // FOO.net
+				"\\bwww\\.\\S+\\.\\S+" // i.e. www.FOO.BAR
+				"|" // or
+				"\\b[^ \\t\\n\\r\\f\\v:/]+\\.(?:com|net|edu|org)[^[:space:][:alnum:]]*\\>" // i.e. FOO.net
 				")",
 				boost::regex::perl|boost::regex::icase);
 	mMenuName = "menu_url_http.xml";
diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index ae89eb4413579f36aa16560388f35653d7224a7d..448e20b38271a60eb22d2551d47c4ae3c8bca3e5 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -5608,9 +5608,7 @@
   <layer_set
     body_region="head"
     width="512"
-    height="512"
-  clear_alpha="false"
-    alpha_tga_file="head_alpha.tga">
+    height="512">
     <layer
        name="head bump base"
        fixed_color = "128,128,128,255"
@@ -6608,6 +6606,13 @@ render_pass="bump">
       <texture
        local_texture="head_bodypaint" />
     </layer>
+    <layer
+	name="eyelash alpha"
+	visibility_mask="TRUE">
+       <texture
+	   tga_file="head_alpha.tga"
+	   file_is_mask="TRUE" />
+    </layer>
     <layer
        name="head alpha"
        visibility_mask="TRUE">
@@ -6620,6 +6625,7 @@ render_pass="bump">
          local_texture="head_tattoo" />
     </layer>
 
+
   </layer_set>
 
   <!-- =========================================================== -->
diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
index 814508daa9ff46befe965acd84e1ec5754f8d57c..94fe95d215a8ffadc44553836444275c7eca688d 100644
--- a/indra/newview/llsidepaneliteminfo.cpp
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -157,11 +157,12 @@ void LLSidepanelItemInfo::reset()
 
 void LLSidepanelItemInfo::refresh()
 {
-	LLInventoryItem* item = findItem();
+	LLViewerInventoryItem* item = findItem();
 	if(item)
 	{
 		refreshFromItem(item);
 		updateVerbs();
+		return;
 	}
 	else
 	{
@@ -170,11 +171,8 @@ void LLSidepanelItemInfo::refresh()
 			setIsEditing(FALSE);
 		}
 	}
-	
-	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
-	bool is_editable = item && (item->getUUID() != trash_id) && !gInventory.isObjectDescendentOf(item->getUUID(), trash_id);
 
-	if (!getIsEditing() || !is_editable)
+	if (!getIsEditing())
 	{
 		const std::string no_item_names[]={
 			"LabelItemName",
@@ -212,7 +210,7 @@ void LLSidepanelItemInfo::refresh()
 		}
 	}
 
-	if (!is_editable)
+	if (!item)
 	{
 		const std::string no_edit_mode_names[]={
 			"BtnCreator",
@@ -227,24 +225,26 @@ void LLSidepanelItemInfo::refresh()
 	updateVerbs();
 }
 
-void LLSidepanelItemInfo::refreshFromItem(LLInventoryItem* item)
+void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 {
 	////////////////////////
 	// PERMISSIONS LOOKUP //
 	////////////////////////
 
 	// do not enable the UI for incomplete items.
-	LLViewerInventoryItem* i = (LLViewerInventoryItem*)item;
-	BOOL is_complete = i->isComplete();
-	const BOOL cannot_restrict_permissions = LLInventoryType::cannotRestrictPermissions(i->getInventoryType());
-	const BOOL is_calling_card = (i->getInventoryType() == LLInventoryType::IT_CALLINGCARD);
+	BOOL is_complete = item->isComplete();
+	const BOOL cannot_restrict_permissions = LLInventoryType::cannotRestrictPermissions(item->getInventoryType());
+	const BOOL is_calling_card = (item->getInventoryType() == LLInventoryType::IT_CALLINGCARD);
 	const LLPermissions& perm = item->getPermissions();
 	const BOOL can_agent_manipulate = gAgent.allowOperation(PERM_OWNER, perm, 
 															GP_OBJECT_MANIPULATE);
 	const BOOL can_agent_sell = gAgent.allowOperation(PERM_OWNER, perm, 
 													  GP_OBJECT_SET_SALE) &&
 		!cannot_restrict_permissions;
-	const BOOL is_link = i->getIsLinkType();
+	const BOOL is_link = item->getIsLinkType();
+	
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
+	bool not_in_trash = item && (item->getUUID() != trash_id) && !gInventory.isObjectDescendentOf(item->getUUID(), trash_id);
 
 	// You need permission to modify the object to modify an inventory
 	// item in it.
@@ -261,7 +261,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLInventoryItem* item)
 	//////////////////////
 	BOOL is_modifiable = gAgent.allowOperation(PERM_MODIFY, perm,
 											   GP_OBJECT_MANIPULATE)
-		&& is_obj_modify && is_complete;
+		&& is_obj_modify && is_complete && not_in_trash;
 
 	childSetEnabled("LabelItemNameTitle",TRUE);
 	childSetEnabled("LabelItemName",is_modifiable && !is_calling_card); // for now, don't allow rename of calling cards
@@ -338,6 +338,64 @@ void LLSidepanelItemInfo::refreshFromItem(LLInventoryItem* item)
 		LLStringUtil::format (timeStr, substitution);
 		childSetText ("LabelAcquiredDate", timeStr);
 	}
+	
+	/////////////////////////////////////
+	// PERMISSIONS AND SALE ITEM HIDING
+	/////////////////////////////////////
+	
+	const std::string perm_and_sale_items[]={
+		"perms_inv",
+		"OwnerLabel",
+		"perm_modify",
+		"CheckOwnerModify",
+		"CheckOwnerCopy",
+		"CheckOwnerTransfer",
+		"GroupLabel",
+		"CheckShareWithGroup",
+		"AnyoneLabel",
+		"CheckEveryoneCopy",
+		"NextOwnerLabel",
+		"CheckNextOwnerModify",
+		"CheckNextOwnerCopy",
+		"CheckNextOwnerTransfer",
+		"CheckPurchase",
+		"SaleLabel",
+		"RadioSaleType",
+		"combobox sale copy",
+		"Edit Cost",
+		"TextPrice"
+	};
+	
+	const std::string debug_items[]={
+		"BaseMaskDebug",
+		"OwnerMaskDebug",
+		"GroupMaskDebug",
+		"EveryoneMaskDebug",
+		"NextMaskDebug"
+	};
+	
+	// Hide permissions checkboxes and labels and for sale info if in the trash
+	// or ui elements don't apply to these objects and return from function
+	if (!not_in_trash || cannot_restrict_permissions)
+	{
+		for(size_t t=0; t<LL_ARRAY_SIZE(perm_and_sale_items); ++t)
+		{
+			childSetVisible(perm_and_sale_items[t],false);
+		}
+		
+		for(size_t t=0; t<LL_ARRAY_SIZE(debug_items); ++t)
+		{
+			childSetVisible(debug_items[t],false);
+		}
+		return;
+	}
+	else // Make sure perms and sale ui elements are visible
+	{
+		for(size_t t=0; t<LL_ARRAY_SIZE(perm_and_sale_items); ++t)
+		{
+			childSetVisible(perm_and_sale_items[t],true);
+		}
+	}
 
 	///////////////////////
 	// OWNER PERMISSIONS //
@@ -541,7 +599,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLInventoryItem* item)
 
 void LLSidepanelItemInfo::onClickCreator()
 {
-	LLInventoryItem* item = findItem();
+	LLViewerInventoryItem* item = findItem();
 	if(!item) return;
 	if(!item->getCreatorUUID().isNull())
 	{
@@ -552,7 +610,7 @@ void LLSidepanelItemInfo::onClickCreator()
 // static
 void LLSidepanelItemInfo::onClickOwner()
 {
-	LLInventoryItem* item = findItem();
+	LLViewerInventoryItem* item = findItem();
 	if(!item) return;
 	if(item->getPermissions().isGroupOwned())
 	{
@@ -568,7 +626,7 @@ void LLSidepanelItemInfo::onClickOwner()
 void LLSidepanelItemInfo::onCommitName()
 {
 	//llinfos << "LLSidepanelItemInfo::onCommitName()" << llendl;
-	LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+	LLViewerInventoryItem* item = findItem();
 	if(!item)
 	{
 		return;
@@ -604,7 +662,7 @@ void LLSidepanelItemInfo::onCommitName()
 void LLSidepanelItemInfo::onCommitDescription()
 {
 	//llinfos << "LLSidepanelItemInfo::onCommitDescription()" << llendl;
-	LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+	LLViewerInventoryItem* item = findItem();
 	if(!item) return;
 
 	LLLineEditor* labelItemDesc = getChild<LLLineEditor>("LabelItemDesc");
@@ -642,7 +700,7 @@ void LLSidepanelItemInfo::onCommitDescription()
 void LLSidepanelItemInfo::onCommitPermissions()
 {
 	//llinfos << "LLSidepanelItemInfo::onCommitPermissions()" << llendl;
-	LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+	LLViewerInventoryItem* item = findItem();
 	if(!item) return;
 	LLPermissions perm(item->getPermissions());
 
@@ -751,7 +809,7 @@ void LLSidepanelItemInfo::onCommitSaleType()
 
 void LLSidepanelItemInfo::updateSaleInfo()
 {
-	LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+	LLViewerInventoryItem* item = findItem();
 	if(!item) return;
 	LLSaleInfo sale_info(item->getSaleInfo());
 	if(!gAgent.allowOperation(PERM_TRANSFER, item->getPermissions(), GP_OBJECT_SET_SALE))
@@ -851,9 +909,9 @@ void LLSidepanelItemInfo::updateSaleInfo()
 	}
 }
 
-LLInventoryItem* LLSidepanelItemInfo::findItem() const
+LLViewerInventoryItem* LLSidepanelItemInfo::findItem() const
 {
-	LLInventoryItem* item = NULL;
+	LLViewerInventoryItem* item = NULL;
 	if(mObjectID.isNull())
 	{
 		// it is in agent inventory
@@ -864,7 +922,7 @@ LLInventoryItem* LLSidepanelItemInfo::findItem() const
 		LLViewerObject* object = gObjectList.findObject(mObjectID);
 		if(object)
 		{
-			item = (LLInventoryItem*)object->getInventoryObject(mItemID);
+			item = static_cast<LLViewerInventoryItem*>(object->getInventoryObject(mItemID));
 		}
 	}
 	return item;
diff --git a/indra/newview/llsidepaneliteminfo.h b/indra/newview/llsidepaneliteminfo.h
index 21002327bcd4a444de43ee5532784c9deaec6395..e6dbf400ee969f2069252d85cdf3503635b8d081 100644
--- a/indra/newview/llsidepaneliteminfo.h
+++ b/indra/newview/llsidepaneliteminfo.h
@@ -41,7 +41,7 @@
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 class LLButton;
-class LLInventoryItem;
+class LLViewerInventoryItem;
 class LLItemPropertiesObserver;
 class LLViewerObject;
 class LLPermissions;
@@ -63,10 +63,10 @@ class LLSidepanelItemInfo : public LLSidepanelInventorySubpanel
 	/*virtual*/ void refresh();
 	/*virtual*/ void save();
 
-	LLInventoryItem* findItem() const;
+	LLViewerInventoryItem* findItem() const;
 	LLViewerObject*  findObject() const;
 	
-	void refreshFromItem(LLInventoryItem* item);
+	void refreshFromItem(LLViewerInventoryItem* item);
 
 private:
 	LLUUID mItemID; 	// inventory UUID for the inventory item.